回覆列表
  • 1 # 野生動物Frank

    Kotlin vs Java

    關於這兩個語言開發Android,哪一個好 ?要回答這個問題,我認為應該結合你的工作環境。我們做程式開發的,如果是平時的興趣愛好或者研究學習,那麼kotlin和Java都可以去嘗試;如果你在公司,就要看公司目前的開發環境了。

    再說一說這兩門語言在開發 App 時的感受吧。之前因為 Google 和 Oracle 的一場官司,Google因為Java智慧財產權的侵權糾紛,讓Google給Oracle賠償了88億美金。大家也知道Google是一傢什麼樣的公司,因為這件事後,Google為了避免再起糾紛,就與Jetbrain合作,力推 Kotlin 語言作為 Android開發的官方語言。

    我在學習和使用 Kotlin的過程中,感覺Kotlin的語法比Java簡潔不少,沒有Java那麼多繁瑣的程式設計規範(每一行後面沒有分號,這個真是好啊)。API的呼叫還是會透過 JDK和Android的SDK來完成。一樣可以開發出功能複雜的,結合硬體(camera,GPS等)的應用。至於kotlin語言的特性,下面其他夥伴的回答已經說的很詳細了,我就不在冗述。如果你的Java基礎比較紮實,那麼學習kotlin會非常的快。完全可以平滑過渡。

    趨勢

    從你的問題中,我理解的趨勢要分為兩個方面。

    第一:Android開發的語言選擇的趨勢

    以後Android開發採用的語言,Java短時間內還是不會被替代,但是採用 kotlin 開發的應用會慢慢增多。現在國內的一些公司招聘移動開發工程師的時候,也會招一些擁有 Kotlin移動開發技能的人。

    第二:Android(或移動開發)的趨勢

    上面第一部分的 Kotlin 和 Java,都屬於原生開發。

    大家都知道跨平臺開發,簡單講就是“一次開發,到處使用”。用一種方式開發出應用及其功能,透過編譯後,可以讓應用在多個平臺執行。目前的框架有 Flutter、React Native、ionic 等等,還有更多,我這裡暫時舉兩個例子。它們都是透過 TypeScript + HTML + CSS 開發好應用後,透過編譯器編譯出來一個 apk 檔案,配合一些註冊資訊,就可以透過應用商店的稽核,上架共人們下載使用了。因為 HTML+CSS+JavaScript的門檻低,容易掌握,開發速度快。

    這種跨平臺移動開發框架,不光給開發者帶來了遍歷。我想公司的老闆也會非常高興。因為以前要開發 App,要招聘兩班人馬,一班 for Android,二班 for iOS,人力成本高。現在只需要一班人馬即可。招一個人,給他兩個人的工資,達到3~4個人的效率,老闆睡覺都能笑出來!

  • 2 # EmacserVimer

    當然目前來說,Java依然是Android的主流開發語言,但是這兩年因為oracle公司各種花樣作死,Java的開源協議一直都有很大的問題,這讓Google在面對oracle公司的各種“找麻煩”時,非常難受。

    Java優勢不明顯,但是缺陷越來越突出

    我一直認為,JVM比Java要牛!當然Java本身也還是很強大的,當年Java出來因為跨平臺的原則,逐漸從主流程式語言中殺出重圍,幾乎完全的面向物件、加上開源社群開發者源源不斷的貢獻,自然是有很大的優勢。

    但是隨著時間的推移,Java跨平臺的優勢已經不在明顯,但是程式碼臃腫、執行資源比較大等特點卻越來越突出,與此同時Scala/Kotlin等基於JVM的程式語言開始出現。直到Java 8才支援stream操作,關鍵是語法還非常糟糕,Java已經不再是真正意義上的活躍語言,因為太成熟了,大家已經不想再做過多的改變了。

    Kotlin優勢很多,但是目前來說還沒辦法替代Java存在

    在擴充套件函式、空安全、智慧型別轉換、字串模板、主建構函式、運算子過載、分離用於只讀和可變集合的介面等等這些問題,kotlin有但是Java卻沒有,沒辦法很好的解決。

    kotlin語言程式碼可以說變得非常簡潔了,並且完全相容Java,語法糖自然不用多說,更重要的是對於有些想要嘗試函數語言程式設計的小夥伴,kotlin的函數語言程式設計體驗已經非常好了,雖然跟Lisp,haskell這種以函數語言程式設計為核心的程式語言來說還有很大的差距,但體驗已經算是不錯的了。

    Kotlin是Jetbrains打造,而Android studio正是基於該公司的IntelliJ IDEA,這本質上已經是一個完整開發者生態的雛形,未來假如Google收購Jetbrains,關鍵是這門語言還確實能夠提高Android的開發效率,這是Google真的想要去改變的。Google已經將kotlin作為Android的第一類開發語言,親爹支援,加上自身的優勢,相信kotlin一定會成為一個優秀的工業級開發語言。

  • 3 # 紙飛機技術拆解局

    首先旗幟鮮明的表明觀點:

    真心沒必要學Kotlin,直接Java大法好

    而我覺得,要把這個問題講清楚,可以從以下幾個方面來看。

    Kotlin出來多久了?

    如果從2011年7月,JetBrains推出Kotlin專案來看,好像Kotlin也有些年頭了,但實際上,直到2017的Google I/O 大會,Kotlin才得以 “轉正”,即開始被視為安卓開發陣營的一級程式語言。

    因此,就類庫的豐富性和完整性而言,到目前為止,其和Java根本還不再一個量級上。但我們在生產開發中,有時候追求的,其實根本不是技術,而是快捷,能不造輪子,就不造輪子。

    當然,事實上,從一開始,Kotlin就可以無縫的呼叫Java的相關類庫,所以,可能有人會覺得,這一點不是問題,但你得反過來想,我們有多少人,真正願意在開發中,維護那種包含不同語言和風格的專案程式碼?實際上,那是非常痛苦的。

    大廠支援的情況

    在講了歷史後,我們可以來看下大廠支援的情況,從2017年已降,除了JetBrains依然在勤力的推動著Kotlin的發展外,其實,我們很少看到一些處於開發頂部的大廠,在這方面有什麼特別的動作。

    這實際上是非常重要的一種態度。想想當年桌面開發時代,Delphi的興起和衰落,靠IDE起步的公司,最終敗於平臺之下,基本上是一個大機率會發生的事件。

    雖然,現在Google和JetBrains也仍然處於蜜月期,連官方的開發IDE:Android Studio也是基於JetBrains的IntelliJ IDEA。

    但這樣的關係到底有多牢靠,或者說這樣的牢靠能不能足以讓Google不遺餘力的推廣Kotlin,以取代Java,我個人並不相信

    語言的特性

    最後來談談語言的特性。Kotlin當年為什麼突然的被Google等重視起來?我覺得無他,而是因為Kotlin,用他的“輕”,比對了當年Java開發之“重”,確實的,當Java開發人員第一次看到:擴充套件函式、模式匹配、Lamda表示式等一系列號稱下一代程式語言的特性時,的確是非常之感到驚豔的。

    但經過這幾年的發展,可以看到,從Java7到Java8,Kotlin的大部分“輕”的特性,也已經為Java吸收,因此,當初為切換而營造的原因,現在也基本上立不住腳了。

    不知道這樣的回答能不能給你一定的啟發。

  • 4 # DUOMI

    以後趨勢是dart+flutter。哪個語言簡單,易上手,成本低,速度快,跨平臺,節約開發時間,同樣功能程式碼量少,速度流暢,就是未來的趨勢,生態會慢慢完善的,需要時間的積累。

  • 5 # 谷歌開發者

    Android 開發現在很多語言都能實現,現在谷歌大力推廣IDEA的kotlin語言來寫Android無疑是最為優越的,我個人覺得使用開發語言,用kotlin更好,原因有以下幾點:

    1、ktx 加持:

    JakeWharton 大神我想大家都熟悉,他就是butterknife作者,Android 遠古巨神!他的框架非常牛逼,程式碼易用性極強。在他的ktx的加持下,寫Android的kotlin程式碼多了很多屬於自己的附加方法,而且這些方法都很適用,比如Java中findviewbyid 神煩,kotlin中只需要在activity fragment 甚至是dialog中去直接寫xml中的命名的id即可。這樣程式碼量可以減少到4成左右!

    2、協程:

    rxjava之所以很優秀,是因為整體框架底層優秀,具體我這裡不再贅述,但是在kotlin中一個東西可以完敗rxjava,那便是協程。什麼是協程呢?可以這麼理解,微執行緒,即在使用虛擬機器極小的資源甚至是單執行緒條件下完成非同步排程,特別基於kotlin預編譯特性,能夠發揮其機制的極致,這是java不可匹敵的,java沒有協程一說。

    3、語法精簡度:

    比如在寫pojo類,java get set 一坨拉下來,但是在kt裡面直接一個 data class Pojo(val a:String,val b:Int) 直接附有所有pojo特性。

    4、擴充套件函式:

    這是kt最為精髓的地方,kt的擴充套件函式能讓viewholder say goodbye。因為使用它可以重寫view的findviewbyID的方法,在viewadapter中,不需要viewholder進行控制,只需要使用擴充套件的findviewbyid的方法即可,這樣又省下很多程式碼。

    以上只是說出我在開發中常見遇到的kt優於java的東西,但是java打的apk包要比kt打的小,這點kt是沒辦法最佳化的。選擇native開發,還是多學點東西比較好,kt的的確確在Android開發上要比java好用很多

  • 臺幣 28,000 買布偶貓划算嗎?內行人解析 5 大關鍵指標
  • 每天堅持跳舞可以瘦腿嗎?