如何評價 Kotlin 語言?

時間 2021-05-05 12:49:55

1樓:冰雪情緣

按照歷史長河來說,Kotlin 是可以在 Android站穩腳跟的,有點類似IOS開發的Object-c, swit...

但是Kotlin想流行起來,很難,很難,很難.. ...

這種感覺就像QT.. ..., AS... ..只能在自己領域的掙扎.

如果是搞 Android開發的同學,建議學一手Kotlin.

但是在我眼中,語言只是工具,只是實現我們想法的工具而已,主要是看這個工具能不能便捷,安全,快速的完成我們的想法。

2樓:深海

Kotlin 不是 Swift on JVM, 我特別討厭這種說法, 這是對 Swift 的侮辱...

Swift 有 sum type, Kotlin 用 sealed class 來模擬, 但易用性真的不敢恭維, 寫起來要加不少莫名其妙的字元.

// Kotlin

sealed

class

Expr

data

class

Const

(val

number

:Double):

Expr

()data

class

Sum(

vale1

:Expr

,vale2:

Expr):

Expr

()object

NotANumber

:Expr

()fun

eval

(expr

:Expr

):Double

=when

(expr

)fun

main

()這是 Swift 的寫法 :

// Swift

indirect

enum

Expr

func

eval(_

expr

:Expr

)->Double

}print

(eval

(.sum

(.const

(1.0),.

const

(2.0

))))

// --> 3.0

Swift 有元組, Kotlin 沒有.

// Kotlin

val(

state

,msg)=

404to

"not found."

val(

state

,msg)=

Pair

(404

,"not found."

)println

("error: $state ($msg)"

)這是 Swift (以及所有正常語言) 的寫法 :

// Swift

let(

state

,msg)=

(404

,"not found."

)print

("error:

\(state)(

\(msg))"

)Swift 有良好的陣列 / 詞典字面量

// Kotlin

valcube

=arrayListOf

(arrayListOf(1

,2,3

),arrayListOf(4

,5,6

),arrayListOf(7

,8,9

))Swift 裡是這樣的

// Swift

letcube=[[

1,2,

3],[4

,5,6

],[7,

8,9]]

Swift 能自定義運算子 (包括字首, 中綴和字尾, 優先順序), Kotlin 不知道是不是覺得這個東西複雜度太高, 只能允許中綴表示法.

// Kotlin

infix

funDouble

.sumOfSquare

(rhs

:Double

):Double

valx

=2.0

sumOfSquare

3.0Swift 中是這樣的

// Swift

infix

operator

*+*func

*+*(

lhs:

Double

,rhs

:Double

)->Double

2.0*+*

3.0Swift 有 inout 引數, 可以直接改變函式的引數, 而 Kotlin (很多語言也) 沒有

// Swift

infix

operator

<->func

<-><

T>(lhs:

inoutT,

rhs:

inoutT)

var(a,

b)=(

1,2)

a<->

bprint

("a, b = \(a

), \(b

)")// a, b = 2, 1

Swift 中運算子可以直接作為高階函式引數

// Kotlin

valsum

=arrayListOf(1

,4,5

,2,3

).reduce

// 15

Swift 裡可以直接用裸的 +

// Swift

letsum=[

1,4,

5,2,

3].reduce(0

,+)// 15

而 Kotlin 裡那些語法特性, Swift 裡當然有 :

擴充套件方法 extension

extension

Int}}3.

times

高階函式, 語法和 Kotlin 十分類似.(1.

..100

).map

.filter

空安全和 Optional

letx

:Int?=

nilx

?.distance(to

:5)// nil

lety=x

??0// 預設值

ifletit=

x(完)

3樓:FRANK

了解了一下Kotlin又了解了一下Scala。發現:Kotlin除了空安全之外全部被Scala吊打。

Scala的型別推斷和集合模擬Kotlin強的不是一點半點。

4樓:崔夢

子彈不過是比石頭更堅硬了而已,有什麼好鼓吹的?但你知道這個階段發展用了多少萬年嗎?你的一句而已真是讓人貽笑大方!

某些人啊以為這一輩子就可以靠思想工作了,你的所謂思想又是什麼?GOF拳腳?OO思想?還是演算法?其實你也沒乙個敢說精通的。你所說思想到底是什麼?

你說語言只是工具,但工具是子彈還是石頭可影響了人類上萬年的進化成果,工具的進化必然引起人類思想認知的進步,而且思想的認知受工具影響的認識,沒有航天活動沒有衛星拍照,有多少人會在直覺上承認地球是圓的?

知乎大V,丟人現眼!

5樓:Sugar

「我王境澤就是餓死,從這裡跳下去摔死,也不寫一行kotlin」

「嗯~真香,這空安全真踏實,這lamda箭頭真亮,這迴圈真簡潔。」

6樓:大師之劍

語言只是解決問題的工具,何必要鄙視任何一門呢。新的語言必然是踩著老語言的肩膀才能站得更高,當某一天老的語言退休時,希望我們還能記得它們做出的貢獻。

7樓:

讓我想到歷史上很多的東西。特別是atm,很悲催的乙個東西。在傳輸層,和WDM競爭失敗,在網路層,和IP競爭失敗,在區域網,和乙太網競爭失敗。

8樓:柳凌峰

補充更新

kotlin和swift有點殊途同歸的意思。

最近在看kotlin時一直有乙個問題很好奇,jetbrain那麼牛,為什麼不乾脆在jvm上寫乙個python,然後乾掉tab保留括號,直接完成生命大和諧。

9樓:禪與程式設計藝術

《 Kotlin極簡教程》 (機械工業出版社)http://www.

10樓:

/*** `if` is an expression, i.e. it returns a value.

* Therefore there is no ternary operator (condition ? then : else),

* because ordinary `if` works fine in this role.

* See Control Flow: if, when, for, while

*/fun main(args: Array)

fun max(a: Int, b: Int) = if (a > b) a else b

Use a conditional expression.kt

11樓:

Kotlin 本身語法特質還是不錯的

不過我覺得需要乙個像 Ruby China 一樣的論壇版來整合社群資源, 於是我決定和群裡的大佬合夥搞乙個 https://

kotliner.cn

問答版blog.kotliner.cn部落格

Kotlin 作為 Android 開發語言相比傳統 Java 有什麼優勢?

萬宵 我說了乙個kotlin的 毛病 吧 kotlin library暴露的方法如果帶有預設引數,在後續給這個方法增加預設引數的時候,會導致新的kotlin library和舊的二進位制不相容,所有依賴了這個library的地方都需要重新編譯。只能新增方法,不能在原方法上修改。預設引數帶來的優勢蕩然...

如何評價Kotlin1 3正式版發布?

龍小龍 我主要關注的是協程api,所以我只針對這部分來說說我的感覺。Coroutine終於不用experimental了,煩人的警告沒了 可是我從0.2x.x的版本遷移到1.0.1的庫時發現api改了很多,很多的CoroutineBuilder從頂級方法變成了CoroutineScope的擴充套件方...

如何看待Kotlin 桌面 UI Jetpack Compose for Desktop?

昱彧 老實講並不看好,學kt的以Android開發居多,Compose這玩意現在正式版都沒出,你看flutter也鼓吹桌面ui現在也就那樣 戀貓 先聊點體外話 隨著技術在乙個領域的飽和,無論是為了 KPI 還是為了謀求新的發展,橫向開始支援新的平台就成了一種必然。同時技術的發展只會讓門檻越來越低,低...