Kotlin学习笔记之 1
1.基础语法
方法形容
fun methodName(type1 : Type, type2 : Type2) : returnType{}fun methodName(type1 : Type, type2 : Type2) : Unit { type1 = type2}
变长参数 vararg
fun methodName(vararg v : Int){ //此处v是个数组 for(nv in v){ print(v) }}
相似于 java中的 …
//主函数 数组类型的fun main(args : Array<String>){ }
lambda 匿名函数
fun main(args : Array<String>){ //(传参类型1, 传参类型2) -> 返回类型 = { 具体参数1, 具体参数2 -> 返回参数} val plus : (Int, Int) -> Int = { x,y -> x+y} println(plus(1,2))}
var 可变 val 不可变
有一个非常有意思的现象,kotlin自带属性判断功能,即你不指定具体的数据类型,kotlin可以帮你分析出你想要什么。比方说:
//i被判断成Intvar i = 123//s被判断成Stringval s = "123"
String 字符串中直接引入参数和方法
//$符号之后跟{}表示方法,跟参数名表示引用参数val s = "${a.replace("ss", "ww")}, and then it is $a"
想要直接的去使用字符
$
,我们一般也是借助$
去实现,由于$
没有相应的转义符val s = "${`$`}, is this"
关于空
//这边我们可以直接把String? 看成是一种类型,解释为可以为空的String类型//可能会有疑问既然s已经被val形容,是final类型的了,还会出现可能为空的String//由于尽管你不能再对s赋值了, 但是你仍然可以改变非赋值的方式改变它,比方replace什么的等等val s : String? = "23"//一旦s为空就报错val a = s!!.toInt()//一旦s为空,可以继续执行不报错,并且此处的b为nullvar b = s?.toInt()//b为null之后,我们紧接着调用b的其余的方法,产生的也是null,并且不会报错,这就是强大的kotlin容错机制var c = b.toString()//? 和 ?: 的判断表示假如为空的话,那么就返回后面的内容//此处的有需要多说一句,一旦为空的情况,那么后面想给什么就给什么,无论字符串还是整型等等,kotlin均可以自动识别,跟你前面想要的类型没有关系var d = b?.toString() ?: "123"//此处需要注意,一旦是有可能出现为空的类型,kotlin就会在适当的时候通知到你var h = s?.toInt()var i = 1//此时因为h很有可能为空,因而kotlin会提醒你不允许直接使用*操作符,而是要使用times方法进行?操作var j = h * j //即如下这样,times方法在kotlin中被用来做乘法的使用var j = h?.times(j)
类型检测
kotlin 中使用 is 来代替使用 isinstanceOf
kotlin 中不存在Object类,通常这个方法可以传入任何数据类型,kotlin直接使用 Any
fun getLength(s : Any){ if(s is String){ println(s.length) } }
范围
java中使用的是
for(int i = 0; i < n; i++)
kotlin中比较方便,直接使用
for(i in 1..n)
..针对任何可以进行比较的数据类型,比方
for(c in '0'..'9')
,正对整形有单独优化,一般使用比较多的就是整型,并且对顺序有要求,只能从小到大for(i in 4..1)
不会进到for循环来,由于4无法走到1针对从高到低的情况,要使用到downTo
for(i in 4 downTo 1)
for(i in 1..4 step 2)
====for(int i = 1; i <= 4; i = i + 2)
最终出来的是1,3..和downTo都是包含边界数字的闭集[],如[1,4],假如想要开集,需要使用到until形容符
for(i in 1 until 10)
====== [1, 10) 但是因为局限性,until也只能用在从小到大的并且只能做右边的开集,能用until
,就尽量不去使用1..n-1
范围既可以用在for循环中也能用在if条件判断中
比方
if (i in 1..4)
1 <= i <= 4if(c in '0'..'9')
‘0’ <= c <= ‘9’补充(1) 范围之外直接使用 !in
if(i !in 1..4)
即 i 不在 1~4之间
补充(2) 结合when来判断,数组中能否存在某元素
when{ "a" in items -> {} "b" in items -> {}}
with
kotlin中我们可以借助with来进行连续调用方法
class Turtle { fun penDown() fun penUp() fun turn(degrees: Double) fun forward(pixels: Double) } val myTurtle = Turtle() with(myTurtle) { // 画一个 100 像素的正方形 penDown() for(i in 1..4) { forward(100.0) turn(90.0) } penUp() }
java7 try with resources
java7中的特性,只需是实现了closeable的在使用完成之后需要释放资源的类,会在
try
代码体执行完成之后释放掉资源,在kotlin中我们一般使用use
方法,规定为只需实现了closeable
接口的都有这个方法,意思为use
了之后就会释放自己的资源//java7try(BufferedReader br = new BufferedReader(new FileReader(path))){ return br.readLine();}//kotlinvar bufferedReader = BufferedReader(FileReader("path")) bufferedReader.use { print(it.readLine()) }
注释习惯使用[]而非@param @return
除非需要做特长的单独性说明,一般我们直接使用
[]
/** * Returns the absolute value of the given [number]. */ fun abs(number: Int) = ……
能用val不用var,一般用最基本不可变集合
val
和var
不做过多解释了,此处的不可变集合指的是Set``List``Map
,优先使用这些,而不是优先使用HashSet``ArrayList``HashMap
条件语句优先级
二元首选if,其次再用when
循环语句优先级
优先使用高阶函数,
filter``map
这种,需要单独解决的我们用for
,除非在链式中调用能属性不用函数
底层算法会优先使用属性,而不是函数。所以假如是没有参数的方法,可以直接用属性替代。
强转操作符 as
java中的强转是在对象前加上括号类型的方式,kotlin中是通过
as
进行强转的。一般我们为了避免出现
castException
或者者空指针的情况,直接使用?as
来进行强转。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Kotlin学习笔记之 1