最近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语言相关推荐

  1. 【译】将 Android 项目迁移到 Kotlin 语言

    本文讲的是[译]将 Android 项目迁移到 Kotlin 语言, 原文地址:Migrating an Android project to Kotlin 原文作者:Ben Weiss 译文出自:掘 ...

  2. 【Android NDK 开发】Kotlin 语言中使用 NDK ( 创建支持 Kotlin 的 NDK 项目 | Kotlin 语言中使用 NDK 要点 | 代码示例 )

    文章目录 一.创建支持 Kotlin 的 NDK 项目 二.Kotlin 语言中使用 NDK 要点 1.加载动态库 2.声明 ndk 方法 3.Project 下的 build.gradle 配置 4 ...

  3. Android Studio中的Kotlin语言

    Android Studio中支持Java语言和Kotlin语言,为什么我们更建议使用Kotlin语言呢?主要原因有以下几点: 1.语法更加简洁,对于同样的功能,使用Kotlin开发的代码量可能会比使 ...

  4. 【Android学习之路】新手入门Kotlin语言

    入门Kotlin编程语言 Kotlin简介 Kotlin是一种在Java虚拟机上运行的静态类编程语言, 有Android世界的Swift之称,是由JetBrains公司设计开发并且开源的编程语言.早在 ...

  5. 认识一下Kotlin语言,Android平台的Swift

    今天在CSDN首页偶然看到一个贴子JetBrains正式公布Kotlin 1.0:JVM和Android上更好用的语言 看完后,感觉Kotlin语法非常简洁,有一系列动态语言的特点,Lambda表达式 ...

  6. android动画设置的单位,Kotlin语言入门—实现单位转换,view设置,动画等

    dp转换为px 在android开发中,dp sp px之间的转换是不可避免的,在使用java语言开发时,往往会做个工具类进项转化.这样的工具类在网上很多,这里就不在展示了. 如果使用Kotlin语言 ...

  7. swift android界面,使用 Swift 语言编写 Android 应用入门

    原标题:使用 Swift 语言编写 Android 应用入门 Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码.本文解释了如何在你的安卓手机上运行一个简单 ...

  8. Android开发:kotlin语言实现简易计算器

    Android开发:kotlin语言实现简易计算器 1. 实现效果 2. 主要文件代码: 界面布局:activity_main.xml文件代码 字符定义:string.xml文件代码 逻辑实现:Mai ...

  9. Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数

    探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...

  10. 【Android学习之路】Kotlin语言基础

    Kotlin语法基础 文章目录 Kotlin语法基础 变量 NULL检查机制 对象数据类型 类型转换 字符和字符串 区间 函数 lambda(匿名函数) 程序逻辑控制 if条件判断 when条件语句 ...

最新文章

  1. JSP 标准标签库(JSTL)
  2. vb.net2019-读取定宽文本文件-比如日志
  3. Spring Boot国际化支持
  4. G1 解决Evacuation Failure和Humongous Allocation
  5. 通过 Route 配置的例子,学习SAP Cloud for Customer 的scoping操作
  6. 【Pytorch神经网络实战案例】20 基于Cora数据集实现图卷积神经网络论文分类
  7. 从“挖光缆”到“剪网线”|蚂蚁金服异地多活的微服务体系
  8. MPEG-4视频编码核心思想
  9. linux进入超级管理员权限,一直处于超级管理员权限下
  10. go mock mysql_go sqlmocks的使用
  11. 如何在 Windows 操作系统中使用 Office 模板?
  12. Hadoop 面试题
  13. PCA人脸识别详解——初学者必看
  14. 北邮机试 打牌——破除固化思维,连续与不连续
  15. 阿里巴巴高级算法专家威视:组建技术团队的一些思考
  16. excel中if的嵌套使用方法
  17. mysql.tar.xz怎么安装_.tar.xz文件的解压
  18. 编写批量修改扩展名脚本
  19. 【Python百日基础系列】Day02-Python语法基础
  20. 【Book】剑指Offer -- By 何海涛

热门文章

  1. Redis 常用命令
  2. 封装自己的DB类(PHP)
  3. 算法实践——改良的求解数独的暴力搜索法
  4. 2016-4-18 ICMPv6协议[RFC2463]--报文详解
  5. 在Spinnaker中创建微服务部署管道
  6. unity camera aspect
  7. junper srx配置思路
  8. 教你如何查询对方来电!
  9. AGC020C Median Sum
  10. css的calc函数