本來是沒打算寫這篇的妓忍,網(wǎng)上這么多 kotlin 的學習文章了甲喝,跟著學就行了尝苇,沒必要自己在寫了總結了,但是吧,初步學習 kotlin 再使用后糠溜,寫出來的還是 java 樣式的 kotlin 代碼淳玩,看別人的 kotlin 寫的 demo 居然看不懂,我去了非竿,這才知道 kotlin 學習不能光知道基礎語法啊蜕着,還是的深入學習 kotlin 期中的特點才行,這不又深入學習的一番红柱,領略了下函數(shù)式編程承匣,高階函數(shù)的味道,感觸和學習自來哦很多锤悄,不寫筆記是不行了呀 ~
說在開頭
kotlin 上手很簡單韧骗,因為可以完美支持 java ,和 java 比較像的緣故零聚,我們熟悉下 kotlin 的語法袍暴,1-2天就能寫出 java 語法式的 kotlin 代碼了,但是我們絕對不能只不如此握牧,kotlin 本身的高級特性代表著語言的發(fā)展趨勢容诬,本身也是很簡單,高效的沿腰,我們必須真正熟悉 kotlin 自身的寫法览徒,不要抗拒,擁抱 kotlin颂龙,零碎東西不少习蓬,但是我們總結一下,平時多用用措嵌,也就熟悉了
我對于 kotlin 的問題是躲叼,我不是知道很多高級特性的應用場景,這是個大問題企巢,不知道用在何處又怎么能真正理解枫慷,通惠貫通呢~
對于 kotlin 這門語言的特點,我是非常推薦大家去看看 2017 北京 GDG _ 語言選型 這個演講的浪规,非常 Nice 或听,相信看過的同學都會對如何考量一門語言有些心得的
java 畢竟30歲了,雖然一直在改變笋婿,但是底層的東西很難改誉裆,再說大家也不會用太新的 SDK ,這些年語言的發(fā)展出現(xiàn)了一些新的語言特性:函數(shù)式編程缸濒、Lambda 表達式足丢、流式API粱腻、高階函數(shù)、空指針安全斩跌,協(xié)程绍些,這些 Kotlin 都有體現(xiàn),作為移動端開發(fā)滔驶,隨著 android 下一代的臨近遇革,F(xiàn)lutter 的橫空出世,java 離開我們的日子不遠了揭糕,新接觸的語言必然會包含有上面這些新的語言特性萝快,代表著編碼風格也是會大幅度變化的,kotlin 作為一個向主流語言的學習過度我個人認為還是非常恰當?shù)闹牵退?Flutter 以后我們用 Dart 了揪漩,現(xiàn)在取學習 kotlin 也是不虧的
函數(shù)式編程
kotlin 的特點是既支持面向對象又支持函數(shù)式編程,仔細體味 kotlin 的變成風格吏口,雖未強制但是還是在引導奄容,推薦我們走向函數(shù)式編程的道路,java 太老了产徊,就算是 java 也在往函數(shù)式編程上靠了昂勒,所以擁抱變化吧,世界既然是這么發(fā)展的舟铜,自然有其道理戈盈,我們接受新思想,變化代碼風格谆刨,尋找優(yōu)點塘娶,適用變化,變?yōu)榧河镁秃昧?/p>
我們理一理語言變化的歷程痊夭,能更好的理解函數(shù)式的思路:
-
從機器碼 -> 匯編 -> 編程語言的出現(xiàn)
010101101 這就是機器碼刁岸,要是這么編程,NM 要死的心都有了她我,實在是不友好虹曙,太難了,之后又出現(xiàn)了匯編番舆,但是也不友好根吁,最后各種變成語言出現(xiàn)啦,這下簡單多了合蔽,語言把我們寫的編譯成機器碼,然后交給硬件取運行
-
從面向過程到面向對象
c 是面向過程的介返,一切都得告訴機器怎么來拴事,一步一步的沃斤,學習起來也是很難,沒看學 c 的一上手時都哭天喊地的嗎刃宵,后來面向對象興趣了衡瓶,參考自然界的法則,把任務事務都看是對象牲证,把 c 中的那些代碼過程根據(jù)邏輯包裝成一個個方法哮针,然后我們通過組合管理對象間的管理,來完成 c 的任務坦袍,好比是把紛亂的管道變成積木十厢,我們搭積木可是讓整個過程簡單多了,更容易理解捂齐,更容易編寫
-
從命令式編程到函數(shù)式編程
語言的變化是越來越簡單蛮放,越來越邏輯話的,如果說面向對象是把 C 中的方法根據(jù)邏輯包裝成一個個的對象的話奠宜,那么函數(shù)式編程比面向對象更簡單包颁,面向對象還的包裝成對象,對象里寫方法压真,函數(shù)式編程直接把這一段段方法看成對象娩嚼,把紛亂的水管世界變成一條直線的,根據(jù)數(shù)據(jù)處理流程順序組合把一段段水管拼接起來滴肿。面向對象最貼近顯示世界岳悟,最符合人類的思維邏輯,所以面向對象的地位不容動搖嘴高,函數(shù)式編程是面對數(shù)據(jù)產(chǎn)生和處理這個特定領域出現(xiàn)的思維竿音,可以讓代碼變得更直接,更直觀拴驮,更簡單春瞬,最好的例子就是 rxjava ,時下的思路使用面向對象處理業(yè)務套啤,框架之間的邏輯宽气,用函數(shù)式來處理數(shù)據(jù),消息
koltin 允許我們把一個函數(shù)作為對象來使用潜沦,同樣的也能在函數(shù)里把另一個函數(shù)作為參數(shù)傳進來使用萄涯,這樣我們就不必持有另一個對象的引用了,方便很多唆鸡,我覺得也是 kotlin 和 java 最大的區(qū)別涝影,函數(shù)式對象有很多擴展玩法,也是出上手 kotlin 同學難看懂的争占,但同時也是非常有意思的燃逻,學 kotlin 必學 函數(shù)式對象
學習資源:
付費視頻:
* 全網(wǎng)首門-Kotlin入門與進階上手科普序目,必看:
* 寫給Android開發(fā)者的Kotlin入門
* 全民Kotlin:Java我們不一樣我的學習筆記:
* kotlin - 基礎語法
* kotlin - 函數(shù)(對象函數(shù)/代碼補全)
* kotlin - 高級特性
* kotlin - 代碼片段
* kotlin - Coroutine 協(xié)程kotlin 的靜態(tài)問題
* kotlin - 實現(xiàn)靜態(tài)的幾種方式詳解-
asSequence 序列
在大數(shù)據(jù)處理時,序列要比集合性能好的多猿涨,集合的任務操作符叛赚,比如 map,filter 每次操作都會生成一個新的集合稽揭,在數(shù)據(jù)量很大時這樣性能是由問題的俺附,而序列就不會昙读,序列會一個個的發(fā)射數(shù)據(jù),每個數(shù)據(jù)都會經(jīng)過所有的變換操作沮稚,然后才是下一個數(shù)據(jù),具體的請看下面的文章盛杰,講的非常清晰,還有配圖: 其他文章:
* [譯]Kotlin中是應該使用序列(Sequences)還是集合(Lists)?
* Kotlin 泛型