編譯:伯樂在線/黃小非
谷歌大牛說:為什么 Kotlin 比你們用的那些垃圾語言都好
5月18日绷柒,安卓團(tuán)隊(duì)在谷歌 I/O 2017 大會(huì)上宣布 Kotlin 成為官方頭等支持語言。這條爆炸性資訊在當(dāng)天就是 Hacker News 首頁熱門討論涮因。就在同一天废睦,谷歌技術(shù)大牛 Steve Yegge 也發(fā)了一篇關(guān)于 Kotlin 的使用體會(huì)總結(jié)文章,同樣也在首頁熱門养泡,并引發(fā) 200+ 討論嗜湃。
(Steve Yegge )
為什么說 Kotlin 比你們用的那些垃圾語言都好
哈,這個(gè)標(biāo)題黨的題目讓你點(diǎn)進(jìn)來看了吧澜掩。不要奇怪购披,現(xiàn)在標(biāo)題黨在網(wǎng)上很普遍的。而且這篇文章給出的回答肩榕,肯定能震撼到你刚陡。
說真的,其實(shí)我不想去攻擊你們的語言信仰……至少不會(huì)“大大地”想。畢竟你喜歡的語言大放異彩的時(shí)期筐乳,可能要追溯到冰川時(shí)代了歌殃,對(duì)不?如果你喜歡的語言到今天還沒有死蝙云,那只能說明這門語言在逐漸地改進(jìn)和更新氓皱,保持與時(shí)俱進(jìn)。
但改進(jìn)的速度呢勃刨?好吧……假設(shè)你現(xiàn)在用的語言碰巧是 Java波材,并且你也沉溺于 Java 曾經(jīng)是一門非常優(yōu)秀的語言的想法,那么你就完蛋了朵你。而且是早就完蛋了各聘。盡管人類都不太喜歡思考終極命運(yùn)問題,但是相比于在 20 多年前剛剛問世抡医,Java 8 僅僅是做了部分語言特性的替換躲因,對(duì)此你禁不住要想:“我真的要和這種語言來共度過的余生么?還是說 Java 也就只能這樣了忌傻?”
因?yàn)榻K于要開始做 Android 開發(fā)了大脉,我把各種老舊的語言問題又過了一遍。我寫過一個(gè)老游戲 Wyvern水孩,這個(gè)游戲已經(jīng)有一個(gè) iOS 版本了镰矿,最近我決定再搞一個(gè) Android 版本。我從來沒料到計(jì)算機(jī)語言會(huì)折騰到讓我“思考人生”(例如“我這是他娘的在浪費(fèi)生命么俘种?”)如果你寫過 Android 程序的話秤标,你就知道在 Android 領(lǐng)域,語言的問題是會(huì)讓你相當(dāng)難熬的宙刘。
我第一次嘗試寫 Android 程序是在去年夏天苍姜,我的個(gè)老天爺,那感覺簡(jiǎn)直糟透了悬包。其實(shí)是有人警告過我的衙猪。他們都說:“那些 API 可是很難搞啊〔冀”而我卻不聽勸垫释。一意孤行。
我想:這些玩意兒能糟糕到哪兒去呢撑瞧?反正不就是 Java 么棵譬?
歷史代碼的災(zāi)難
真是很不走運(yùn)——因?yàn)楹軓?fù)雜的歷史原因,并且也沒人在意——造成 Android 的核心 API 實(shí)在是糟糕透頂预伺。我是說:真的很糟订咸,真的很糟琅束,真的很糟。你只能關(guān)掉參考書算谈,深呼吸涩禀,然后出去猛喝咖啡來壓壓驚。人們之前給我的告誡看來是完全正確的然眼。
Android API 庫就是一個(gè)百寶箱艾船。很多 API 真的是非常好用。我可以說高每,很多在 iOS 開發(fā)里非常難搞的事情在 Android 里面卻很容易屿岂。Product flavors、Downloads 服務(wù)鲸匿、findViewById() 方法爷怀、Preferences activity 等等,這些都是很好的例子带欢。有太多 Android 里面有的東西在 iOS 里面是誒有的运授,所以在 iOS 里面你總能看到:開發(fā)者自己實(shí)現(xiàn)的惡心的和優(yōu)雅的應(yīng)用庫并存。
但是乔煞!注意左邊是一個(gè)大寫加粗的但是吁朦!在寫 Android 程序的時(shí)候,人們只關(guān)注那些不好的 API渡贾,就像你開車時(shí)候只會(huì)數(shù)路上遇到了幾個(gè)紅燈一樣逗宜,綠燈的數(shù)量是沒人關(guān)心的。因?yàn)槿藗冎粫?huì)通過紅燈的數(shù)量來評(píng)價(jià)路途是否通順空骚。
Android 確實(shí)有幾個(gè)很糟糕的“紅燈”API纺讲。例如 Fragments,這就是在 Andoird “紅燈” API 中的招牌 API囤屹。這個(gè) API 的整個(gè)生命周期的糟糕程度達(dá)到了令人發(fā)指的地步熬甚,好吧其實(shí) Activities 和 Fragments 都是如此。說句不中聽的牺丙,iOS 反而卻沒有這么糟糕的API则涯。去年夏天我試了試這些API复局,它們是如此之糟糕以至于我當(dāng)時(shí)就放棄了冲簿。我算是徹底服了。去它的亿昏,我還是以后找個(gè)人來幫我寫這些程序吧峦剔。
接下來的一年半,我就沒再碰過 Android 編程角钩。
來自俄羅斯的救星
我一直聽說吝沫,有一種新語言叫做 Kotlin呻澜,可以用來寫基于 JVM 或者 Android 程序。發(fā)明這種語言的不是別國(guó)惨险,正是戰(zhàn)斗的民族俄羅斯羹幸。更具體一點(diǎn)兒,它是由 JetBrains 開發(fā)辫愉。JetBrains 可是世界知名的 IDE 開發(fā)商栅受,代表作是 Intellij IDEA,還有他們那可愛而且大名鼎鼎的橘色恭朗,綠色屏镊,紫色和黑色混合的暗色“Darcula”主題。
圖:一個(gè)千年老妖按捺不住對(duì) Java 8 的興奮
那么為什么要給這種語言起名叫 Kotlin 呢痰腮?好吧而芥,有一種說法是因?yàn)?Java 的第一個(gè)字母是“J”,而 Kotlin 則用了Java 的下一個(gè)字母“K”作為開頭膀值。除此之外棍丐,有人還猜想(這種猜想可能來自加州大學(xué)伯克利分校),“Kotlin”這個(gè)名字的靈感還來源于“克里姆林宮”沧踏,“赫魯曉夫”以及“克格勃”骄酗。這些都是前蘇聯(lián)的驕傲,所以他們就用了一個(gè)前蘇聯(lián)軍事基地的名字“Kotlin”來命名這種語言悦冀∏鞣總之這個(gè)名字不錯(cuò),而且你會(huì)習(xí)慣它的盒蟆。
伯樂在線補(bǔ)充:Steve Yegge 在前文關(guān)于 Kotlin 的名字來源踏烙,應(yīng)該錯(cuò)了。在他自己原文評(píng)論中历等,也有網(wǎng)友指出了讨惩。
正確的應(yīng)該是:① JetBrains 是一家注冊(cè)地在捷克布拉格的公司,在全球共有 6 個(gè)辦公點(diǎn):布拉格寒屯、圣彼得堡荐捻、莫斯科、波士頓寡夹、慕尼黑和新西伯利亞处面。但主要管理層和開發(fā)者是在圣彼得堡。② 芬蘭灣中有個(gè)島就是「Kotlin/科特林」菩掏,在圣彼得堡以西 32 公里魂角。
我發(fā)現(xiàn)去年業(yè)界關(guān)于 Kotlin 只是有不少“嘀咕(buzz)”。注意智绸,只是“嘀咕”野揪,不是天花亂墜地吹牛宣傳访忿。人們只是低調(diào)地“嘀咕”著。好吧斯稳,總之海铆,我當(dāng)時(shí)看了一下,然后就覺得這個(gè)語言和我過去 15 年看過的 50 ~ 100 種計(jì)算機(jī)語言一樣挣惰,這也是一門可以替代 Java 的語言游添,當(dāng)然,我認(rèn)為任何理性的語言都能替代 Java通熄。
對(duì) Kotlin 的第一印象
我第一次看到 Kotlin 的時(shí)候唆涝,真心覺得這種語言不可能在現(xiàn)實(shí)生活中用到,真的是一點(diǎn)可能性都沒有唇辨。其實(shí)我也就是走馬觀花廊酣。我的第一印象?這個(gè)語言也沒什么大問題赏枚。它很簡(jiǎn)潔亡驰,也具有先進(jìn)的特性。如果說它時(shí)髦也行饿幅,因?yàn)樗鼛缀跄依擞?jì)算機(jī)語言設(shè)計(jì)上的所有最新潮流凡辱。不過這也沒什么大不了,因?yàn)楹芏嗾Z言也都滿足這一點(diǎn)栗恩。比如透乾,Rust。Rust 也是一門健壯的磕秤,名字起得很好的乳乌,但是沒什么人用的語言。
Kotlin 給我的一種奇怪的感覺是“似曾相識(shí)”市咆,后來我才反應(yīng)過來汉操,原來這是因?yàn)樗?Swift 很像。我之所以沒有馬上反應(yīng)過來蒙兰,是因?yàn)槲业?iOS 程序因?yàn)闅v史代碼的原因不得不用 Objective-C 而不是 Swift 來寫磷瘤。當(dāng)然現(xiàn)在我也弄明白了:其實(shí) Kotlin 的歷史比 Swift 要悠久幾年,所以正確的說法應(yīng)該是:Swift 和 Kotlin 很像搜变。
不過即便如此我當(dāng)時(shí)也沒準(zhǔn)備用這種語言干活采缚。Kotlin 對(duì)我來說確實(shí)是一種語法優(yōu)雅的語言,但是我覺得我對(duì)這門語言還沒有掌握到足夠的程度痹雅,以至于讓我可以用它來應(yīng)付殘酷的現(xiàn)實(shí)工作仰担。
從 Java 叛逃到 Kotlin
我不太記得我是具體怎么愛上 Kotlin 的了糊识。但是我敢肯定的是這絕對(duì)不是有意為之嘹承。
我努力回憶了一下炉擅,事情是這樣的渣聚,我做的那個(gè)游戲的玩家跟我說了好久,讓我開發(fā)一個(gè) Android 版本贮尉。這個(gè)游戲是 12 月份在 Apple Store 上架的,然后幾周之內(nèi)朴沿,大量粉絲就跟我說猜谚,他們是 Andorid 用戶,所以沒法玩到這個(gè)游戲赌渣。所以魏铅,盡管我已經(jīng)“發(fā)誓”再也不碰Android 編程了,但是用戶就是上帝坚芜,所以我又開始嘗試了览芳。不過這一次要換個(gè)玩兒法——不能再把胃口壞在 Android 的 Java 語言上了。我需要有個(gè)現(xiàn)成的框架鸿竖,或者什么類似的東西沧竟,來讓工作變得簡(jiǎn)單一點(diǎn)兒。
在 1 月中旬缚忧,我做了一個(gè)粗略評(píng)估悟泵,然后就決定用 Kotlin 來開發(fā)了,Kotlin 當(dāng)時(shí)可同時(shí)支持 Dalvik 和 Art 兩種 Android 虛擬機(jī)闪水。我覺得我的評(píng)估是基于以下幾個(gè)原因:
Kotlin 已經(jīng)小有名氣糕非;
當(dāng)時(shí)我寫 iOS 版的時(shí)候就想用 Swift(但是沒用成);
Kotlin有一種挺不錯(cuò)的 Android DSL 叫做 Anko球榆,這勾起了我的興趣峰弹,雖然最后我并沒有真的用到它。
所以我就用 Kotlin 開始做了芜果。在接下來的 4-5 周內(nèi)鞠呈,我用 Kotlin 重寫了游戲的服務(wù)平臺(tái)。要知道這個(gè)平臺(tái)之前已經(jīng)有 20 多年歷史了右钾。用了一個(gè)月的 Kotlin蚁吝,我就被完全征服了。我不是要說 Scala 或者其他語言的壞話舀射,但是對(duì)我這種普通碼農(nóng)來說窘茁,Koltin 是完美的。我的要求不高脆烟,給口飯吃就行山林,知道不?Scala 固然很好邢羔,但是它好得過頭了驼抹,就像牛蛙\牛腦\松露蝸牛這些高檔菜那么好桑孩。要知道我就是個(gè)藍(lán)領(lǐng),Clojure框冀、Scala 這類的語言對(duì)我來說太高大上了流椒。
我大約花了 3 天時(shí)間來學(xué)習(xí) Kotlin 的各種語法,然后就開始正式編程了明也,雖然我還是很不熟練宣虾,但是我知道這種語言和 IDE 工具足以讓我解決各種麻煩。
當(dāng)我對(duì)這種語言稍微熟悉了一些以后温数,我就知道绣硝,我應(yīng)該不會(huì)再去愛上另外一種語言了,因?yàn)?Kotlin 實(shí)在是太迷人了撑刺。你在代碼寫出來的東西讓你覺得很酷域那。當(dāng)然我以前用其他的語言編程的時(shí)候也體驗(yàn)過類似的感覺,但是那些語言的學(xué)習(xí)曲線一般都非常陡峭猜煮。Kotlin呢次员,它就是大救星:當(dāng) Java 程序員為了 Java 8 弄出來的一大堆新概念撓頭的時(shí)候,Kotlin 出現(xiàn)了王带。Kotlin 能實(shí)現(xiàn) Java 8 的各種新特性淑蔚,并且通過對(duì) coroutines 的支持,其實(shí)能實(shí)現(xiàn)更強(qiáng)大的功能愕撰,而且語法表現(xiàn)力更簡(jiǎn)潔刹衫。Java 8 確實(shí)也能表達(dá)很有意思的邏輯,但是很繁瑣搞挣,感覺就像讓你說話之前要先給你嘴里塞沙子带迟。
我想 Kotlin 上手很容易的原因太顯而易見了,要?dú)w功于它的 IDE 支持〈呀埃現(xiàn)在幾乎所有的 JVM 語言或者 Android 語言的 IDE 支持都是由社區(qū)的幾個(gè)志愿者在維護(hù)(當(dāng)然 Java 除外)仓犬。而 Kotlin 則是來自世界級(jí)的 IDE 廠商(Jetbrains),所以 Kotlin 打一開始就是自帶 IDE 支持的舍肠。有多少語言能做到從發(fā)明伊始就能有 IDE 支持呢搀继?編程語言的進(jìn)化歷程一般做不到這一點(diǎn)。況且有的編程語言從一開始就是要避開 IDE 這個(gè)因素的(Hi翠语!Rob)另外一個(gè)能一開始就做到 IDE 支持的語言就是 C#叽躯,當(dāng)然 C# 毫無疑問是全世界最好的編程語言之一。
伯樂在線/程序員的那些事補(bǔ)注:上面這段中的 Rob肌括,應(yīng)該是指 Go 語言的發(fā)明者 Rob Pike点骑,作者在這里也許是暗諷 Go 語言從發(fā)明到現(xiàn)在都沒有一個(gè)靠譜的 IDE 支持吧。
作為一個(gè)自帶 IDE 支持的語言,你在 Kotlin buffer 敲代碼的時(shí)候黑滴,打字基本對(duì)就可以了憨募。IDE 會(huì)幫你補(bǔ)全你沒寫完的部分。你知道嗎跷跪,你甚至可以把Java代碼復(fù)制到IDE里面馋嗜,然后 IDE 會(huì)幫你自動(dòng)轉(zhuǎn)換成Kotlin代碼齐板。如果你覺得 Java 的 IDE 都還不錯(cuò)吵瞻,那么我可以很榮幸地告訴你,Kotlin IDE 會(huì)把這種“不錯(cuò)”推進(jìn)到前所未有的地步甘磨。甚至有一個(gè)前微軟工程師跟我說:“我本以為微軟的 Visual Studio 是 IDE 界的標(biāo)桿橡羞,是不可超越的。但是我覺得 IntelliJ IDEA 的確要更好济舆∏湓螅”在我看來,因?yàn)槲覍?duì) Visual Studio 不熟悉滋觉,所以我在這里只是引用他說的話签夭。不過我認(rèn)為 IntelliJ IDEA 至少和 VS 是同等水平。
誠然椎侠,在現(xiàn)實(shí)工作中我還是要經(jīng)常切換到 Emacs 的第租。IntelliJ 在你打字很快的時(shí)候還是有點(diǎn)兒反應(yīng)不過來。如果你打字總是只打一半兒的話我纪,那么自動(dòng)補(bǔ)全動(dòng)能的運(yùn)行壓力還是很大慎宾。況且對(duì)純文本的處理也很糟糕,這是所有 IDE 的通病浅悉。所以 IDE 和 Emacs 你都是需要用到的趟据。不幸的是,目前 Emcacs 對(duì) Kotlin 的支持現(xiàn)在也就那么回事兒术健,不過相信以后會(huì)越來越好汹碱。我現(xiàn)在反正就是在 Emacs 和 IntelliJ 之間來回切換。目前還算是 OK荞估。
就是這樣了比被。我曾經(jīng)花了大約 10 年的時(shí)間,來找一種語言來取代 Java泼舱。我真的找得很努力很辛苦等缀。諷刺的是,在我放棄了以后娇昙,這種東西居然出來了尺迂。去看看吧。Kudos 對(duì) JetBrains 來說,是一個(gè)驚艷的成就噪裕。
Android:Kotlin 的殺手锏
這年頭新生編程語言幾乎很難產(chǎn)生什么巨大影響力蹲盘。不是說現(xiàn)在沒有新語言產(chǎn)生了,相反是每年都有質(zhì)量不錯(cuò)的新語言產(chǎn)生膳音,但是然并卵召衔,沒人用!要給“不可能”劃定界限很難祭陷。但是計(jì)算機(jī)語言的市場(chǎng)已經(jīng)非常飽和了苍凛。如果要讓一個(gè)新的語言能夠大火(而且這個(gè)規(guī)律在過去 10 到 20 年都成立),那么這個(gè)語言就必須有一個(gè)“殺手級(jí)”的應(yīng)用兵志。這門語言需要綁定一個(gè)平臺(tái)醇蝴,讓大家都非常迫切地區(qū)使用這個(gè)平臺(tái),這才能促進(jìn)大家學(xué)習(xí)這門語言以便在這個(gè)平臺(tái)上編程想罕。
就目前看來悠栓,我們上面所說的殺手級(jí)應(yīng)用——也就是我們上面扯了這么多的東西——卻是 Android 惡心的 API。每當(dāng)你順著 Android 路線往下走按价,一遇到 API 就會(huì)卡殼惭适,這只會(huì)讓你去詛咒 Android 這個(gè)平臺(tái)。Android 不論有多少優(yōu)秀的 API 都不管用楼镐,重要的是癞志,Android 糟糕的 API 太多了,所以你不得不停下來去找”現(xiàn)成”的辦法(solution)鸠蚪。
不過兄弟今阳,Android 里面解決問題的“現(xiàn)成辦法”可是不少。對(duì)于新手來說茅信,有一大堆 Java annotation processors可用盾舌,這就為語言的問題埋下伏筆。更不要提一堆迷你的框架(比如 Lyft 的 Scoop)蘸鲸。還有那些和 Android(Java)完全獨(dú)立的框架:React Native妖谴、Cordova、Xamarin酌摇、Flutter等等膝舅。
如果以上說的技術(shù)你都不喜歡,那么你還可以從語言的角度來解決問題窑多。當(dāng)然仍稀,那些完全獨(dú)立的框架是基于特定語言的,而并不是Java埂息。
Kotlin 的競(jìng)爭(zhēng)優(yōu)勢(shì)在于它并不是完全隔離于 Java 語言技潘。它基本上是 100% 可與 Java 相互翻譯轉(zhuǎn)換的遥巴。這很像C++ 與 C 的關(guān)系一樣(但它們做不到 100% )。Kotlin 也是在不斷進(jìn)化的享幽。所以你可以直接把你寫的 Kotlin 代碼扔到 Android 工程中铲掐,連目錄都不用改,然后程序就能正常運(yùn)行了值桩,方便得眼睛都不用眨一下摆霉。
其他種類的 Android 平臺(tái)都傾向于迫使你去學(xué)習(xí)一種全新的語言以及對(duì)應(yīng)的平臺(tái),其編程范式奔坟,理念和特性都各不相同携栋。Kotlin 則是讓你直接寫出 Android 可運(yùn)行的類,就跟其他 Android 程序員用 Java 寫出來的一樣蛀蜜。其實(shí)其底層的 API 都是一樣的刻两,但是 Kotlin 組織得要好很多增蹭。
還記得我去年夏天把 Android 編程書扔了然后再也不打算看了么〉文常現(xiàn)在 Kotlin 則讓我感覺:Android 編程是快樂的?我甚至覺得可能 Android 那些糟糕的 API 很可能并不是那么糟滋迈,只是 Java 把它搞得太惡心了而已霎奢。
Kotlin 致力于讓大家繞過 Android API 那些惡心的東西,并且能讓你充分發(fā)揮你的經(jīng)驗(yàn)饼灿,這一點(diǎn)甚至比 iOS 做得還要好幕侠。好吧,至少來說比 Objective-C 做得好碍彭,因?yàn)槲矣X得 Swift 肯定也不會(huì)差晤硕。知道為什么嗎?因?yàn)?br>
Swift 和 Kotlin 很像啊庇忌。
我特別喜歡 Kotlin 的地方有哪些舞箍?
嗯,這個(gè)話題其實(shí)要細(xì)說就很大了皆疹,我覺得我最好再開一篇文章來寫這個(gè)疏橄。這里我就提一下那些高級(jí)(high-level)且共性的點(diǎn)。
Kotlin 很像 Java略就。它長(zhǎng)得不像 Clojure 或者 Scala 那么奇怪(承認(rèn)現(xiàn)實(shí)把捎迫,這兩種語言就是挺奇怪的)。所以你學(xué) Kotlin 應(yīng)該很快表牢。這門語言顯然就是寫給 Java 開發(fā)者來用的窄绒。
它比 Java 更安全。Java 很多需要 annotation processors 來做的事情在 Kotlin 里則是內(nèi)置的崔兴,例如 overriding彰导,nullability等等浊闪。而且 Kotlin 對(duì)數(shù)值轉(zhuǎn)換的規(guī)則也更安全,雖然我不太喜歡 Kotlin 的處理方式螺戳,但是我還是很感謝這門語言強(qiáng)制我去思考我的數(shù)值表現(xiàn)形式搁宾。
Kotlin 和 Java 是可以互譯的。真的是指無縫互譯倔幼。我見過很多 JVM 語言最后掛掉盖腿,就是因?yàn)槠洳恢С肿宇惱^承機(jī)制。我不知道什么時(shí)候就會(huì)用到靜態(tài)內(nèi)部類损同,非靜態(tài)內(nèi)部類翩腐,或者什么破玩意兒類。Kotlin 在設(shè)計(jì)時(shí)就把和Java互譯的屬性放在第一位膏燃,也就是說茂卦,把 Java 翻譯到 Kotlin 可以逐漸進(jìn)行,一次可以直接轉(zhuǎn)換一個(gè)文件组哩。
Kotlin 很簡(jiǎn)潔等龙。你要知道我也算是個(gè)高爾夫球手,所以我實(shí)話實(shí)說伶贰。如果在一切都相同的情況下蛛砰,我更喜歡短的程序,只要它寫的邏輯清楚黍衙。Kotlin 對(duì)我來說就像是打了一輪好局泥畅。平均下來我發(fā)現(xiàn) Kotlin 的代碼長(zhǎng)度比相同邏輯的 Jython 代碼短了 5%-10%(這可是我用某種“黃金標(biāo)準(zhǔn)”測(cè)出來的),而且還能保證程序的可讀性和類型安全琅翻。
Kotlin 更貼近實(shí)際位仁。Kotlin 支持在一個(gè)文件里定義多個(gè)類,支持一等方法方椎,操作符重載聂抢,擴(kuò)展方法,類型別名辩尊,字符串模板涛浙,還有一堆看上去沒什么新意的語言特性它都支持。而我就是不明白為什么 Java 什么都不支持摄欲,連人們需要的語言特性它都不做轿亮。
Kotlin 進(jìn)化很快。例如剛剛宣布啟動(dòng)的對(duì) coroutine 的支持胸墙,將會(huì)成為提供 asyn/await我注, geneator 以及所有其他無鎖并發(fā)特性的基礎(chǔ)設(shè)施。
Kotlin 很擅長(zhǎng)“拿來主義”迟隅。Kotlin 經(jīng)常從其他的計(jì)算機(jī)語言設(shè)計(jì)中抄點(diǎn)子但骨,并且也毫不避諱励七。他們說:“我們很喜歡 C# 的處理方式,所以我們就自己照著擼了一個(gè)奔缠÷犹В”
Kotlin 支持 DSL。DSL 不到深思熟慮萬不得已的話千萬不要引入校哎,但是不得不承認(rèn) DSL 威力巨大两波。例如你看 Gradle 的 DSL 和 Maven 比,在典型的 Maven 項(xiàng)目里闷哆,配置代碼肯定要超過上千行腰奋。所以 Kotlin 是來給你降工作壓力的。
Kotlin 的 IDE 是在是太棒了抱怔。剛才不久我才在 Emacs 里寫程序文件劣坊,結(jié)果 Emacs 報(bào)了一對(duì)錯(cuò)。而我把同樣的代碼拷貝到 IntelliJ 里面屈留,然后按 Alt-Enter 逐一自動(dòng)修復(fù)了 50 多條局冰,然后所有的錯(cuò)誤就都搞定了。這真是幫了大忙啊绕沈。
Kotlin 很有趣锐想。我跟你們說帮寻,Kotlin 就是有趣乍狐。也許這是我發(fā)自潛意識(shí)地在做廣告。Kolint 的關(guān)鍵字和方法名都很有意思固逗。Kotlin 把我從一個(gè)只會(huì)死編程的碼農(nóng)轉(zhuǎn)變?yōu)榱艘粋€(gè)計(jì)算機(jī)語言的愛好者浅蚪。
總之,你就這么想:我收拾東西搬家烫罩,然后碰到了鄰居 Kotlin惜傲。我之前也算見過的一堆計(jì)算機(jī)語言,但是只有 Kotlin贝攒,能夠讓我在那么短的時(shí)間內(nèi)重寫我的游戲服務(wù)器代碼盗誊。而我現(xiàn)在則是在用 Kotlin 重寫我之前寫過的一切。
我也知道還有好多其他的程序員也對(duì) Kotlin 感覺非常好隘弊,打算成為 Kotlin 程序員哈踱。其中大部分的人應(yīng)該在 1-2 年之內(nèi)水平就能超過我了。我們私下里談?wù)撨^梨熙,互相都說“Kotlin 讓編程感覺美好的感覺又回來了开镣。”還不錯(cuò)咽扇,再我們尚未對(duì)編程全部失去興趣之前邪财,Kotlin 來了陕壹。就仿佛你只要把語言的語法學(xué)會(huì)了。這回把你帶回到那種第一次學(xué)編程的感覺树埠,無論寫什么都覺得自己很牛逼糠馆。
再一次,向 JetBrains 致敬怎憋。他們對(duì)計(jì)算機(jī)語言做出了巨大的貢獻(xiàn)榨惠!我脫帽致敬。
那么 Kotlin 比你用的任何其他編程語言都好嗎盛霎?我想對(duì)我來說是的赠橙。因?yàn)椋绻闩銮墒窃谟?Java 的話愤炸。如果你一整天就是泡在椅子面前寫 Java期揪,那么你會(huì)發(fā)現(xiàn) Kotlin 簡(jiǎn)直就是一股清流。所以也讓我知道你們是怎么想的吧规个。
免責(zé)聲明:本文只是闡述我個(gè)人對(duì) Android 開發(fā)的觀點(diǎn)凤薛,并不代表我的雇主(谷歌)或者 JetBrains 的觀點(diǎn)。
伯樂在線/程序員的那些事 摘錄原文的一些評(píng)論:
Igor Tovstopyat-Nelip
好文章诞仓!
JetBrains 不在捷克缤苫。雖然它是在(捷克)布拉格成立的,但主要在圣彼得堡墅拭。他們很多管理層和開發(fā)者都是俄羅斯人活玲,很多是從圣彼得堡大學(xué)畢業(yè)的 。
關(guān)于取名谍婉,Java 語言是出自印尼群島中的 Java 島舒憾。Kotlin 是芬蘭灣中的一座島,離圣彼得堡很近穗熬。彼得大帝在 18 世紀(jì)早期從瑞典那里搶過了圣彼得堡镀迂。此后,一直是俄國(guó)波羅的海艦隊(duì)的海軍基地唤蔗。圣彼得堡有北國(guó)風(fēng)光之美探遵,海軍神廟(Naval Temple)令人印象深刻。
我們公司(位于亞特蘭大)也試過多種 JVM 語言妓柜,Java 是首先∠浼荆現(xiàn)在我們更對(duì) Kotlin 感興趣了。大家都非常喜歡领虹。并且 Kotlin 和 Java 是無縫互通的规哪。
Kotlin 也能編譯成 JS,并且值得一提的是塌衰,Kotlin Native 也處于火熱發(fā)展中诉稍,看起來會(huì)是 Rust 的強(qiáng)勁對(duì)手蝠嘉。
匿名網(wǎng)友:
我過去也一起用過 Eamcs 和 JetBrains 的 IDE(PyCharm 和 Webstorm)。雖然這種組合很怪杯巨,但出奇的好蚤告。Emacs 適合心靈控制級(jí)別的文本編輯,IDE 適合面向鼠標(biāo)的閑逛和小修改服爷。
Stephen French:
我喜歡 C#杜恰,對(duì) Java 落后太多真的失望至極,因?yàn)槲业墓ぷ鲀A向 JVM仍源。Kotlin 看起來非常有意思心褐!