之前就听说Kotlin的一些新的特性,一直感到好奇,最近打算学习一下,看看这门语言到底有什么神奇的地方和存在哪些坑。
入门之前怎么都得了解一下这东西是干什么的、有什么用,要不学来干嘛(๑•ᴗ•๑)
所以先了解一下这门语言的用途:
Kotlin的用途
- Kotlin Script。可以用来写Kotlin脚本,Gradle3.0开始部分支持Kotlin脚本,尚在完善中。
- Java虚拟机应用:①Web应用,Kotlin完美支持 ②JavaFx,Kotlin完美支持
- 前端开发。在1.1版本正式支持Kotlin-JavaScript
- Android开发。
- Native程序。直接将Kotlin代码编译成机器码,不依赖Jvm,支持与C代码交互,目前功能有限
目前看来Kotlin能干的事真不少,也能称它为全栈语言,我想在未来这门语言完善了之后能更加出色。
详细的语法规则、使用及介绍可以浏览Kotlin官方文档,我这里先附上一个Kotlin中文文档:
这里我只记录一些需要注意的语法规则、常用的语法与知识点的概括和容易进坑的地方O(∩_∩)O。
Kotlin的特点
- 更易于表现
- 安全性更高
- 是函数式的,是面向对象的语言
- 它可以拓展函数,可以拓展类的更多特性,即使我们没有权限去访问这个类中的代码
- 有高度相互操作性:kotlin和java代码可以相互调用,相互操作,可以实现混编
- 更简洁,最直观的是一行代码尾部可以不写‘;’了
Kotlin的基本数据类型
在 Kotlin 中,所有变量的成员方法和属性都是一个对象。一些类型是内建的,它们的实现是优化过的,但对用户来说它们就像普通的类一样。
举个例子:
一些基本类型integer,boolean,float仍然存在 但都是作为对象存在的 和java里面基本相似 但是转换的时候有所不同在java中
int intV = 10;
long longV = intv;
在kotlin中 需要明确类型 并不支持隐式转换 比较严格
var intV:Int = 10
var longV:Long = intV.toLong()
Kotlin中的字符串
String模板
//字符串可以包含模板表达式,即可求值的代码片段,并将其结果连接到字符串中。
//一个模板表达式由一个 $ 和简单名称组成。
val i = 10
val s = "i = $i" // 结果为 "i = 10"
//一个模板表达式由一个$ 和大括号括起来的表达式组成。
val s = "abc"
val str = "$s.length is ${s.length}" // 结果为 "abc.length is 3"
//如果想输出$ ,需要怎么写。
${'$'}29.18
//三引号的String模板 """
var msg:String = "666"
var str:String = """
abc
///
$$
$msg
"""
println(str)
kotlin智能类型转换
普通转换 类似java类型转换
val sub:SubClass = parent as SubClass
安全的类型转换 转换失败也不抛异常
val sub:SubClass? = parent as? SubClass
字符串的新用法
var str : String = ”Example“
var c = s[2] //是字符‘a’
//迭代str
for(c in s){
print(c)
}
空安全符:?
val notNull : String = null 编译不通过
val notNull :STring? = null 指定notNUll可以是空的
notNull?.length() 在notNull对象不为空的情况下才可以打印
知道一个字符串一定不为空 需要直接调用一些方法的时候 编译器不通过 这是使用‘
!!’来告诉编译器可以执行
使用Elvis操作符给一个值是null的情况下的替代值
var value = notNull? : "empty"
比较符号
在java中比较两个字符串的值是否一样 需要
equal符号
String str = “ABC”;
String strOther = “ABC”;
if(str == strOther) 一定输出flase
在kotlin中
var str:String = “ABC”
var strOther:String = “ABC”
if(str == strOther)输入true
在kotlin中 == 相当于 equal
如果比较对象地址怎么办?
在kotlin中使用===来比较对象地址
变量于常量
变量 var 可以创建之后改变他的状态
常量 val 创建后不能改变他的状态 类似于final关键字 但是有区别 它的线程是安全的 可以减少代码出错的可能性
在kotlin中的一个重要的概念:尽可能的使用val 最大的原因是省内存
在定义变量时需要灵活运用var 与val,在数据类中
var与val之间的区别很大 具体是这里不过都的说明
var intVAlue = 100
val HELLO = "hello"
与java不同凡的是编译器认识的类型一律不用写
区间(Ranges)
java里面没有的概念 表示一个值的范围
概念比较简单 看文档吧 n(*≧▽≦*)n
数组(Array)
实际上跟java里面的数组区别还是挺大的 使用上差不多
val arrayOfInt: IntArray = intArrayOf(1,3,5,7)
val arrayOfChar: CharArray = charArrayOf('H', 'e','l','l','o','W','o','r','l','d')
val arrayOfString: Array<String> = arrayOf("我", "是", "码农")
arrayOfInt[0] = arrayOfInt[1] + arrayOfInt[2]
详细的东西看文档吧
后记:
由于也是刚学习这门语言,可能会有错的地方,这篇文章如果有人看的话(并不会有ヽ(*。>Д<)o゜),请见谅,能帮我指正就更好了。写的不是很详细,只是用于学过之后的总结复习,更具体的一些东西在Kotlin文档上有的详细的说明,详细的看文档就好。我这里记录的东西有些文档里面不一定会有,可能有些东西忘记了方便重新查阅。
感谢其他Kotlin大神的博客帮我查漏补缺!
这里附上一个可以用于练习Kotlin的连接:
https://try.kotlinlang.org/#/Examples/Hello,%20world!/Simplest%20version/Simplest%20version.kt