安卓開發用kotlin好,還是java好,以後得趨勢是怎麼樣的?

徐7651981


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好用很多


谷歌開發者


當然目前來說,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一定會成為一個優秀的工業級開發語言。



EmacserVimer


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

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

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

Kotlin出來多久了?

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

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

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


大廠支持的情況

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

特別是,作為Android頂部當仁不讓的公司:Google,考慮到可能的Java版權之爭,這兩年在這方面的主要著力點,基本上可以看到,是放在了一種新的語言:Dart上(並對應的Flutter框架)。

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

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

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


語言的特性

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

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


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


紙飛機技術拆解局


Kotlin vs Java

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


假如你加入公司的團隊後,接手的是目前正在維護的Android項目,而這個項目最早就是用Java開發的,那麼很可能你還要繼續用Java去開發,維護,更新。因為公司為了快速更新版本,提高維護的效率以及降低團隊開發的成本,肯定會繼續沿用之前的開發模式,不太可能 1.0 版本用的是 Java,到了2.0 版本的時候,將以前的代碼推倒重來,用 kotlin 重寫。這雖然可行,但是時間成本太大。因為現在都在快速的搶佔市場,所以App這方面也是希望能快速迭代,保證其穩定運行。如果你們公司想要開發一個全新的應用,是一個從無到有的過程,那麼也可以考慮採用Kotlin來搭建,因為沒有之前的技術包袱。具體還要看公司內部的技術管理層是如何考慮和選擇的。


再說一說這兩門語言在開發 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個人的效率,老闆睡覺都能笑出來!


野生動物Frank


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


數字化管理師


作為一名程序員,必備的能力就是自學能力和與時俱進的能力,新技術的不斷產生,必須在短時間內掌握並學會。作為Google官方認可的一級開發語言,kotlin現在不學,更待何時,在這裡和你分享7個Kotlin相較於Java的優勢,①更簡潔的字符串②更好的函數調用③利用局部函數抽象代碼④使用數據類來快速實現model類⑤用類委託來快速實現代理模式⑥apply函數來簡化代碼⑦用函數型變量來簡化回調.但是客觀辯證地來說,如果你對Java的安卓開發很熟練的話,用Java也是很不錯的選擇,但是如果你是新手的話,建議你直接學習Kotlin,畢竟對於安卓開發,kotlin有脫穎而出的優勢。如果想了解更多,請關注我,我會在今後與你分享更多的經驗


愛編程的欣欣


新技術總不是很靠譜,需要經歷試錯階段,但是,新技術代表未來趨勢,即使暫時不成熟,也值得你學習


分享到:


相關文章: