- 變量
var name = "張三" //等價(jià)于 String name = "張三";
var age = 0 //等價(jià)于 int age = 0;
var sex : String ?= null //等價(jià)于 String sex;
//val 相當(dāng)于 final var 不多啰嗦
look上面的代碼,kotlin里定義類型都是 var 類型的,然并卵都是騙人的.....目的就是少點(diǎn)字符. 根據(jù) 等號(hào) 后面自動(dòng)推斷出類型, 也就是說上面代碼寫 name = 0 編譯不通過....
想象一下,有個(gè)class,名字是 AAABBBCCCDDD.class 我們通過構(gòu)造new一個(gè)對(duì)象出來 var abcd = new AAABBBCCCDDD() 確實(shí)是少些了一點(diǎn)代碼......蚊子腿,不好吃
- 空安全
//簡單講 變量分為可空和不可空
var name = ""
var name_ : String ? = null
name = null //編譯錯(cuò)誤
name_ = null //編譯通過
//具體用一下這2個(gè)變量
name.toString()
name_?.toString() //可以為空的變量多了一個(gè) ? 當(dāng)代碼執(zhí)行這一句的時(shí)候如果name_ == null 則不執(zhí)行
//拓展
if(name_?.isEmpty()){
//編譯不通過 我們?cè)囍x一下這個(gè)判斷 如果(name_是空字符串)進(jìn)入判斷 但是name_為null不執(zhí)行.isEmpty()啊 咋辦
}
//改
if(name_ != nul l&& name_.isEmpty()){
//看到區(qū)別了么? name_. 后面沒問號(hào)啊 因?yàn)榍懊媾袛嗨粸閚ull了 還是挺智能...
//下面來個(gè)簡寫 等價(jià)于這個(gè)判斷
}
//簡寫
if(name_?.isEmpty() ?: false){
// ?: 翻譯.前面如果是個(gè)空 則 后面表達(dá)式 有點(diǎn)像3元表達(dá)式的感覺...不熟悉...多寫寫就熟悉了
}
- 函數(shù)脆荷、方法
fun method():String{
return "你好kotlin"
}
//簡單點(diǎn)說 fun定義方法關(guān)鍵字 方法名(參數(shù)) : 返回值 { 函數(shù)體 沒有返回值就省略 : String}
//來搞點(diǎn)事情
var m : ()->Unit = null //編譯報(bào)錯(cuò)稍后填坑 先無視之
// Unit 相當(dāng)于 void 沒有返回值的返回值...好繞換個(gè)例子好了
var name : String ? = null
var m : ()->String = null //編譯報(bào)錯(cuò)稍后填坑 先無視之
// 語音助手: 變量 name 是個(gè) String 類型 初始值 等于 null
// 語音助手: 變量 m 是個(gè) 函數(shù) 類型 初始值 等于 null 并且這個(gè)函數(shù)無參數(shù) 有個(gè)String返回值
m = {無參-> "返回值" } //給函數(shù)賦值
m?.invoke() // 通過 函數(shù)變量 調(diào)方法
//填坑 看name 和 m 的定義 name后面有個(gè)? 上面說過 變量分為可null和不可null 2種 可null的就要跟著個(gè) ?
//參考name 定義 ? 的位置(都是固定寫法嘍)
var m : (()->String)? = null //小括號(hào)括起來加個(gè)? OK了
基本上,基本的用法就這樣了 本篇完
啥?回調(diào)?說好的優(yōu)雅回調(diào)呢?
<h3>接下來要寫的內(nèi)容</h3>
<a href = "http://www.reibang.com/p/38e0b7225238">第一篇文章的最后有目錄</a>