【转】Android世界的Swift - Kotlin语言
最近Oracle又在和Google撕的厉害,才知道还有这么Kotlin在Android像Swift在Mac的地位一说。
Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。
按照JetBrains的说法,根据他们多年的Java平台开发经验,他们认为Java编程语言有一定的局限性和问题,而且由于需要向后兼容,它们不可能或很难得到解决。因此,他们创建了Kotlin项目,主要目标是:
- 创建一种兼容Java的语言
- 编译速度至少同Java一样快
- 比Java更安全
- 比Java更简洁
- 比最成熟的竞争者Scala还简单
Ashraff Hathibelagal是一名喜欢研究新框架和SDK的独立开发者。近日,他撰文介绍了Kotlin的一些语法。按照他的说法,一个合格的Java程序员可以在很短的时间内学会使用Kotlin。
类与构造函数
Kotlin创建类的方式与Java类似,比如下面的代码创建了一个有三个属性的Person类:
class Person{var name: String = ""var age: Int = 0var college: String? = null
}
可以看到,Kotlin的变量声明方式略有些不同。在Kotlin中,声明变量必须使用关键字var,而如果要创建一个只读/只赋值一次的变量,则需要使用val代替它。另外,为了实现“空安全(null safety)”,Kotlin对可以为空的变量和不可以为空的变量作了区分。在上述代码中,变量name和age不可为空,而?表明变量college可以为空。定义完类之后,创建实例就非常简单了:
var jake = Person()
注意,Kotlin没有关键字new。实例创建完成后,就可以像在Java中一样为变量赋值了:
jake.name = "Jake Hill"
jake.age = 24
jake.college = "Stephen's College"
变量可以采用上述方式赋值,也可以通过构造函数赋值,但后者是一种更好的编码实践。在Kotlin中,创建这样的一个构造函数非常简单:
class Person(var name: String, var age: Int, var college: String?) {
}
而实际上,由于构造函数中没有其它操作,所以花括号也可以省略,代码变得相当简洁:
class Person(var name: String, var age: Int, var college: String?)var jake = Person("Jake Hill", 24, "Stephen's College")
上述代码中的构造函数是类头的一部分,称为主构造函数。在Kotlin中,还可以使用constructor关键字创建辅助构造函数,例如,下面的代码增加了一个辅助构造函数初始化变量email:
class Person(var name: String, var age: Int, var college: String?) {var email: String = ""constructor(name:String, age:Int, college: String?, email: String) : this(name, age, college) {this.email = email}
}
Kotlin允许创建派生类,但要遵循如下规则:
- 必须使用:代替Java中的extends关键字
- 基类头必须有open注解
- 基类必须有一个带参数的构造函数,派生类要在它自己的头中初始化那些参数
比如下面的代码创建了一个名为Empoyee的派生类:
open class Person(var name: String, var age: Int, var college: String?) {...
}class Employee(name: String, age: Int, college: String?, var company: String) : Person(name, age, college) {
}
函数与扩展
有派生就有重载。与类的派生一样,允许重载的方法要有open注解,而在派生类中重载时要使用override注解。例如,下面是在Employee类中重载Person类的isEligibleToVote方法的代码:
override fun isEligibleToVote(): Boolean {return true
}
除了改变类的已有行为,Kotlin还允许开发者在不修改类的原始定义的情况下实现对类的扩展,如下面的代码为Person类增加了一个名为isTeenager的扩展:
fun Person.isTeenager(): Boolean {return age in 13..19
}
在需要扩展来自其它项目的类时,这个特性特别有用。
上面提到的函数都与Java中的函数类似,但Kotlin还支持其它类型的函数。如果一个函数返回单个表达式的值,那么可以使用=来定义函数。下面是一个创建单表达式函数的例子:
fun isOctogenarian(): Boolean = age in 80 .. 89
Kotlin还支持高阶函数和Lambda表达式。例如,lambda表达式{x,y->x+y}可以像下面这样给一个变量赋值:
val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
而下面的高阶函数将上述表达式作为一个参数,并将表达式的计算结果翻倍:
fun doubleTheResult(x:Int, y:Int, f:(Int, Int)->Int): Int {return f(x,y) * 2
}
该函数可以使用下面的其中一种方式调用:
val result1 = doubleTheResult(3, 4, sumLambda)
或
val result2 = doubleTheResult(3, 4, {x,y -> x+y})
范围表达式
在Kotlin中,范围表达式用的比较多。范围创建只需要..操作符,例如:
val r1 = 1..5
//该范围包含数值1,2,3,4,5
如果创建一个降序范围,则需要使用downTo函数,例如:
val r2 = 5 downTo 1
//该范围包含数值5,4,3,2,1
如果步长不是1,则需要使用step函数,例如:
val r3 = 5 downTo 1 step 2
//该范围包含数值5,3,1
条件结构
在Kotlin中,if是一个表达式,根据条件是否满足返回不同的值,例如,下面的代码将isEligibleToVote设置为“Yes”
var age = 20
val isEligibleToVote = if(age > 18) "Yes" else "No"
when表达式相当于Java的switch,但功能更强大,例如,下面的代码将typeOfPerson设置为“Teenager”:
val age = 17val typeOfPerson = when(age){0 -> "New born"in 1..12 -> "Child"in 13..19 -> "Teenager"else -> "Adult"
}
循环结构
Kotlin使用for..in遍历数组、集合及其它提供了迭代器的数据结构,语法同Java几乎完全相同,只是用in操作符取代了:操作符,例如,下面的代码将遍历一个String对象数组:
val names = arrayOf("Jake", "Jill", "Ashley", "Bill")for (name in names) {println(name)
}
while和do..while循环的语法与Java完全相同。
字符串模板
Kotlin允许在字符串中嵌入变量和表达式,例如:
val name = "Bob"
println("My name is ${name}") //打印"My name is Bob"val a = 10
val b = 20
println("The sum is ${a+b}") //打印"The sum is 30"
此外,Kotlin与Java高度可互操作。Kotlin可以用一种自然的方式调用现有的Java代码,而Java也很容易调用Kotlin代码。同时,Kotlin也可以与JavaScript互操作。
上面介绍的只是Kotlin的一些基本语法和特性,更多细节请查阅官方文档。事实上,到目前为止,Kotlin还仍然只是一个预览版本,接下来的几个月中还会有多项重大改进及新增特性。尽管如此,GitHub上已有400多个与Kotlin项目相关的库。
在另外一篇文章中,Hathibelagal写道,“如果你正在为Android开发寻找一种替代编程语言,那么应该试下Kotlin。它很容易在Android项目中替代Java或者同Java一起使用。”想要了解如何在Android Studio中使用Kotlin开发Android项目的读者,可以读下这篇文章。
来源:http://www.infoq.com/cn/news/2015/06/Android-JVM-JetBrains-Kotlin
转载于:https://www.cnblogs.com/x3d/p/4674615.html
【转】Android世界的Swift - Kotlin语言相关推荐
- 【译】将 Android 项目迁移到 Kotlin 语言
本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘 ...
- 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )
文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...
- Android Studio中的Kotlin语言
Android Studio中支持Java语言和Kotlin语言,为什么我们更建议使用Kotlin语言呢?主要原因有以下几点: 1.语法更加简洁,对于同样的功能,使用Kotlin开发的代码量可能会比使 ...
- 【Android学习之路】新手入门Kotlin语言
入门Kotlin编程语言 Kotlin简介 Kotlin是一种在Java虚拟机上运行的静态类编程语言, 有Android世界的Swift之称,是由JetBrains公司设计开发并且开源的编程语言.早在 ...
- 认识一下Kotlin语言,Android平台的Swift
今天在CSDN首页偶然看到一个贴子JetBrains正式公布Kotlin 1.0:JVM和Android上更好用的语言 看完后,感觉Kotlin语法非常简洁,有一系列动态语言的特点,Lambda表达式 ...
- android动画设置的单位,Kotlin语言入门—实现单位转换,view设置,动画等
dp转换为px 在android开发中,dp sp px之间的转换是不可避免的,在使用java语言开发时,往往会做个工具类进项转化.这样的工具类在网上很多,这里就不在展示了. 如果使用Kotlin语言 ...
- swift android界面,使用 Swift 语言编写 Android 应用入门
原标题:使用 Swift 语言编写 Android 应用入门 Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码.本文解释了如何在你的安卓手机上运行一个简单 ...
- Android开发:kotlin语言实现简易计算器
Android开发:kotlin语言实现简易计算器 1. 实现效果 2. 主要文件代码: 界面布局:activity_main.xml文件代码 字符定义:string.xml文件代码 逻辑实现:Mai ...
- Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数
探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...
- 【Android学习之路】Kotlin语言基础
Kotlin语法基础 文章目录 Kotlin语法基础 变量 NULL检查机制 对象数据类型 类型转换 字符和字符串 区间 函数 lambda(匿名函数) 程序逻辑控制 if条件判断 when条件语句 ...
最新文章
- JSP 标准标签库(JSTL)
- vb.net2019-读取定宽文本文件-比如日志
- Spring Boot国际化支持
- G1 解决Evacuation Failure和Humongous Allocation
- 通过 Route 配置的例子,学习SAP Cloud for Customer 的scoping操作
- 【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类
- 从“挖光缆”到“剪网线”|蚂蚁金服异地多活的微服务体系
- MPEG-4视频编码核心思想
- linux进入超级管理员权限,一直处于超级管理员权限下
- go mock mysql_go sqlmocks的使用
- 如何在 Windows 操作系统中使用 Office 模板?
- Hadoop 面试题
- PCA人脸识别详解——初学者必看
- 北邮机试 打牌——破除固化思维,连续与不连续
- 阿里巴巴高级算法专家威视:组建技术团队的一些思考
- excel中if的嵌套使用方法
- mysql.tar.xz怎么安装_.tar.xz文件的解压
- 编写批量修改扩展名脚本
- 【Python百日基础系列】Day02-Python语法基础
- 【Book】剑指Offer -- By 何海涛