距离接触kotlin有半年多了,今年谷歌io大会让kotlin火了起来,我写的2篇手记也在半年多的昨天有了第一个回复,特地来再写一篇
kotlin随着一波浪潮被更多人的了解,学习,使用,现在能所搜到一些教程了.个人建议去看官方的文档,看一遍敲一敲在由java的基础上很容易上手,无非就是多了一些特性,现在的教程也比较详细,我就不多说了讲一讲今天的主题,一些不容易看懂,或者说一些我认为值的说的地方
-
函数,方法的另类
var method = { print("我是个方法")} //var 声明一个变量 这个变量是个函数 用{}包了起来 method.invoke() //这个方法的调用,类似java反射里Method的调用,用invoke(), //了解java反射,可以看出来非常的类似 //这里要说的就是 kotlin中函数也可以是一个变量
fun method1(i:Int,m:()->Unit){ var ii = i+1 m.invoke() } //fun声明一个方法 这个方法需要2个参数,第一个是int类型的 //第二个是个函数类型的,并且这个函数是无参无返回值的 //对比一下不难理解写法 m:(s:String)->String 这个是有一个参数有返回值的 //对比例子如下 fun method2(i:Int,m:(s:String)->String){ var ii = i+1 var 返回值 = m.invoke("你好") } //调用这2个方法 method1(0,{var 局部变量 = "我没有返回值"}) method2(1,{s:String -> var 参数 = s "我是返回值" }) //最上面讲过了{}这就是个方法的简写无参数无返回值,有参数有返回值的就是 /*{s:String -> var 参数 = s "我是返回值" /*} //其中返回值写在最后并且省略return关键字 //这种写法就是简单的接口回调,比较绕就多写几次
- 空安全?
空安全并不是程序从此不抛出空指针异常了,它只是要求写代码的时候尽量的规避空异常,并且帮忙写了if(xxx==null)return这样的代码
具体的就是在声明变量的时候有2种方式,如下
var s :String = ""
var s1:String? = null
//加了 ? 的s1可以赋值为null,而不加 ? 声明的s变量如果
//赋值为null 编译不通过,必须给一个初始值表示此变量是一个不可为null变
//量. 用法如下
s.length//没什么好说的,没啥问题
s1?.length//s1可以为null,如果s1为null的话不执行次代码,不会报空指针
s1!!.length//加双叹号,表示必须执行此代码,如果是null,那就抛异常喽
这些都不是重点,重点是下面的代码,是我当年跳的一个坑,希望大家不要走我的老路
var tv:TextView? = null
刚用kotlin的时候写了一堆这样的代码,什么textview,imageview等等各种类似的情况,我都是这么声明变量的,导致代码里一堆的问号和感叹号,写的心好累,随便一个变量后面都带着问号感叹号的心情,写过的才能体会到.不想多说了
lateinit var tv:TextView
//调用
tv.text = "不要问号不要叹号,我写过findviewbyid了谢谢"
- 最后就先写到这里吧