成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Kotlin做開發一個月后的感想

開發 后端
有一類程序員,自己根本沒體驗過的東西,看了幾篇嘩眾取寵的博文自己也來嘲諷,我稱之為云程序員。就比如 Kotlin,有人蹭熱度寫幾篇類似“我為什么從 kotlin 又回到java”的博文,就把 kotlin 一通批判。

談 kotlin之前

有一類程序員,自己根本沒體驗過的東西,看了幾篇嘩眾取寵的博文自己也來嘲諷,我稱之為云程序員。

就比如 Kotlin,有人蹭熱度寫幾篇類似“我為什么從 kotlin 又回到java”的博文,就把 kotlin 一通批判。有空看看這些蹭熱度博文為啥不看看Android Developer 官網所有示例代碼都是 kotlin 版本在前,java 版本在后呢?

使用Kotlin做開發一個月后的感想

爭論語言、框架的優劣是沒有意義的。很多程序員總是對自己一直使用的語言、框架大肆吹捧而對其他語言、框架各種貶低,很明顯這樣的程序員太狹隘了。

Java確實常年***,其他語言就沒有意義了嗎?當然不是,即使是批判,你也得自己真的體驗過了才有資格。這可不是你行你上的翻版,畢竟了解一門新語言對一個真正程序員老說是很輕松的事。

簡潔的語法

Kotlin給我的感覺就是它就是針對Java里所有的痛點來做改變的,比如語法繁瑣,煩人的空指針,缺少函數式編程支持(Java8雖然支持Lambda表達式但還遠遠不夠)等等。

不像它的孿生兄弟Scala那樣奔放,Kotlin給我的感受是聰明又克制,對Java程序員來說半天就足夠上手開干了,不像Scala門檻那么高。

Java語言是我所接觸過語言中語法最繁瑣的(有更繁瑣的請告知),這種繁瑣在main函數就可以體現,而且Java可能也是唯一一個幾乎沒法不用IDE的語言。其他語言脫離了IDE的語法警告和代碼生成模版也勉強能寫一寫,Java代碼你沒有試試看?

但是Java的語法之嚴謹和繁瑣恰恰是Java如此流行的原因。沒寫過Java的人可能沒法理解這句話。人們對于Java嚴苛的語法還不夠滿意,還要再加上 check-style,findbugs以及各種XXX公司Java代碼規范等各種條條框框,最終得到的結果是所有Java程序員寫出來的代碼都能互相看懂。

即使是剛畢業不久的Java程序員,只要熟悉Java面向對象語法,幾乎不存在看不懂其他Java代碼的情況(業務看不懂除外)。這樣保證了Java程序員的代碼下限非常之高,能夠保證大型項目的成功。

好像扯 Java 扯的有點多了。接觸 Kotlin 之后會發現,kotlin 在盡可能保持和 Java一樣的語法嚴苛性的情況下,大幅度地精簡了 Java 代碼,寫起來非常之爽。

  1. //快速創建一個Bean類 
  2. data class Person(val id: Long, var name: String, var age: Int
  3.  
  4. fun main() { 
  5.     // 創建實例 
  6.     val zhangsan = Person(0L, "zhangsan", 23) 
  7.     // set/get方法 
  8.     zhangsan.age = 24 
  9.     val name = zhangsan.name 
  10.  
  11.     //copy方法 
  12.     val lisi = zhangsan.copy(id = 1, name = "lisi"
  13.     //默認生成的tostring和equals/hashcode方法,可重寫 
  14.     zhangsan.toString() 
  15.     zhangsan.hashCode() 
  16.     var isEqual = zhangsan.equals(lisi) 

簡潔的語法無處不在,比如上面的Bean類如果用java來寫至少要多好幾倍的代碼。單例模式只需要把class換成object即可。這些雖然用Java的IDE的各種模版生成工具一樣可以秒生成,但是還是kotlin寫起來更舒服一些。

我想強調的是,Kotlin并不是無腦地利用語法糖和新關鍵字來精簡語法,我們可以很清晰地感受到Kotlin在設計過程中盡可能地保證它盡可能的語法嚴苛性。

空指針

Java 的空指針異常被稱之為 “Billion Dollar Mistake”。在上家公司的時候為了避免空指針異常,代碼規范要求幾乎所有的對象都要進行判空操作,那種嵌套很深的json對象,判空起來真的是又臭又長。

  1. val name: String? 
  2. //這里要吐槽下為啥kotlin沒有三目運算符? 
  3. name = if(Random.nextBoolean()) "Ann" else null 
  4. //加上?則只在name不為null的時候會調用,得到的len1類型也是有問號的,即Int
  5. val len1 = name?.length 
  6. //這種寫法是如果為空給一個默認值,得到的len2類型為Int,不帶問號 
  7. val len2 = name?.length?:0 
  8. //加上雙感嘆號其實就是java什么都不加的寫法了,如果為null會報空指針異常 
  9. val len3 = name!!.length 

上面的代碼解釋了三種對可能為空的對象的處理。其實我把 Kotlin 對空指針的處理歸類為給所有對象加了個范型——符號?,對于帶?的對象則表明它可能為空,你不處理直接使用的話不讓編譯,也就是把空指針盡量扼殺在編譯期間。這個想法真的是簡單又巧妙。很多人一聽 Kotlin 就說沒有空指針了,但是沒用過的話并不知道怎么實現的。現在再有面試官問你,知道怎么回答了吧?

函數式編程

  1. fun AppCompatActivity.setupActionBar(@IdRes toolbarId: Intaction: ActionBar.() -> Unit) { 
  2.     val toolbar = findViewById<Toolbar>(toolbarId) 
  3.     setSupportActionBar(toolbar) 
  4.     supportActionBar?.run { 
  5.         //執行參數中的函數,這樣用戶在調用該方法的時候更加靈活 
  6.         action() 
  7.     } 
  8.     toolbar.setNavigationOnClickListener { 
  9.         Log.d("AppCompatActivity""finish"
  10.         finish() 
  11.     } 
  12.  
  13. //------------------------分割線----------------------------- 
  14. //類似的單方法接口現在只需要寫一個閉包就行了 
  15. binding.aliPayIcon.setOnClickListener { 
  16.     Log.d("example", it.contentDescription.toString()) 
  17.  
  18. //擴展函數let,只有在對象不為空的時候會調用,相當于做了判空 
  19. binding.let { 
  20.     it.setLifecycleOwner(this@WithdrawActivity) 
  21.     it.viewModel = vm 
  22.  
  23. //擴展函數apply, 在閉包內可直接調用對象的方法屬性,有個好處就是可以直接操作對象不需要先生成變量 
  24. vm.accountName.apply { 
  25.     this.value = "aaaa" 
  26.     Log.d("example", this.value?.toString() + ":" + this.hashCode()) 
  27.  
  28. //還有其他基礎擴展函數run, with, also等等,可以看看這篇博客的介紹:https://www. 

函數式編程對很多Java程序員來說是很陌生的。

盡管我不想黑,但是Java真的強到讓很多Java程序員只會Java一門語言,并且基本上Java8以上的版本也沒接觸過。而除了Java(Java8以下)我還真不知道哪門語言不支持函數式編程。

幾乎所有語言都支持函數式編程,因此會靈活使用函數式編程真的挺重要。Java不支持是因為函數式編程相對要難一點,不支持函數式編程反而讓Java代碼的下限更高。

除了難度大一點,函數式編程最令人不爽的就是閱讀性差(可能比較依賴寫代碼的人的水平),我看Java框架源碼基本都很順暢,但是看JavaScript框架簡直懵逼。

我現在的水平看Kotlin函數式代碼也費勁,但是kotlin畢竟是強類型語言,函數的參數和返回值類型固定的話,認真讀還是不難讀懂的。

扯遠了,函數式編程的好處就是代碼靈活度加倍提高,可以寫出各種秀操作的代碼,顯然這也是一把雙刃劍。不過隨著函數式編程越來越流行,大家的水平越來越高,寫出來的函數式代碼勢必越來越好。

可以說Java程序員學習Kotlin唯一的難點就是函數式編程了,當然如果你本身就有函數式編程經驗這點也不是事。如果沒有的話就要好好學習參悟下函數式編程了,這是一個相對漫長的過程。在熟練掌握之前,不使用函數式編程也一樣可以寫 Kotlin。

結語

總的來說我對 Kotlin 的評價總體是正面的。不過有些人的腦回路不正常,我還是想說一下:說 Kotlin 好,有優點,馬上又有人驚呼Java要被取代啦!過兩天又有人大喊 Kotlin 怎么怎么不好馬上要涼。

Java的好處和適用范圍相信你也明白。而現在還在大量使用的語言都有它各自的優點,這個我就不嘮了,畢竟水平不夠。我是真惡心某些蹭熱度、發軟文各自騙的博主和公眾號。

不要聽信我和谷歌說它好,也不要聽信那些碰瓷博主說它不好,有那時間坐而論道,為啥不抽出半小時來體驗一下 Kotlin 呢?

責任編輯:未麗燕 來源: 簡書
相關推薦

2025-01-20 08:10:00

AI模型研究

2012-09-24 10:10:35

打樁機AMDFX-系列

2022-07-12 19:00:00

數據庫MySQL

2022-07-12 18:00:00

MySQL模式高可用

2019-06-20 19:10:19

華為美國5G

2023-02-08 15:38:14

2010-09-14 16:09:49

sql日期函數

2018-01-10 12:09:12

Android開發程序員

2013-05-27 09:47:33

Java開發Java跨平臺

2021-10-09 06:40:38

比特幣薩爾瓦多數字錢包

2017-11-23 10:59:17

程序員代碼編程

2021-10-28 05:39:14

Windows 10操作系統微軟

2019-10-08 11:07:55

Python 開發編程語言

2009-11-23 08:52:02

Windows 7首月銷量

2013-08-11 20:55:29

2016-01-11 19:38:51

七牛

2012-05-08 13:47:23

求職面試開發

2012-08-31 16:40:24

Mac操作系統

2019-11-19 15:11:46

人工智能機器學習技術
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩在线免费 | 一区二区三区四区在线 | 亚洲视频免费在线观看 | 99久久视频 | 亚洲精品一区二区三区蜜桃久 | 中文字幕在线播放不卡 | 国产农村一级国产农村 | 九九在线精品视频 | 日本在线免费视频 | 亚洲午夜精品 | 欧美三区在线观看 | 日中文字幕在线 | 啪一啪在线视频 | 国产一区二区精品 | 在线观看的av | 久久久精| 国产一区二区三区www | 国产免费福利 | 亚洲日本欧美日韩高观看 | 国产精品久久久久久久久久久免费看 | 国产精品一区在线观看 | 性一交一乱一透一a级 | 成人午夜影院 | 成人午夜影院 | 日韩一区二区三区视频在线观看 | 91九色麻豆| 狠狠爱综合| 99久久精品国产麻豆演员表 | 国产高潮好爽受不了了夜色 | 91资源在线 | 午夜影院在线观看视频 | 在线观看毛片网站 | 日韩欧美国产精品一区二区三区 | av在线亚洲天堂 | 在线免费看91 | 九九热在线免费视频 | 99综合网 | 99久热在线精品视频观看 | 成人精品视频 | 日韩欧美在线视频观看 | 黑人精品欧美一区二区蜜桃 |