Kotlin~基本语法

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

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

在我实际使用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) }

猜你喜欢

转载自blog.csdn.net/Bluechalk/article/details/72794010