這13位專家關於kotlin的看法,80%移動開發人員都沒聽過

閱讀前請點擊右上角“關注”,每天免費獲取Android知識解析及面試解答。Android架構解析,只做職場乾貨,完全免費分享!

我究竟要不要學習Kotlin呢?

要回答這個問題,我們先把時間撥回到2017年5月18日,安卓團隊在谷歌 I/O 2017 大會上宣佈 Kotlin 成為官方頭等支持語言。

彼時谷歌技術大牛 Steve Yegge 發表了一篇關於 Kotlin 的使用體會總結文章:“為什麼說 Kotlin 比你們用的那些垃圾語言都好?”

一時間這條爆炸性資訊在引發的熱議一直持續到了今天。

這13位專家關於kotlin的看法,80%移動開發人員都沒聽過

時間是檢驗真理的唯一標準,接下來我們來看看國內外技術專家,使用kotlin開發的感受!

Google Android 專家Annyce Davis:“當 Kotlin 出現時,我立刻被它吸引了,因為它的很多語法特性讓我想起了 Groovy。它既整潔又精煉。”

Google Android 專家Sebastiano Poggi:“我真的真的很喜歡這門語言。我個人認為它在很多情況下使得編碼變成一件愉快的事情,相比之前,同樣的情況下用 Java 語言編碼將會感到痛苦和繁瑣。Kotlin 有時讓我覺得自己就像一個 10 倍效率開發者。”

Google Android 專家Jorge Barroso:“Kotlin 邁出了 Android 開發的一大步,在這之前,Android 缺少 Kotlin 所帶來的特性,相比於其他的 Java 平臺,Android 平臺的 Java 開發有些過時,即使現在有在推動 Java 8,但它還是不會變成我們喜歡的現代編程語言。

Google Android 專家Mark Allison:“雖然我也很喜歡 Kotlin,但我不認為它已經足夠成熟到能夠在線上產品中使用。成熟模式和最佳實踐的缺乏,使得 Kotlin 編寫的代碼可能難以維護。”

Google Android 專家Dmytro Danylyk:對於那些停留在 Android 世界的開發者而言,Kotlin 是一個真正的規則改變者,它擁有很多我喜歡的特性:空類型安全,data classes,屬性和懶加載屬性,擴展函數,協程,不變性等等。

我很享受使用 Koltin 來編碼,因為我沒有必要在項目中引入太多的第三方庫,Kotlin 已經非常好的提供了大部分的支持。”

Google Android 專家Anup Cowkur:“我曾經使用過像 Haskell 和 Elixir 這樣的語言進行編碼,因此當我進行 Android 開發時時常在想:“為什麼 Android 中不能有這樣好用的特性?”。現在使用 Kotlin,我們可以做到了。”

Google Android 專家David Vávra:在我的主要應用(Settle Up)的生產環境中我使用了 Kotlin,它已經足夠成熟,而且相比 Java(任何版本) 有很多的優點。Kotlin 完全兼容現有的 Java 工具和函數庫,同時能夠很好的在 Android Studio 中使用。如果現在新創建一個 APP,我肯定會選擇 Kotlin。”

這13位專家關於kotlin的看法,80%移動開發人員都沒聽過

聽完了Google大牛的各種誇 ,難免有黃婆賣瓜自賣自誇的嫌疑?接下來我們看看國內移動開發領域大神對kotlin的看法:

鴻洋:“我每天都會看一些新的庫或者文章,包括Google對外的一些庫,已經有非常多的一部分都是用Kotlin對外輸出的,如果我不會,對我學習起來有一定阻礙。所以我選擇學習Kotlin,是為了更好的學習!總之,我們應該瞭解自己當下最需要的,而不是什麼技術最熱門。”

郭霖:“之前噴kotlin,覺得用了kotlin後項目的構建速度會大幅降低,現在我改真香了!”

美團團點評企業平臺研發部劉自鵬:“我認為Kotlin 應用於 Android 開發相比傳統 Java優勢,在於依賴於 Kotlin 大量的語法糖以及更簡潔易表現的語法風格能夠大大提高開發效率,減少代碼量,降低維護成本。

目前來看最大的劣勢就是普及率太低了吧!團隊開發,如果你一個人用 Kotlin ,那必定會產生某些溝通問題,或者矛盾。”

阿里水滴技術團隊:“如果你用Kotlin開發過業務,很快就會意識到它相較於Java的語法更加簡潔、高效。比如Kotlin做了這些改良:

在很大程度上實現了類型推導,而Java在SE 10才支持了局部變量的推導。放棄了static關鍵字,但又引入了object,可以直接用它來聲明一個單例。而作為比較,Java則必須依靠構建所謂的“單例模式”才能等效表達。引入了一些在Java中沒有的“特殊類”,比如Data Classes(數據類)、Sealed Classes(密封類),我們可以構建更深程度上的代數數據類型,結合when表達式來使用。”

騰訊Bugly:“我們為什麼需要 Kotlin?答:消失的 Getter 和 Setter、又見空指針、Smart Cast、打日誌、再見Utils、晚安ButterKnife...”

這13位專家關於kotlin的看法,80%移動開發人員都沒聽過

聽完了上述專家們使用kotlin的感受,接下來我們再從技術層面剖析你應該完全學習Kotlin 語言的理由:

0# Java 互操作性

Kotlin是 100% 與 Java 具備互操作性的。你可以使用 Kotlin 繼續你老的 Java 項目開發。所有你熟悉的 Java 框架仍然可用,任何框架,不管是 Kotlin 寫的,還是你固執 Java 小夥伴寫的都可以。

1# 熟悉的語法

Kotlin 不是誕生於學術界的怪異語言。其語法是 OOP 領域的任何開發者都熟悉的,可以或多或少的有一些瞭解。當然和 Java 還是有些不同的,例如重構後的構造函數以及使用 val 的變量聲明等等。下面是一個基本的 Kotlin 示例代碼:

2# 字符串插值

這相當於是更智能,更具備可讀性的 Java 的 String.format() 方法的 Kotlin 實現:

3# 類型推斷

4# 智能類型轉換

Kotlin 編譯器會跟蹤你的邏輯代碼並在需要的時候進行自動的類型轉換,這意味著我們不需要在顯示轉換時做更多的 instanceof 檢查:

5# 更直觀的相等性比較

你不再需要調用 equals(),因為 == 操作符也可以用來比較結構的相等性:

6# 默認參數值

不需要像 Java 那樣定義很多包含不同參數的相似方法:

7# 命名參數

結合默認參數值,命名參數可以消除 builders 的使用:

8# When 表達式

9# Properties

可以給公共字段自定義 set 和 get 行為,這意味著不再會因為那些沒用的 getters & setters 導致代碼瘋狂膨脹。

10# Data 類

**這是一個 POJO 類,包含 **toString(), equals(), hashCode(), 和 copy()方法,和 Java 不同的是,它不會超過 100 行代碼:

這13位專家關於kotlin的看法,80%移動開發人員都沒聽過

11# 操作符重載

可以重載預定義的一組操作符來提升代碼的可讀性:

一些對象是可以解構的,一個很有用的例子就是對 Map 進行迭代:

13# Ranges

14# 擴展函數

還記得你第一次用 Java 實現一個 List 的排序嗎?你找不到一個 sort() 函數,然後你就四處求助,最終找到了Collections.sort()。後來你需要將一個字符串的首字符變成大寫,最終你還是自己寫了一個方法來實現,因為你當時還不知道有這麼個東西StringUtils.capitalize().

如果只有一種方法可以向已有的類添加新的函數,這樣 IDE 就可以幫助你在代碼完成時找到正確的函數。在 Kotlin 裡你可以這麼做:

Java 是我們應該稱之為是一個幾乎靜態類型的編程語言。Java 的 String 變量類型無法保證它不會等於 null。儘管我們已經習慣了這樣的情況,但它否定了靜態類型檢查的安全性,導致 Java 程序員總是活在各種空指針異常的恐懼中。

Kotlin 通過區分非空類型和允許為空類型來解決這個問題。類型默認是不允許為空的,可以通過在後面加一個 ? 問號來表示允許為空,例如:

Kotlin 強制你必須在訪問一個可為空的類型變量時候必須確保不會發生空指針:

雖然看起來有點麻煩,但這的確是 Kotlin 一個微小卻又非常重要的特性。我們仍可以使用智能的轉換,可以在需要的時候將允許為空的類型轉成不允許為空:

我們也可以使用安全調用方法?. 該表達式在 b 為空時返回 null,而不是拋出空指針異常:

安全調用可以鏈接在一起,以避免像其他語言一樣存在大量嵌套的 if-not-null 檢查,如果我們想要一個默認值而不是 null 時,可以用 ?: 操作符:

如果沒有適合你的,那麼你應該是需要一個空指針了,你將不得不顯式的進行處理:

16# 更好的 Lambdas

嘿,帥哥,這是一個很好的 Lambda 系統 —— 在完美的可讀性和簡潔之間取得非常好的平衡,這得益於非常聰明的設計選擇。其語法簡單直接:

優點體現在:

  1. 如果 lambda 是方法的最後一個參數或者是唯一參數的話,那麼方法的括號可以移動或者省略.
  2. 如果我們選擇不去聲明單參數的 lambda 表達式的參數,那麼 Kotlin 會隱式的將之命名為 it.

結合上述優點,下面的三個不同的語句效果一樣:

這個可以讓你編寫更加簡潔的函數式代碼,就像下面這樣優雅:

Kotlin 的 lambda 系統和擴展函數結合,可以非常棒的用來開發各種 DSL。例如 Anko 這個 DSL 的例子可以增強 Android 的開發:

17# IDE 支持

如果你打算開始使用 Kotlin 開發項目,在工具上你會有很多的選擇。但我強烈推薦使用 IntelliJ ,因為它自帶 Kotlin 的支持 — 它的特點展示了同一組人設計的開發工具和語言時的優勢。

如何學習kotlin?

需要我們去學習官網教程 或者 google 提供的快速學習的教程,當然這裡只是快速瀏覽就行了,主要還是得靠實踐,先熟悉基本的語法,然後找時間對語法進行了解,最後在實踐開發中使用高階特性。

官網教程-中文:https://www.kotlincn.net/docs/reference/

這13位專家關於kotlin的看法,80%移動開發人員都沒聽過

kotlin項目實戰專題資料


需要上述kotlin項目實戰專題資料的朋友,可以點擊關注+轉發+私信**學習**前往免費領取!
喜歡的朋友,別忘了關注+點贊!每日分享Android架構進階知識!


這13位專家關於kotlin的看法,80%移動開發人員都沒聽過



分享到:


相關文章: