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

Android開發(fā)者自述:為什么我要改用Kotlin?

移動開發(fā) Android
寫在前面的話,作為一個不熬夜的人,一覺醒來發(fā)現(xiàn) Kotlin 成為了 Android 的官方語言,可謂是大喜過望。為了趁熱打鐵,我決定提前三天放出原定本周日 Release 的文章。希望能及時(shí)讓大家了解一下 Kotlin。

寫在前面的話,作為一個不熬夜的人,一覺醒來發(fā)現(xiàn) Kotlin 成為了 Android 的官方語言,可謂是大喜過望。為了趁熱打鐵,我決定提前三天放出原定本周日 Release 的文章。希望能及時(shí)讓大家了解一下 Kotlin。

相信很多開發(fā)人員,尤其是 Android 開發(fā)者都會或多或少聽說過 Kotlin,當(dāng)然如果沒有聽過或者不熟悉也沒有關(guān)系。因?yàn)楸酒恼乱约安┛秃笃诘膬?nèi)容會涉及到很多關(guān)于 Kotlin 的知識分享。

在寫這篇文章前的一個多月,F(xiàn)lipboard 中國的 Android 項(xiàng)目確定了正式將 Kotlin 作為項(xiàng)目開發(fā)語言,這就意味著新增的代碼文件將以 Kotlin 代碼格式出現(xiàn),而且同時(shí)舊的 Java 代碼也將會陸陸續(xù)續(xù)翻譯成 Kotlin 代碼。在使用 Kotlin 的這段時(shí)間,被它的簡潔,高效,快捷等等特點(diǎn)震撼,所以有必要寫一篇文章來談一談 Kotlin 的特性,如若能取得推廣 Kotlin 的效果則倍感欣慰。

Kotlin的「簡歷」

  • 來自于著名的 IDE IntelliJ IDEA(Android Studio 基于此開發(fā)) 軟件開發(fā)公司 JetBrains(位于東歐捷克)
  • 起源來自 JetBrains 的圣彼得堡團(tuán)隊(duì),名稱取自圣彼得堡附近的一個小島 (Kotlin Island)
  • 一種基于 JVM 的靜態(tài)類型編程語言

來自知名的工具開發(fā)商 JetBrains,也就決定了 Kotlin 的基因中必然包含實(shí)用與高效等特征。那我們接下來看一看 Kotlin 的特點(diǎn),當(dāng)然這也是我改用 Kotlin 的重要原因。

語法簡單,不啰嗦

Android開發(fā)者自述:為什么我要改用Kotlin?

  • Kotlin 支持類型推斷,沒有 Java 那樣的啰嗦。
  • 另外用 var 表示變量,val 表示常量更加的簡潔
  • 方法也很簡單,連 function 都縮寫成了 fun,平添了幾分雙關(guān)之意。
  • 類的繼承和實(shí)現(xiàn)很簡單,使用:即可
  • Kotlin 每個句子都不需要加分號 (;)

空指針安全

空指針(NullPointerException 或 NPE)是我們使用 Java 開發(fā)程序中最常見的崩潰了。因?yàn)樵?Java 中我們不得不寫很多防御性的代碼,比如這樣:

Android開發(fā)者自述:為什么我要改用Kotlin?

在 Kotlin 中空指針異常得到了很好的解決。

  • 在類型上的處理,即在類型后面加上?,即表示這個變量或參數(shù)以及返回值可以為 null,否則不允許為變量參數(shù)賦值為 null 或者返回 null
  • 對于一個可能是 null 的變量或者參數(shù),在調(diào)用對象方法或者屬性之前,需要加上?,否則編譯無法通過。

如下面的代碼就是 Kotlin 實(shí)現(xiàn)空指針安全的一個例子,而且相對 Java 實(shí)現(xiàn)而言,簡直是一行代碼搞定的。

Android開發(fā)者自述:為什么我要改用Kotlin?

關(guān)于空指針安全的原理,可以參考這篇文章研究學(xué)習(xí)Kotlin的一些方法。

支持方法擴(kuò)展

很多時(shí)候,F(xiàn)ramework 提供給我們的 API 往往都時(shí)比較原子的,調(diào)用時(shí)需要我們進(jìn)行組合處理,因?yàn)榫蜁a(chǎn)生了一些 Util 類,一個簡單的例子,我們想要更快捷的展示 Toast 信息,在 Java 中我們可以這樣做。

Android開發(fā)者自述:為什么我要改用Kotlin?

但是 Kotlin 的實(shí)現(xiàn)卻讓人驚奇,我們只需要重寫擴(kuò)展方法就可以了,比如這個 longToast 方法擴(kuò)展到所有的 Context 對象中,如果不去追根溯源,可能無法區(qū)分是 Framework 提供的還是自行擴(kuò)展的。

Android開發(fā)者自述:為什么我要改用Kotlin?

注意:Kotlin 的方法擴(kuò)展并不是真正修改了對應(yīng)的類文件,而是在編譯器和 IDE 方面做得處理。使我們看起來像是擴(kuò)展了方法。

Lambda, 高階函數(shù),Streams API, 函數(shù)式編程支持

所謂的 Lambda 表達(dá)式是匿名函數(shù),這使得我們的代碼會更加的簡單。比如下面的代碼就是 lambda 的應(yīng)用。

Android開發(fā)者自述:為什么我要改用Kotlin?

所謂的高階函數(shù)就是:

  • 可以接受函數(shù)作為參數(shù)
  • 也可以返回函數(shù)作為結(jié)果

舉一個接受函數(shù)作為參數(shù)的例子。在 Android 開發(fā)中,我們經(jīng)常使用 SharedPreference 來存儲數(shù)據(jù),如果忘記調(diào)用 apply 或者 commit 則數(shù)據(jù)修改不能應(yīng)用。利用 Kotlin 中的高階函數(shù)的功能,我們能更好的解決這個問題:

Android開發(fā)者自述:為什么我要改用Kotlin?

當(dāng)然這上面的例子中我們也同時(shí)使用了方法擴(kuò)展這個特性。

Kotlin 支持了 Streams API 和方法引用,這樣函數(shù)式編程更加方便。比如下面的代碼就是我們結(jié)合 Jsoup,來抓取某個 proxy 網(wǎng)站的數(shù)據(jù),代碼更加簡單,實(shí)現(xiàn)起來也快速。

Android開發(fā)者自述:為什么我要改用Kotlin?

字符串模板

無論是 Java 還是 Android 開發(fā),我們都會用到字符串拼接,比如進(jìn)行日志輸出等等。在 Kotlin 中,字符串模板是支持的,我們可以很輕松的完成一個字符串?dāng)?shù)組的組成:

Android開發(fā)者自述:為什么我要改用Kotlin?

與 Java 交互性好

Kotlin 和 Java 都屬于基于 JVM 的編程語言。Kotlin 和 Java 的交互性很好,可以說是無縫連接。這表現(xiàn)在:

  • Kotlin 可以自由的引用 Java 的代碼,反之亦然。
  • Kotlin 可以現(xiàn)有的全部的 Java 框架和庫
  • Java 文件可以很輕松的借助 IntelliJ 的插件轉(zhuǎn)成 kotlin

Kotlin 應(yīng)用廣泛

Kotlin 對 Android 應(yīng)用開發(fā)支持廣泛,諸多工具,比如 kotterknife(ButterKnife Kotlin 版),RxKotlin,Anko 等等,當(dāng)然還有已經(jīng)存在的很多 Java 的庫都是可以使用的。

除此之外,Kotlin 也可以編譯成 Javascript。最近使用 Kotlin 寫了一段抓取 proxy 的代碼,實(shí)現(xiàn)起來非??旖?。甚至比純 JavaScript 實(shí)現(xiàn)起來要快很多。

Android開發(fā)者自述:為什么我要改用Kotlin?

關(guān)于性能

Kotlin 的執(zhí)行效率和 Java 代碼的執(zhí)行效率理論上一致的。有時(shí)候 Kotlin 可能會顯得高一些,比如 Kotlin 提供了方法的 inline 設(shè)置,可以設(shè)置某些高頻方法進(jìn)行 inline 操作,減少了運(yùn)行時(shí)的進(jìn)棧出棧和保存狀態(tài)的開銷。

讀到這里,是不是想要嘗試一下 Kotlin 呢,它簡潔的語法,匯集諸多特性,高效率實(shí)現(xiàn)等等,已經(jīng)在國外風(fēng)生水起,國外的 Pintereset, Square, Flipboard 等公司已經(jīng)開始應(yīng)用到生產(chǎn)中。

關(guān)于轉(zhuǎn)向 Kotlin

其實(shí),我在做決定之前(當(dāng)時(shí) Kotlin 還沒有被欽定)也曾有過考慮,是不是選擇了 Kotlin 就意味著放棄 Java 呢,冷靜下來想一想,其實(shí)并不是那么回事,因?yàn)?Kotlin 與 Java 語法太相近,以及在 Kotlin 中無時(shí)無刻不在和 Java 相關(guān)的東西打交道,所以這點(diǎn)顧慮不是問題的。

對于個人的項(xiàng)目來轉(zhuǎn)向 Kotlin,通常不是很難的選擇,畢竟 Kotlin 是那么優(yōu)秀的語言,相信很多人還是愿意嘗試并使用這個事半功倍的語言的。

而比較難抉擇的情況是如果如何讓團(tuán)隊(duì)轉(zhuǎn)用 Kotlin,個人認(rèn)為團(tuán)隊(duì)難以轉(zhuǎn)用的原因有很多,比如學(xué)習(xí)成本,歷史包袱等等。但其實(shí)根本原因還是思維方式的問題,歪果仁喜歡用工具來提升開發(fā)效率,因?yàn)槿肆Τ杀竞芨摺6鴩鴥?nèi)團(tuán)隊(duì)提高效率的辦法通常是增加成員。好在 Flipboard 美國團(tuán)隊(duì)自 2015 年(可能更早)就引入了 Kotlin,因此中國團(tuán)隊(duì)這邊選用 Kotlin 也更加順?biāo)浦?。?dāng)然更主要的是目前團(tuán)隊(duì)規(guī)模不大,成員一致認(rèn)可 Kotlin 的優(yōu)點(diǎn)。

關(guān)于團(tuán)隊(duì)轉(zhuǎn)用 Kotlin 的方法,一般比較行得通的辦法是自上而下的推行。這就意味著要么直接的技術(shù)負(fù)責(zé)人比較開明要么就是需要有人來不斷推介來影響團(tuán)隊(duì)。

做個比較現(xiàn)實(shí)的比擬,Java 就像是一趟從我的家鄉(xiāng)保定開往北京西的耗時(shí)將近 2 個小時(shí)甚至更長的普通列車,而 Kotlin 則是那趟僅需 40 分鐘就能到達(dá)的高鐵。通常的人都會選擇高鐵,因?yàn)樗?jié)省了時(shí)間和提高了體驗(yàn)。這個時(shí)間和體驗(yàn)對應(yīng)編程中的,我想應(yīng)該是高效率和高可讀性,可維護(hù)性的代碼。

現(xiàn)在好了,有了 Google 的支持,Kotlin 轉(zhuǎn) Android 相信在不久的將來就會全面展開。篡改 Python 的一句名言「人生苦短,我用 Kotlin」,這樣一個高效實(shí)用的語言應(yīng)該會被越來越多的團(tuán)隊(duì)所接受,并應(yīng)用到開發(fā)生產(chǎn)中。當(dāng)然也希望在國內(nèi)環(huán)境下大放異彩。

本文作者為 Flipboard 中國 Android 研發(fā)工程師段建華。

責(zé)任編輯:未麗燕 來源: 技術(shù)小黑屋
相關(guān)推薦

2017-07-13 17:33:18

生成對抗網(wǎng)絡(luò)GANIan Goodfel

2019-05-14 11:15:51

微軟員工上市公司

2017-07-18 10:16:27

強(qiáng)化學(xué)習(xí)決策問題監(jiān)督學(xué)習(xí)

2016-12-07 08:59:15

LinuxWindows 10開發(fā)者

2013-03-28 19:25:35

騰訊云

2017-09-08 08:35:16

Android代碼API設(shè)計(jì)

2012-11-16 14:57:25

2019-04-16 09:00:05

AndroidKotlinJava

2013-04-25 10:14:39

Facebook開發(fā)者開發(fā)

2012-06-18 14:51:09

Python

2025-03-25 07:10:00

開發(fā)前端JavaScript

2024-10-06 13:47:43

后端開發(fā)者項(xiàng)目

2024-10-06 13:00:05

2012-03-23 22:32:38

iOS

2010-06-11 13:28:06

PHPPython

2014-07-07 09:44:05

前端前端渲染

2012-07-13 13:51:57

AndroidiOS

2023-09-20 15:02:56

Java編程語言

2014-09-17 10:16:41

Java 9

2014-12-04 09:58:59

PHP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 97av视频在线| 婷婷综合网 | 夜夜爽99久久国产综合精品女不卡 | 欧美在线天堂 | 黄色91在线 | 成人在线 | 国产91综合一区在线观看 | 免费高潮视频95在线观看网站 | 一区二区免费在线 | 国产成人精品一区二 | 日本三级做a全过程在线观看 | 免费观看成人鲁鲁鲁鲁鲁视频 | 免费国产黄网站在线观看视频 | 免费骚视频 | 欧美一页| 午夜精品久久久久久久99黑人 | 午夜寂寞福利视频 | 99视频在线 | 国产在线视频一区二区 | 午夜av免费 | 99亚洲精品| 亚洲在线一区二区 | 亚洲欧洲精品一区 | 欧美日韩视频网站 | 国产一区二区三区在线 | 国户精品久久久久久久久久久不卡 | 日韩精品在线网站 | 欧美中文字幕一区二区 | 欧洲一区二区三区 | 黄免费在线 | 男女羞羞视频大全 | 欧美日高清视频 | 91久久国产综合久久91精品网站 | 玖玖免费 | 日本久久久久久久久 | 中文字幕免费 | 国产99久久久国产精品 | 久久草视频| 欧美在线视频一区 | 中文字幕乱码一区二区三区 | 成人毛片视频免费 |