- 变量
var name = "张三" //等价于 String name = "张三";
var age = 0 //等价于 int age = 0;
var sex : String ?= null //等价于 String sex;
//val 相当于 final var 不多啰嗦
look上面的代码,kotlin里定义类型都是 var 类型的,然并卵都是骗人的.....目的就是少点字符. 根据 等号 后面自动推断出类型, 也就是说上面代码写 name = 0 编译不通过....
想象一下,有个class,名字是 AAABBBCCCDDD.class 我们通过构造new一个对象出来 var abcd = new AAABBBCCCDDD() 确实是少些了一点代码......蚊子腿,不好吃
- 空安全
//简单讲 变量分为可空和不可空
var name = ""
var name_ : String ? = null
name = null //编译错误
name_ = null //编译通过
//具体用一下这2个变量
name.toString()
name_?.toString() //可以为空的变量多了一个 ? 当代码执行这一句的时候如果name_ == null 则不执行
//拓展
if(name_?.isEmpty()){
//编译不通过 我们试着读一下这个判断 如果(name_是空字符串)进入判断 但是name_为null不执行.isEmpty()啊 咋办
}
//改
if(name_ != nul l&& name_.isEmpty()){
//看到区别了么? name_. 后面没问号啊 因为前面判断它不为null了 还是挺智能...
//下面来个简写 等价于这个判断
}
//简写
if(name_?.isEmpty() ?: false){
// ?: 翻译.前面如果是个空 则 后面表达式 有点像3元表达式的感觉...不熟悉...多写写就熟悉了
}
- 函数、方法
fun method():String{
return "你好kotlin"
}
//简单点说 fun定义方法关键字 方法名(参数) : 返回值 { 函数体 没有返回值就省略 : String}
//来搞点事情
var m : ()->Unit = null //编译报错稍后填坑 先无视之
// Unit 相当于 void 没有返回值的返回值...好绕换个例子好了
var name : String ? = null
var m : ()->String = null //编译报错稍后填坑 先无视之
// 语音助手: 变量 name 是个 String 类型 初始值 等于 null
// 语音助手: 变量 m 是个 函数 类型 初始值 等于 null 并且这个函数无参数 有个String返回值
m = {无参-> "返回值" } //给函数赋值
m?.invoke() // 通过 函数变量 调方法
//填坑 看name 和 m 的定义 name后面有个? 上面说过 变量分为可null和不可null 2种 可null的就要跟着个 ?
//参考name 定义 ? 的位置(都是固定写法喽)
var m : (()->String)? = null //小括号括起来加个? OK了
基本上,基本的用法就这样了 本篇完
啥?回调?说好的优雅回调呢?
<h3>接下来要写的内容</h3>
<a href = "http://www.jianshu.com/p/38e0b7225238">第一篇文章的最后有目录</a>