簡介
kotlin 是不是最近很火熱,有Google爸爸的加持之下, 感覺Kotlin如日中天?
很抱歉, 其實從一個開發人員的眼界裡來看, Kotlin其實真的沒有那麼牛逼,可能是有一點過譽了.
它本質上,還是在模仿C#, 而C# 甚至還有LINQ這樣牛逼的特性 . 更不用說現在.net已經開源, 免費使用. C#還有自己獨立的VM, kotlin還沒有自己的執行時, 它還只能依附於JVM生態上吸血.
我個人其實覺得Jetbrains公司, 沒有自己的VM, 而又不積極去推進JVM生態體系建設,反而自己自立門戶,這樣的手段,感覺到不是很光彩.
我是正統Java, JDK,JVM的堅定支持者.
Kotlin 跟C# 到底有多像?# Kotlinprintln("Hello, world!")#C#public void Main() { Console.WriteLine("Hello, world!");}----# Kotlinvar myVariable = 42myVariable = 50val myConstant = 42# C#var myVariable = 42;myVariable = 50;----# Kotlinval age = 42if (age < 10) { println("You're too young to watch this movie")} else if (age < 13) { println("You can watch this movie with a parent")} else { println("You can watch this movie")}# C#var age = 42;if (age < 10) { Console.WriteLine("You're too young to watch this movie");} else if (age < 13) { Console.WriteLine("You can watch this movie with a parent");} else { Console.WriteLine("You can watch this movie");}----# Kotlinfun greet(name: String, day: String): String { return "Hello $name, today is $day."}val text = greet("Bob", "Tuesday")// Hello Bob, today is Tuesday# C#string Greet(string name, string day){ return $"Hello {name}, today is {day}";}var text = Greet("Bob", "Tuesday");// Hello Bob, today is Tuesday----# Kotlinfun transform(initial: String, f: (String) -> String) = f(initial)val result = transform("hello", { x -> x.toUpperCase() })// Trailing lambda can be placed outside the parenthesesval result2 = transform("hello") { x -> x.toUpperCase() }// HELLO# C#string Transform(string initial, Func<string, string> f) => f(initial);var result = Transform("hello", x => x.ToUpper());// HELLO----# Kotlin// Kotlin doesn't have tuples, use data classesdata class GasPrices(val a: Double, val b: Double, val c: Double)fun getGasPrices() = GasPrices(3.59, 3.69, 3.79)val prices = getGasPrices();val (a, b, c) = getGasPrices();# C#(double a, double b, double c) GetGasPrices() => (3.59, 3.69, 3.79);var result = GetGasPrices();var (a, b, c) = GetGasPrices();
你 可能會覺得, Kotlin我是獨立設計的,說什麼抄襲呢? 你要知道, C# 現在已經出來第9代了.
程式語言,如果說跟咱們武林門派相比: 武當派咱就是C#, Java那就是少林派. Kotlin, 那就星宿派吧.
武當少林, 都是武林中大門派, 開宗立派, 山門開啟, 廣收門徒,受萬人敬仰.
Kotlin 的問題 在於什麼:
它目前還是一個商業公司獨裁的研發狀態, 核心Leader是Jetbrains 的團隊leader它的特性研發, 都是官方掌控,官方貼一個設計文件,然後就這麼擼了, 你沒有辦法阻止它,或者讓它幹什麼迭代演進太快了, 跟前端技術一樣,一個星期能給你幾個迭代出來. 過了一兩個月,你就完全懵逼, 瞎嘰霸改什麼玩意?抄襲其他語言的特點比較多, 但是沒有抄到精髓, 學,而不像, 畫虎不成反似貓.設計能力很差, 沒有其他語言那種能畫龍點睛,令人歎為觀止的設計沒有解決業務開發的問題, 反而製造更多問題, 為了解決設計的問題,又強行加戲,帶來更多的問題最終坑害的是學這個語言,並試圖把這個語言投產的 開發者, 公司未來不明顯,不明確, 沒有加入一個能夠持續發展的開源基金會, 哪怕是Apache, Eclipse,Linux 基金會, CNCF等任何一家官方對開發者,社群,扶持力度不夠, 對開發者需要的生態,支援力度不夠,對上游JVM,JDK 索取多, 回饋少. 作為一門依賴於JDK體系的語言, 你悶頭髮展自己的技術,而不想著回饋給上游,我就覺得你這個專案,沒有那麼偉大給所有喜歡Kotlin的開發者,一個忠告:
如果你是為了吃飯, 那麼Java 永遠是你可以信賴的夥伴,它有著嚴謹的開發,技術規範,不會隨便折騰. 大企業,生態體系都不會亂來, 穩定,可控如果你不怕, 那麼不要隨便升級最新的kotlin , 因為新版小白鼠沒有那麼多, 上車快,意味著bug多, 不穩定的因素多. 生產環境最怕什麼,最怕 各種奇葩的問題. 而且你不是kotlin核心團隊,很多奇怪的問題,定位,修起來不是那麼好修, 你不得不退回之前一個穩定的版本,而為了找到一個穩定的版本,你會需要花更多的精力去定位問題, 測試問題如果有能力, 請關注kotlin的開發進展, 對他們的特性增加,減少,廢棄特性, 提出自己的意見,建議, 也讓他們知道, 社群是有意見,建議的, 他們不可以為所欲為.隨便亂改如果有能力, 也請多支援, 比如貢獻開源類庫, 幫助建設kotlin生態體系, 現在Kotlin生態體系還很薄弱, 類庫支援還比較少一些, 當然,可以呼叫java原生的lib,但是kotlin自己的生態不是那麼完善.對於那些猶豫不決的開發者, 我覺得大家可以考慮下更成熟後的語言. 比如C#, Java, 如果你公司業務沒這麼龐大, 那麼PHP, Ruby on Rails, Python 也可以考慮考慮.
移動端開發,選擇就沒那麼多, 老實本分的 Java其實挺好的. 我覺得Java 8 可以再寫個二十年.
只要谷歌腦子不抽風, 我覺得都挺好的.
預測一下穩定的 Kotlin, 估計要等到3代以後, 期待kotlin 3. 因為這第一代的kotlin, 老實說,很多設計都是非常倉促, 問題是比較多的. 官方的更新迭代也是非常劇烈
完全是出於一個失控的狀態.
學kotlin的這幾年,吃盡了不少苦頭, 也有了這篇文章. 好了, 我該說的都說完了, kotlin的鐵粉們,可以來噴我了.
如果你們沒有被kotlin 毆打過, 別告訴我你是kotlin 的鐵粉.
沒有踩過十次以上坑的, 別來跟我說你更懂kotlin, 因為你連kotlin的門都沒摸到, 還不知道它有哪些不足, 發展過程中, 有哪些坑.