kotlin 學習感受


kotlin 學習感受

直白的說。。很不好,像屎一樣,本來對此抱有很大的期望和好感度,但經過一整天的學習,完全失望了,這門語言中間有各種的奇怪的語法和反直覺性的東西

特點

優點

在jvm的基礎上特別在安全性做了很大的改進。。很多的特性基本杜絕了一些不安全的編碼,並且做了類似 RASP 的安全方案。
官方也宣傳說對Java 100%兼容.

先說優點吧,免得說我在胡亂噴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 並沒有 swap的方法可以通過extension的特性靈活加入

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的話。。那么其他人如果想要重寫某個方法,就沒有辦法

及其臃腫的結構
真的不是我想黑他。
在為了安全性的考慮上,它在普通class 的基礎上加了 一個 open的結構
所有想要繼承的類必須加上open ,這導致我不知道怎么繼承原始的類比如 Int
還有諸如data ,object ,interface, abstract 這樣單獨的東西。和原來Java 簡介明了的class 和 interface 有着很大差別。。如果不是認真記憶,很容易把這些混雜

為了增加所謂好的特性加入了非常多的語法
比如generics,為了防止溢出或者 UnMatchClass 這樣的錯誤,特別又(ps:TMD到底還有多少語法)加了 T in out等語法

 fun get(index: Int): T { /* ... */ }
 ...
 fun copy(from: Array<out Any>, to: Array<Any>) {
 // ...
}

同時混入了類似 Object-c中的delegation的東西。。。。。

總結

整體沒有設計哲學,就像一個胡亂的七巧板一樣有各種形狀的單個模塊(我個人偏向類似Lisp的語系),為了加入好的特性而像拼湊積木一樣加入各種語法,大大加大了學習的成本和編寫的成本。最后在使用的時候往往出現各種問題;和Java的兼容性並不如宣傳說的那么好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM