第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

kotlin語言是在java的基礎上進行二次封裝嗎?

kotlin語言是在java的基礎上進行二次封裝嗎?

吃雞游戲 2018-11-22 19:15:29
kotlin語言是在java的基礎上進行二次封裝嗎
查看完整描述

1 回答

?
楊__羊羊

TA貢獻1943條經(jīng)驗 獲得超7個贊

為什么說 Kotlin 是優(yōu)秀的
本文不會像一般介紹語言的文章那樣,一開頭就羅列出語言那些酷炫的特性,我們稍后再來探討這些內(nèi)容。
首先我將介紹一些其它的信息,因為2013 年一項研究顯示,當開發(fā)者評估一種編程語言時生態(tài)系統(tǒng)要比語言特性更重要。這符合我個人的經(jīng)驗,下面就讓我開始介紹吧:
Kotlin 被編譯成 JVM 字節(jié)碼或者 JavaScript 代碼。Java 開發(fā)者將會是對它最感興趣的人,不過對于使用垃圾收集運行時語言的開發(fā)者而言它也具有一定的吸引力,比如 Scala、Go、Python、Ruby 和 JavaScript 等語言。
Kotlin 來自業(yè)界,而不是學術界。它解決了開發(fā)者現(xiàn)今面臨的實際問題。例如它的類型系統(tǒng)可以幫助你避免空指針異常。
切換到 Kotlin 無需成本!它是開源的但這不是重點,重點是它提供了一個高質(zhì)量的一鍵從 Java 轉(zhuǎn)換到 Kotlin 的工具,并且十分關注 Java 二進制文件的兼容性。你可以將現(xiàn)有 Java 項目的一次性轉(zhuǎn)換成 Kotlin 項目,而該項目仍將可以正常編譯,即使這是一個包含上百萬行代碼的復雜程序。
顯然你可以從上文得知,Kotlin 程序能夠使用所有現(xiàn)存的 Java 框架和庫,甚至那些依賴注解處理的高級框架。它們之間的交互是無縫的,不需要包裝或者適配層。Kotlin 可以整合 Maven,Gradle 以及其它構(gòu)建系統(tǒng)。
它十分平易近人,語法精煉直觀,僅僅是閱讀語言參考文檔幾個小時就能學會使用。Kotlin 看起來十分像 Scala 但是更加簡潔并且兼顧了可讀性。
它不遵循特定的編程哲學,例如極度的函數(shù)式編程或者面向?qū)ο缶幊田L格。
它不會增加運行時的開銷。Kotlin 的標準庫十分小巧緊湊:專注于擴展 Java 標準庫,編譯階段的大量內(nèi)聯(lián)操作意味像 map/filter/reduce 等管道結(jié)構(gòu)函數(shù)將被編譯成類似于命令式語言的代碼。
Anko 與 Kovenant 等框架的出現(xiàn)意味著在 Android 開發(fā)者中 Kotlin 開始變得流行起來。如果你正在從事 Android 相關的工作,相信你很快就會獲得好的工作。你可以閱讀這份 Square 公司開發(fā)者 JakeWharton 的報告,了解用 Kotlin 進行 Android 開發(fā)的體驗。
Kotlin 允許你繼續(xù)使用你的工作效率提升工具。IntelliJ 的 IDE 對 Kotlin 的支持十分完善:你可以對代碼進行重構(gòu)、搜索、導航以及使用自動完成,而且 IDE 充分支持調(diào)試、單元測試、性能分析等等功能。
除了 Android,我認為 Kotlin 還非常適用于企業(yè)中 Java 的應用場景。如果你的工作是整天埋頭于大公司的代碼庫中,那么當 Kotlin 1.0 版本正式發(fā)布時你應該盡快去了解一下:
由知名公司為它提供強大的商業(yè)支持。 JetBrains 這家公司 有一個高度稱職的大團隊致力于該項目,有穩(wěn)定的商業(yè)模式甚至在自己的部分旗艦產(chǎn)品中使用 Kotlin,這表明短期內(nèi) Kotlin 不會被放棄。
使用 Kotlin 風險較低:可以由一兩個感興趣的團隊成員在項目中小范圍的試驗 Kotlin,這并不會擾亂你的項目,因為 Kotlin 的類對外提供的 Java API 看起來就與普通的 Java 代碼一樣。
因為 Kotlin 十分注重語法的可讀性,代碼審查不會成為問題,對 Kotlin 不熟悉的團隊成員仍然能夠完成該工作。
Kotlin 基于 Java 6,所以假如你難以在項目中升級使用新版本的 JVM,你可以使用 Kotlin。
今年早些時候我向 Swiss Re 這家瑞士再保險公司的團隊(他們使用 Java 和 .NET)展示了 Kotlin。首先我定義了一個簡單的 Java 類包含一些字段以及 toString、equals、hashCode 等方法,大概有 50 行代碼。然后我將它轉(zhuǎn)換成 Kotlin 代碼(大部分是自動完成的),結(jié)果僅剩 1 行代碼,接著我還演示了其它節(jié)省時間的特性。他們看過后對 Kotlin 充滿了熱情并且認為 Kotlin 是它們項目中 C# 語言的一個潛在競爭對手。
我認為 Kotlin 正中企業(yè) Java 開發(fā)者的紅心,所以盡管 Kotlin 是免費的,JetBrains 還是能夠通過它增加商業(yè)版本 IDE 的銷售來賺大錢。這將激勵他們根據(jù)用戶的意愿持續(xù)改進它。
與此相比,對于那些由不相關產(chǎn)品資助的語言開發(fā)者來說,當用戶需求與之前的設計理念沖突時,他們很少會因此作出調(diào)整。
特性
Kotlin 作為一門新的編程語言能夠脫穎而出,是因為它關注生態(tài)系統(tǒng):JetBrains 懂得生產(chǎn)力的高低更多的取決于生態(tài)系統(tǒng)而不是便捷的語法。
盡快如此,Kotlin 還是有許多有用的特性能讓你編碼的過程變得愉快:
我們已經(jīng)提過 null 安全(可選),它能夠讓編譯器系統(tǒng)的標記潛在的空指針引用。與一些語言不同的是它不涉及 option 類,因此是零開銷的,并且還有其它語言特性確保它不會造成不便。
精煉的語法:無處不在的類型推斷、簡單的函數(shù)只需要一行、簡單的結(jié)構(gòu)以及 JavaBeans 也只需要一行就能聲明、真正的屬性——可以在背后自動生成 getFoo/setFoo 方法用于與 Java 進行交互、函數(shù)可以獨立存在于類之外。
異常均為非檢查型。(譯者注:感興趣的可以閱讀一下Java 理論與實踐: 關于異常的爭論)
使用 data class 關鍵字創(chuàng)建數(shù)據(jù)類會自動生成通用方法,例如 equals、hashCode、toString 以及 copy 和 componentN(同時聲明多個變量時會調(diào)用該方法)。這將幫助你在不使用構(gòu)建器的情況下便捷的獲得不變類(immutable classes)。
但如果你需要構(gòu)造復雜的結(jié)構(gòu)體,借助類型安全的構(gòu)建器這個特性可以簡潔的實現(xiàn)。如果你使用 Google Protocol Buffers 來存儲結(jié)構(gòu)化數(shù)據(jù), 通過 KBuilders 這個庫也能很輕易做到。
支持函數(shù)式編程以及零開銷的 lambda 表達式,能夠在 Java 的集合中做 Map、Filter、Folder 等處理。Kotlin 的類型系統(tǒng)能夠自動識別可變或者不可變的集合。
擴展函數(shù)特性能夠讓你在不改動源碼的情況下為類添加方法。乍眼一看以為是為了避免寫出像 FooUtils 這種風格工具類的語法糖,不過隨著使用的加深,你會認識到它不僅能幫你更加容易的通過自動完成使用方法,還能協(xié)助你集成現(xiàn)有的 Java API 以及借助其它 Kotlin 特性構(gòu)建功能強大的擴展。
支持運算符重載,但是不會像 Scala 或者 Perl 那樣出現(xiàn)難以理解的代碼。運算符被映射成相應名字的方法,通過重寫這些方法改變運算符的行為(包括函數(shù)調(diào)用),但是不能定義新的運算符。這使得程序能夠兼顧功能與可讀性。
Kotlin 沒有宏或者其它的方式來重定義語言,但是通過這些精心設計的特性能夠使第三方庫自由的對它進行擴展,官方對集合類進行的擴展也只是小試牛刀而已,請看以下例子。
想使用 fibers、actors 和 Go 風格的 channels?一個名為 Quasar 的庫已經(jīng)為你實現(xiàn)了。
使用 Markdown 替代 HTML 來編寫 API 文檔,這樣編寫 JavaDocs 可比以前舒適多了。(譯者注:JetBrains 提供了相應的文檔生成器 Dokka)
更好用的泛型。如果你沒有完全掌握泛型參數(shù)中 super 以及 extends 的含義,別擔心,這不是你的錯。Java 的泛型的確令人費解,Kotlin 解決了這個問題。
委托是一個大家都知道的設計模式,Kotlin 原生支持它。
== 運算符的行為符合預期(譯者注:簡單來說 a == b 相當于 a.equals(b);新增了 === 運算符,用來判斷運算符兩邊是否指向同一個對象)
想快速便捷的進行異步編程嗎?當然!
字符串插值“可以使用這樣的寫法在字符創(chuàng)中直接引用變量 {this.example}”
函數(shù)中的參數(shù)可以指定默認值、使用可變長度以及通過參數(shù)名傳參。
還有許多的調(diào)整與優(yōu)化。假如 Java 中有某些讓你覺得困擾的問題,我相信 Kotlin 一定已經(jīng)把它處理好了。
現(xiàn)在就來試用一下!
跟很多現(xiàn)代編程語言一樣,Kotlin 可以通過網(wǎng)頁瀏覽器來進行體驗。不過跟其他語言不一樣的是,Kotlin 的實驗網(wǎng)站提供了一個成熟的 IDE,包括響應很快的自動完成,實時的后臺編譯,甚至還有在線的靜態(tài)分析!
在線試用一下吧
好了,讓我們繼續(xù)接下來的內(nèi)容
目前存在哪些問題?
生活中沒有什么是完美的,包括 Kotlin。以下是我嘗試這門語言時遇到的一些問題。
最大的問題是不夠成熟,因為 Kotlin 目前還處于 Beta 階段,這意味著:
每更新一個版本,語法、ABI 以及標準庫就變一次。好消息是這些變化通常比較微小,可以借助 IntelliJ IDE 來自動升級你的代碼,所以這個過程并不會太麻煩。
Java-to-Kotlin 的轉(zhuǎn)換工具(J2K)還沒有完成。它偶爾會大規(guī)模的破壞和默默地擦除 Java 8 中的 Lambdas(修改:2015 年 10 月:M13 版本的轉(zhuǎn)換工具已經(jīng)可以正確地處理 Java 8 的特性了)。由它轉(zhuǎn)換而成的代碼并不總是最好的寫法,但是 JetBrains 為這個工具付出了大量努力,它已經(jīng)是我用過的語言轉(zhuǎn)換工具中最好的了。所以我并不太擔心這個問題,這個轉(zhuǎn)換器正在迅速的改進中,變得越來越成熟。
你會遇到編譯器錯誤。盡管我的程序并不大,但還是會發(fā)生無法編譯的情況,甚至錯誤的編譯結(jié)果。診斷這些問題并不難,但終歸還是影響了開發(fā)的體驗。
你會遇到 IDE 內(nèi)部錯誤。當這個錯誤發(fā)生時,IntelliJ IDE 會彈出一個懸浮窗口,附帶向 JetBrains 報告的選項。大部分錯誤無需理會,不過依然會使人厭煩。
偶爾會出現(xiàn)無法加載提示文檔的錯誤(修改:M14 版本發(fā)布后,這個問題已被修復)
目前 JetBrains 正致力于完善發(fā)布 1.0 版本而不是添加新的功能,期待這些問題能夠得到修復。
第二個我遇到的比較大的問題是,有時與 Java 的交互會受到局限。
一個典型的 Bug 是 Java 的類型系統(tǒng)無法防止你改變 Map 中 Key 的類型。按理來說,這樣操作應該導致編譯器報錯,例如使用類型錯誤的 Key 刪除元素。有些 JDK 中的集合使用了泛型,它們某些重要方法的泛型參數(shù)是 Obejct,所以編譯器不會提示。當在 IntelliJ IDE 中編寫 Java 代碼時會有靜態(tài)分析的警告,但是目前 Kotlin 環(huán)境還沒有這個功能。因為 Kotlin 使用的是 Java 的集合框架沒有自己實現(xiàn),所以這導致了一些類型安全方面的問題,我已經(jīng)遇到好幾次了。
(修改:1.0 Beta 版本中這個問題已經(jīng)解決了,Java 中集合框架的類型安全缺陷在 Kotlin 已經(jīng)不復存在。喲呵?。?br/>另一個例子是,當調(diào)用或使用 Java 代碼時 Kotlin 的 Null 安全特性無法發(fā)揮作用(可以借助注解彌補)。作為 Kotlin 的初學者,剛開始你可能會寫許多調(diào)用 Java 庫的代碼,但是因為以上的問題它們并沒有你想象中那么好用。這種情況的改善只能等待 Kotlin 使用人數(shù)的增長。JetBrains 一直在嘗試使 Null 安全特性能體現(xiàn)在 Java 交互中,這種想法是好的,但有時考慮并太周全。(修改: 從 M13 版本開始,在 Java 代碼中將自動以 @NotNull @Nullable 等注解實現(xiàn) Kotlin 的 Null 安全特性)
雖然有以上的問題存在,但同時也使得我們能更流暢的使用 Java API,我覺得這種權(quán)衡是值得的,只是在開發(fā)中要注意。
其它需要考慮的問題:
Kotlin 的社區(qū)還比較小。雖然目前沒有多少 Kotlin 的庫可以使用,但是憑借優(yōu)秀的 Java 交互能力,Kotlin 可以使用現(xiàn)有成熟的 Java 庫。
如果你喜歡看書來學習,那么你需要等到今年晚些時候才能看到 Kotlin 開發(fā)者寫的書(譯者注:Kotlin in Action)
純粹的函數(shù)編程風格開發(fā)者可能會覺得類型系統(tǒng)中缺乏一些 Scala 或 Haskell 擁有的高級功能。如果你對類型系統(tǒng)一些功能比較看重,那么 Kotlin 可能不適合你。
Kotlin 還能編譯成 Javascript 代碼,但是比較少用,所以可能會遇到更多的問題,這是我從論壇中得到的印象。(修改: 目前 Kotlin 的開發(fā)重心在于完成 1.0 版本并使其穩(wěn)定運行在 JVM 中,Javascript 方面的問題將會在 1.0 發(fā)布后著手解決)
沒有標準的編程風格指南,目前 Kotlin 提供了多種語法可供選擇。不同人寫出來的 Kotlin 代碼很可能完全不一樣。這與 Go 嚴格的風格形成了鮮明的對比。(修改: Kotlin 1.0 版本開始,一些靈活的語法已經(jīng)被移除了,例如現(xiàn)在重載運算符以及定義中綴函數(shù)時必須分別使用 operator 和 infix 關鍵字進行標記)
Kotlin 的編譯速度稍稍慢于 Java,以及 IntelliJ IDE 的智能提示反應有點緩慢,不算嚴重而且比 Scala 快多了。(修改:Kotlin 1.0 開始編譯速度有了明顯提升)
Kotlin 有一個 Eclipse 插件,但是很明顯沒有 IntelliJ 的好用。
Kotlin 在某些方面比 Java 要嚴格。它不會自動將 Int 轉(zhuǎn)換為 Long 類型,需要開發(fā)者顯示的轉(zhuǎn)換。這是因為 Kotlin 關注正確性和試圖解決《Java Puzzlers》一書中提出的問題。JetBrains 聲稱他們已經(jīng)搞定一半了。
Kotlin 基于 Java 6,因此會受到它的局限。Kotlin 與 C# 在很多領域都很相似甚至比 C# 做得更好,但是它缺少一些功能,例如 Java 平臺尚未支持的某些數(shù)據(jù)類型。
為什么應該開始考慮使用 JVM
最近一段時間我遇到了很多使用動態(tài)腳本語言(JavaScript 或者 Go —— 譯者注:Go 應該是靜態(tài)編譯型語言)的創(chuàng)業(yè)公司。
我在 Bitcoin Space 工作的時候,使用動態(tài)語言是非常痛苦的事情。在這些語言里沒有安全性的類型,這已經(jīng)導致了巨大的貨幣損失。Go 比較少出錯,但是在基礎層面上給人的體驗依然很差,比如說缺少好的調(diào)試工具,快速 GC 機制,穩(wěn)健的管理器以及可靠的分析工具。
過去 15 年或者更長時間里,Java 變得越來越健壯,越來越冗長,甚至有過度設計的跡象,這些變化很大程度上源于它的聲譽。企業(yè)級 Java 類的名字 PathVariableMapMethodArgumentResolver 就是例證。在很長一段時間里我沒有考慮 JVM,我確信這種環(huán)境并不適合我。
最終我因為 Android 被迫回到 Java,發(fā)現(xiàn) Java 的開發(fā)環(huán)境已經(jīng)改變了。雖然 XML 仍然不合時宜的頻繁出現(xiàn)在各種場合,但是一些基礎功能十分完善,令人印象深刻。 IntelliJ 是比 Eclipse 更快并且更智能的 IDE。Maven 一出現(xiàn)就得到了迅速的發(fā)展,擁有許多原本我想要其它構(gòu)建 / 依賴系統(tǒng)增加的功能。較新的 Web 框架像 Ninja 和 Play 從類似 Ruby on Rails 的框架中學到了輕量簡潔。有大量的庫可供使用。硬件性能變得更高以及 JVM 變得更有效率,等等轉(zhuǎn)變。
沒有真正改變的是語言本身,Java 代碼寫起來依然是令人不快的冗長。
現(xiàn)在有了 Kotlin,完全無需承受離開 Java 現(xiàn)有的生態(tài)系統(tǒng)的疼苦。你可以編寫更富有表現(xiàn)力的代碼,但是卻比腳本語言更簡潔,同時擁有更好的性能和更少的錯誤。
如果你喜歡 JavaScript,可以嘗試 Kotlin 的 JS 后端,或者在 Nashorn JS 引擎里運行你現(xiàn)有的代碼。
最后,如果你喜歡 Go 語言是因為它可以編譯獨立運行的程序,那么試試 javapackager 工具。Kotlin 在本地為每個平臺創(chuàng)建了捆綁包,這意味著在 linux 上不需要 JRE 的依賴就可以獨立自主的獲取 DEBs(linux 的安裝包)或者壓縮包。當然,它拆包之后不是單個文件而是單個目錄,從部署的角度來看并不難操作。
簡而言之:如果你之前因為看 Java 不順眼而忽略了 JVM 的生態(tài)系統(tǒng),那么你應該借著 Kotlin 這門新語言進入這個世界瞧瞧。



查看完整回答
反對 回復 2018-12-13
  • 1 回答
  • 0 關注
  • 1054 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號