目錄安全
直白的說。。很很差,像屎同樣,原本對此抱有很大的指望和好感度,但通過一成天的學習,徹底失望了,這門語言中間有各類的奇怪的語法和反直覺性的東西jvm
在jvm的基礎上特別在安全性作了很大的改進。。不少的特性基本杜絕了一些不安全的編碼,而且作了相似 RASP 的安全方案。
官方也宣傳說對Java 100%兼容.ide
先說優勢吧,省得說我在胡亂噴shit
控制流語句變得很靈活支持默認返回,和label 控制等特性
好比when和if 變得極其靈活並且方便好用例如學習
var par = when(i){ i is null -> false i is String -> { do some .... null #last will auto return to var par } i in 1..100 -> { do some ... i * 2 }else{ null } }
加入了 extension 的特性
例如Java的 Array
fun Array<Int>.swap(first:Int,last:Int){ var f_i = this[first] this[first] = this[last] this[last] = f_i } // this will get [0,1,2,3,4] var s = Array<Int>(5,{i-> i}) s.swap(2,4) /// will swap
我試着寫了一個JSwing 呵呵。可是失敗了。官方加了一個 kotlin-swing。。 呵呵編碼
繁雜的語法糖設計
fun <T> cloneWhenGreater(list: List<T>, threshold: T): List<T> where T : Comparable, T : Cloneable { return list.filter { it > threshold }.map { it.clone() } }
好比原來的 @Override 變成須要特別申明原來的類爲open class,這致使了一個很重大的問題。。目前寫的類之後到底要不要用呢?假如沒有寫open的話。。那麼其餘人若是想要重寫某個方法,就沒有辦法code
及其臃腫的結構
真的不是我想黑他。
在爲了安全性的考慮上,它在普通class 的基礎上加了 一個 open的結構
全部想要繼承的類必須加上open ,這致使我不知道怎麼繼承原始的類好比 Int
還有諸如data ,object ,interface, abstract 這樣單獨的東西。和原來Java 簡介明瞭的class 和 interface 有着很大差異。。若是不是認真記憶,很容易把這些混雜繼承
爲了增長所謂好的特性加入了很是多的語法
好比generics,爲了防止溢出或者 UnMatchClass 這樣的錯誤,特別又(ps:TMD到底還有多少語法)加了 T
in
out
等語法get
fun get(index: Int): T { /* ... */ } ... fun copy(from: Array<out Any>, to: Array<Any>) { // ... }
同時混入了相似 Object-c中的delegation的東西。。。。。
總體沒有設計哲學,就像一個胡亂的七巧板同樣有各類形狀的單個模塊(我我的偏向相似Lisp的語系),爲了加入好的特性而像拼湊積木同樣加入各類語法,大大加大了學習的成本和編寫的成本。最後在使用的時候每每出現各類問題;和Java的兼容性並不如宣傳說的那麼好。