今年谷歌IO大会,谷歌宣布Kotlin作为安卓开发一级语言。Kotlin 1.0版发布是在2016年2月,首次出现是在2011年。Kotlin本身有很多特性优点(ITeye、InfoQ),网上评价它是Android世界的Swift(InfoQ)。官网给出了4个为什么使用Kotlin的理由:

简明易表现;更安全;工具友好化;
兼容jvm、Android、浏览器,具备和其他语言的互操作性;

在我实际使用java构建项目过程中,发现几个比较头痛的缺点:

1、java代码臃肿不简洁
2、如果不按设计模式、严格的编码规范,会觉得编码不专业
3、开发安卓或web后台业务复杂时粘贴复制占了大多数开发时间,觉得自己是码农,编码不高效
4、java语言本身数学特性不强
5、java本身的缺点

浏览了官方的开发文档,觉得Kotlin本身是不错的,值得尝试并在以后开发安卓中使用,把IED换成JetBrains系列。短时间内在安卓开发领域Kotlin还没法完全取代java,但以后就不好说,接下来我会研究官方的文档,编写相关的系列博客。分享几个链接:

为啥 Kotlin 是我下一个要掌握的语言 来自开源中国
[译] Kotlin VS Java:编译速度大比拼 来自推酷
Kotlin VS Java:基本语法差异 来自csdn
Kotlin概述与Java的比较 来自csdn
Android开发必备知识:为什么说Kotlin值得一试 来自腾讯Bugly

包的声明、定义、导入和java类似,存在默认导入,根据目标平台不同,还会导入不同的包

默认导入:
- kotlin.*
- kotlin.annotation.*
- kotlin.collections.*
- kotlin.comparisons.* (从1.1起)
- kotlin.io.*
- kotlin.ranges.*
- kotlin.sequences.*
- kotlin.text.*
目标平台不同:
JVM:
- java.lang.*
- kotlin.jvm.*
JS:
- kotlin.js.*

注:
1,可以使用as关键字解决本地重命名冲突
import bar.Bar as bBar // bBar 代表“bar.Bar”
2,import不仅用于导入类,还可用来导入其他声明
- 顶层函数及属性
- 在对象声明中声明的函数和属性
- 枚举常量

函数

fun关键字定义,可将表达式作为函数体、返回值类型自动推断的函数
fun sum(a: Int, b: Int) = a + b
返回无意义的值,且Unit可被忽略,这点对应void无返回值的方法。

fun printSum(a: Int, b: Int): Unit {    println("sum of $a and $b is ${a + b}")}

定义变量

val a: Int = 1 // ⽴即赋值val b = 2 // ⾃动推断出 `Int` 类型val c: Int // 如果没有初始值类型不能省略 c = 3 // 明确赋值

注释

和java、JS一样支持行注释、块注释,但Kotlin 的块注释可以嵌套

字符串模板特性

var a = 1 // 模板中的简单名称:val s1 = "a is $a"a = 2 // 模板中的任意表达式:val s2 = "${s1.replace("is", "was")}, but now is $a"

使用可空值及null检测

当某个变量的值可以为null的时,须在声明处的类型后添加?来标识该引用为空。

支持类型检测和自动类型转换

is 运算符检测⼀个表达式是否某类型的⼀个实例。 如果一个不可变的局部变量或属性已经判断出为某类型, 那么检测后的分支中可以直接当作该类型使用

使用简洁的for while do-while循环

do-while中定于的变量在while()中有效

使用when表达式替换switch分支

fun describe(obj: Any): String =  when (obj) {     1 -> "One"     "Hello" -> "Greeting"     is Long -> "Long"     !is String -> "Not a string"     else -> "Unknown"  }

使用区间

in运算符检测某个数是否在指定区间内,支持区间迭代、数列迭代
区间迭代:

for (x in 1..5) {     print(x) }

数列迭代:

 for (x in 1..10 step 2) { print(x) }for (x in 9 downTo 0 step 3) { print(x) }

使用集合

对集合迭代、用in来判断集合内是否包含某实例

使⽤ lambda 表达式来过滤(filter)和映射(map)集合:

fruits.filter { it.startsWith("a") }    .sortedBy { it }    .map { it.toUpperCase() }    .forEach { println(it) }

更多相关文章

  1. C语言函数的递归(上)
  2. android之事件分发机制
  3. Android应用程序键盘(Keyboard)消息处理机制分析(二)
  4. Android存储之SharedPreferences
  5. android 集合与json之间的相互转换
  6. OpenMP 在NDK中使用
  7. android fragment 切换时隐藏软键盘
  8. android驱动学习1-驱动开发流程(Android.mk)
  9. Android(安卓)Audio AudioSystem::getOutputSamplingRate

随机推荐

  1. SeerBar样式
  2. Android(安卓)SDK下载和更新失败的解决方
  3. Android实现全屏
  4. Android媒体的一些使用总结(2)
  5. Android(安卓)Framework中添加AIDL文件编
  6. FAQ_05_查看 android 设备 ip
  7. Android(安卓)隐藏ActionBar
  8. Android(安卓)GreenDao with Android(安
  9. Mono for Android—初体验之“电话拨号器
  10. 各种控件属性