Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

點擊上方“CSDN”,選擇關注

關鍵時刻,第一時間送達!

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

這兩天,Bruce Eckel 來到中國,與我們分享了關於編程語言的一些思考,並講解了 Kotlin 的一些優勢。本文在此分享完整演講稿,希望能讓你開腦洞、漲姿勢!

以下為演講全文:

Kotlin 是怎樣為你提高效率和生產力的?

大家經常會問我,Java 之後的繼承者會是哪一門語言?我給出的答案可能是帶有偏見的,因為我在寫這本關於 Kotlin 的書《Atomic Kotlin》,所以從我的個人想法來看,Kotlin 將會成為 Java 的下一個繼承者。這就是今天為什麼我來分享這本書。

這個就是這本書的封面,我和 Svetlana Isakova 共同寫了這本書。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

因為 Svetlana 本身是 JetBrain 這個組織裡面的一個負責人,她負責測試很多的功能,所以她能夠保證這本書裡面的內容都是非常準確的。這本書最後的出版大概會在今年秋天,和關於 Kotlin 的一個在阿姆斯特丹的大會同時進行。

今天主要是給大家講一講我這個書裡面的幾個例子,主要是給大家一個整體的對這門語言的感覺。Kotlin 這種語言是基於對象和函數混合的這樣一種語言,它跟 Scala 很像,但是 Scala 更多是一種實驗性的語言。Kotlin 側重於可供生產使用,能夠讓大家編程的整體體驗感覺更好。

大家可以發現,Kotlin 這種語言它是有修飾函數,然後它的標識符是在 fun 這個函數後面,後面會緊跟著一個冒號。這個方法首先是從 fun 這個關鍵詞開始,接下來是這個函數的名稱,然後是它的參數、冒號,以及這個參數的類型,冒號之後是這個方法返回值的類型。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

大家看第二個函數,我覺得這種風格的編程方法可能是來自於 Scala,首先是 fun 這個關鍵詞,然後是函數名,接下來你用一個等號表達這個函數的具體內容。這是我們第一次看到這種類型推測,和第一個方法進行對比,這個函數沒有返回值的具體類型,編譯器在看到這個方法具體構造的時候就能夠知道這個返回值是一個 String 的類型。這個地方大家可以注意到,這是和 Java 很不一樣的一點,就是我們不需要一定有一個類,這個地方我們只要確定一個方法,然後把它帶的參數全部列出來,然後我們就可以進行運行了,不需要一個類去包裹它。

大家可以觀察到,print 的方法也會變得簡單了很多,大家不用再打“System.out.println()”,這個地方很簡單的用 println()就可以打印出來。剛才那個 PPT 裡面也提到了 Java 的泛型,Kotlin 泛型,但是它會比 Java 的更簡單,我今天不會給更多具體的細節,但是大家可以自己去學習一下。

接下來是一個 for 循環的例子,不像 Java 會寫很多的參數和條件在 for loop 裡面,寫出 1..10 就可以循環從 1 到 10 的所有整數,這個讓我想起類似 Python 的這樣一個風格。Print 這個語句大家可以看到它是冒號裡面有一個$,這樣會把 for loop 裡面具體的數一個一個寫入 String 裡面去,這個讓我想到了 Python 最新的版本 3.7 是如何處理 String 這種類型的。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

大家不要忘記,今天講授的例子都來自於這本書,這本書裡面我們創造的一個庫,是專門負責測試的庫,就是 atomictest.eq,通過簡單的一個命令行就可以對你的代碼進行測試。Listof()這個方法創造了一個 list,大家看一下,這個地方我們沒有對 list 這個變量的類型做出任何的說明。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

在 Kotlin 裡面一共有兩種變量,一種叫做 val,一種是 var。現在我們看到的這個是 val,這種是不可變的標識符。另外一種 var 是可變的標識符,我們可以對它進行重新賦值。在大多數情況下,我們會使用 val 這種不可變的變量,這也是函數類編程的一個基礎思想。這個地方 list 我們沒有給它任何具體的類型,編譯器能夠推測它的類型是什麼,在大多數情況下我們都是可以這樣去做的,不用告訴他類型是什麼,有一種例外就是在方法帶的參數裡面我們這個地方是要標示出它的類型的。

lst[1],這是一種創造索引的方法,在這個時候我們對“1”,就是 1 號這個元素進行了索引,然後通過 eq 這個測試方法測試它是否等於 88.3。這種方法也是 Kotlin 作為 DSL 一個非常好的語言的一種展示方法。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

接下來大家可以看到也是這種函數類編程的一種自己特有的方式,lst.reversed(),還有 lst.sorted()這兩種其實並不會對原來的 list 進行修改,它會創造兩個新的 list。這也就是為什麼函數類編程是比較安全的一種方式,我們儘量的不要去修改原來的數據結構。這個是我們在編程當中經常會遇到的一個問題,就是當一個對象是在被共享的時候它的狀態發生改變的時候我們是比較難控制的,所以我們希望儘量不要去修改原來的變量。Reversed(), sorted()這兩個方法創造了兩個新的 list,還想再強調一遍。同時,大家看到的這五種方法,比如,max、main、sum 等都是 Kotlin 的標準庫裡面給大家提供的方法,大大家不需要自己再重新寫了。

類的寫法也被大大的簡化了,現在看到的 class NoBody 後面沒有跟著大括號,裡面也沒有具體的內容,這是一種很像 Python 的寫法,這也是 Kotlin 自己的一個理念,就是說如果你不需要做這樣的事情,它不會強制你去做。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

大家可能也注意到了,Kotlin 不要求大家打分號,這是我不太喜歡 Java 的一點,就是 Java 本可以也不用寫分號的,我認為這是 Java 語言的創造者偷懶,所以導致我們現在必須要多打一個分號。我本人是很討厭讓我去做本可以去省略的一些事情的。

這個類 SomeBody 它的內容就是它的構造器,就是它的構造函數。在這個構造函數當中,創建了一個屬性,就是 name,在這個地方再一次的就是我們沒有去給它一個類型,而是通過類型推測來知道它是一個 String。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

第三個 class EveryBody,這個地方的時候就是我們創建了一個 list,裡面包含了三個 SomeBody 這個類,大家可以注意到,這個時候我們在構造一個新的 SomeBody 的時候沒有用像類似 Java 一樣的關鍵詞 new。大家就會注意到 Kotlin 這種語言,它的很多的細節都是從其他的語言中獲取靈感的,它其實是集很多語言的優點於一身。

Badger 這個類大家可以看到它必須強制的帶兩個參數,一個是 id String 類型,一個是 age,是一個 Int 的類型,就是 Kotlin 你在構造函數里面的時候必須要說明它的類型是怎麼樣的,因為編譯器是無法推測出你這個帶的參數的類型是什麼樣的。所以,這是一個非常特別的一個地方。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

這邊我們創建了兩個屬性,一個是 name,一個 age,它們兩個的賦值來自於構造函數的參數。接下來可以看到我們這邊有一個是 override 的方法,叫 toString,這個跟 Java 的 toString 是一樣的,這是 Kotlin 的一個特點,就是它其實希望能夠跟 Java 非常緊密的結合,非常緊密的能夠互通的。在 Kotlin 的時候如果我們想要去 override 一個方法,是必須要加上這個關鍵詞的,要不然這個編譯器會報錯。

這是另外一個類,叫 Snake,它也有自己的變量和 override 的一個方法,大家看它和上一個 Badger 之間的區別就在於 Badger 的構造函數里面帶了兩個參數,但是 Snake 這個構造函數里面用到了 var 這種變量。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

還有一點不同的就是在 Badger 裡面的時候我們是必須要明確的寫出來,明確的定義剛才的兩個,那個裡面的 var、val,然後在 Snake 裡面我們不需要把它明確的定義出來,但是在 toString 的方法裡面也可以調用到它,因為它是屬於 Snake 這個類裡面自己的變量。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

在這裡 if 被用作一個表達式,這個方法 check()通過一個等號來調用這個表達式,最後的結果就是如果是“是”就是 warning,如果是“否”,就是 OK 這樣結果。

我想再重申一下,Kotlin 從它誕生的那個時候我們就希望它是能夠非常緊密的和 Java 能夠結合在一起的。所以,你可以創造這樣的一個 Kotlin 的類,但是從 Java 的代碼當中調用這個類,同樣的你也可以在 Kotlin 的代碼中調用 Java 的類。這樣做的原因是,我們希望使用 Java 的編程人員能夠從他們代碼的很小的地方開始試一試 Kotlin,從一些小的地方進行修改,這樣不需要大費周章的把整個代碼全部改成 Kotlin 這種語言。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

在這個例子當中,我想說明的是關於泛型這樣的一個例子。大家可以看到,numbers、strings 之後都有一個冒號,會有一個它們具體的類型,你在做 Kotlin 編程的時候可能會遇到你不得不,或者你希望去說明它的類型是怎麼樣的,有時候你不得不去說明,因為你不說明 Kotlin,就會給你提示你是錯誤的。

Kotlin 也支持可變參數這種類型,它通過這個關鍵字 vararg 來支持。在這個函數里面,“s”是一個 string,“ints”它是可能有多個 int 組成的這樣一個變量。在這個例子當中,ints 就是一個數組,我們可以用 for loop,然後說 in 這個數組,然後把數組裡的每一個進行循環調用,然後把它打印出來。下面這個 main 函數就是調用了上面的這個 vararg 這個方法,你可以看到我在後面打了多個質數。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

在這個例子當中,我是想給大家看一下這三個引號這種寫法,三個引號幫我圈起來文本的區塊,在這種寫法當中,比如說像換行之類的,或者單引號之類的,都會被這個寫法照顧到。我非常確定這種功能,這種寫法是來自 Python 的,因為我只在 Python 見過這樣的寫法。

接下來我們調用了 split 這個方法,然後在裡面代入了一個正則表達式,這個 regex 正則表達式是直接來自於 Java 的庫。大家都很熟,這個正則表達式我們是在尋找一個或多個空格,然後通過一個或多個空格把上面的這個 String 進行分隔。而這個最後返回的結果可以是一個 list,也可能是一個數組,比如這個數組的情況下,接下來我們調用 sort 的這個方法把它進行排序。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

接下來大家可以看到一些 Kotlin 自帶的一些方法,比如說,我們剛才把這個顏色 colors 這個數組進行排序,排序之後我們可以調用 toSet 這個方法,把它變成一個集,然後下一個操作是減去所有裡面空白的格。

接下來我們可以把兩個 iSet 加在一起,這邊應該它已經變成了一個集,所以我們可以這樣去做,這個也是很好的去解釋 Kotlin 的一個特性,就是它能夠重載一個運算符。這個“+”和上面這個“-”都是重載運算符的一個例子,因為它已經是一個 Set,一個集合,所以 iSet+iSet 最後的結果還是等於 iSet,所以這兩行打印出來的結果應該是一樣的。color.toSet 這個方法創造了一個不可變的 Set,MutableSet 的 Set。

接下來我們可以調用 ToMutableSet 這個方法,重新創造一個新的 Mutable 可變的一個集。接下來我這邊又是有一個運算符的重載,就是“+=”,這個時候我們把 color 這個數組切割,讓它從第 3 到第 5 這樣序列的三個字符,然後加到 mSet 這個可變的集合當中。

接下來給大家展示的是如何能夠確認一個詞語是在一個集合當中,有兩種方法,一種是用 in,或者是用“.contains”這種方法能夠確認。大家可以看出來,第一種方法,in iSet 會比第二種讀起來更好讀,這也是為什麼我覺得 Kotlin 是一種很好的作為 DSL 的一個語言。

在這邊我做了一個例子,創建了一個 map,大家可以看到 to,這個 to 不是一個關鍵字,是一個 Kotlin 作為 DSL 這種方式創造的一種方法,這邊我把一個 string 和一個 Int 的映射關係存入 map 當中。理所當然,我們也可以看到,我們可以把它的一個 key 放進去,看它的值是多少,或者把它所有的 key 全部列出來,或者把它所有的值全部列出來。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

接下來我把這一個 map 裡面的每一個 Entry 對象循環一遍,Entry 是作為一個類定義出來的,然後我把每一個打印出來,Entry 這個類有兩個自帶的變量,一個是 key,一個是 value。我還想再給大家看一下,在這個 for 循環裡面,我們沒有說 Entry 包含的值是什麼類型的,編譯器在這個時候它能夠知道你現在是在每一個的檢驗 map 裡面的這個值。所以,它會給你自己去推測它的類型。

接下來我給大家看一下這種 Data class,Data class 是來自於 Scala,但是在 Python 的 3.7 版本中我也見到了類似的這種表達方法。在 Scala 裡這種表達方法叫做 case class,case 類。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

Field 是 Kotlin 裡面一個特殊的提示符,在這個情況下,如果把“i”這個變量改名字了,叫做“j”或者其他的什麼,但是你並不需要改變 Field,因為它能夠通過 Field 這個特殊的關鍵詞,能夠對這個類的變量,這個“i”進行修改。當大家看到這個方法的時候,我們創建了一個 GettersAndSetter 這個類,我們現在要調用“gs.i”,這是一個 Set 的方法,或者我們做一個 Println(gs.i), 這是一個 get 的方法,因為大家可以看到,剛才 get() 和 set 裡面都有打印,所以,在我們在做這兩行操作的時候,那兩個方法都會被調用,然後我們也會看到相應的打印。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

今天給大家展示的只是 Kotlin 的冰山一角,其實還有非常多的內容。我其實是希望大家通過今天的這個展示能夠了解 Kotlin 語言背後的原理,希望大家作為編程人員能夠編的更順、編的更快。

在我這本書《Atomic Kotlin》裡面有非常多這樣的例子,為什麼我叫做 Atomic Kotlin(原子 Kotlin)呢?就是我們希望把每個章節都編的足夠小,不能再被拆分了,裡面包含這樣的小例子,讓大家最快的學習到這種語言。我們管這本書裡面的每個章節都叫一個原子。我希望今天的這個演講以及這本書能夠吸引你們去漸漸的嘗試使用 Kotlin。

Kotlin 或將取代 Java——《Java 編程思想》作者 Bruce Eckel

關於 Kotlin 的現場問答:為什麼 Kotlin 比 Java 更好?

Q1:我是一個 Android 開發者,我平時發現 Java 需要通過 jvm 生成 Native 代碼跟底層進行交互,我之前看過 Kotlin 可以直接編程二進制碼,可以繞過 JVM 這一步,我想知道更多這樣的細節。

Bruce Eckel:在 Android 上編程的同學可能都有了解,Google 從去年開始把 Kotlin 作為 Android 編程的第二個語言,但其實我個人認為,相對於 Java 來講,Google 更希望用 Kotlin 作為他首要的 Android 的編程的語言。我個人來講,其實並不是希望對 JetBrains 這個組織的動態做出發言,我更多希望大家去了解 Kotlin 的這門語言。

我可能不會把所有細節都講的很正確,我現在理解,一共有兩件事情正在發生,第一件事情就是我覺得 Google 正在推廣關於 native code 的生成。第二件事情就是希望能夠通過單一源的代碼能夠生成 native code,能夠給 iOS 和 Android 的同時使用。在這個過程中會遇到非常多的困難,因為需要做非常大的抽象才能把這個代碼給兩個平臺都同時使用,有一些可能就無法完成,但大多數的應用都是能夠實現這樣的一個單一源代碼。

同時,我覺得 Google 那邊也是在致力於用單一源代碼提供給更多的平臺,我不知道這件事情什麼時候會發生,或者怎麼發生,但是我非常期待這件事情。

Q2:我是讀您的書長大的,這本書之前是 C++編程思想和 Java 編程思想,我覺得最重要的不僅是語言的本身,可能還是背後的十多年前的這種面向對象的東西。所以,您的那本書是 Kotlin 語言的本身,未來您對於設計的這種方面,比如說,現在微服務比較火,關於這方面您有什麼樣的想法?

Bruce Eckel:我非常感謝這個問題,但是我打算先把這本書好好寫好。我現在還不想想的那麼遠,因為這本書已經完全佔據我的頭腦。但是,你的這個想法非常好。

Q3:我想問的問題就是剛才您說過您的語言 Kotlin,裡面涉及到我們寫的編程的 class 類,class 類裡面涉及到之前 Java 一直垢病的一個 Setter 和 Getter 方法,您這邊簡化了一個方式,不用考慮是是 set 還是 get,我們直接複製,讓編程直接執行 set 和 get 獲取到我們所需要的結果。我想知道的是,當您決定了您這個編程想法,您怎麼會覺得您是否失去了這個效率,而獲得了更好的體驗,是什麼讓你覺得您的選擇是正確的?

Bruce Eckel:我剛才的這個例子只是非常初步的展示了 Kotlin 的語法。我認為,這樣做的好處主要有兩個原因:第一個原因,因為當大家做 getter、setter 這個方法的時候其實只是想訪問類裡面的一個值,並不是想調用一個方法。第二,我做這樣一個語法設計的時候寫起來會簡便很多,方便很多,這是最主要的原因,我希望大家自己更多的去探索。

Q4:Kotlin 我也看過一些,也寫過一些代碼,因為我寫 Java 已經寫了 13 年。所以,處理問題的時候也是用這種 Java 的思維這樣去寫代碼。然後,我會發現自己寫出來的代碼雖然是用 Kotlin 來寫,但是它的風格仍然是 Java style,我想了解的是怎麼才能寫出具有 Kotlin style 這樣的風格的代碼,怎麼能夠用 Kotlin 的思維去處理我的問題,去分解我的問題。

Bruce Eckel:當大家剛從 C 轉換到 C++ 這種語言的時候也面臨過類似的問題,雖然在寫 C++還是 C 的風格。我其實會建議你多去學習和了解函數式編程,因為 Java 強調的是面向對象的編程,我們會非常熟悉面向對象的這種思考方式。但是,函數式的編程如果我們更多的瞭解它,會以它的這種方式去思考。我在寫這本書之前,寫了關於 Scala 的這本書,Scala 是一門函數式編程的這樣一種語言,同樣還有類似像 Elm 這樣的編程語言,我在做這件事情的過程中,通過幾年的學習漸漸的理解了函數式編程這樣的內涵。如果你認為主要是面向函數式編程這樣的風格困擾著你,那就是應該你著重去學習的部分。

Q5:Java 是企業級開發比較好的一個選擇,我就想知道如果我們選擇 Kotlin 能比 Java 帶來哪些優勢?

Bruce Eckel:首先,這是一個非常大的問題。其實我這本書的主要目的也是為了回答你這樣的問題,就是為什麼 Kotlin 會比 Java 更好。我其實建議大家在讀書的過程中自己去尋找這個答案,一邊讀就會靈光一現,突然想到這個原來就是 Kotlin 比 Java 更好的原因。比如說你能寫出更簡潔的代碼,或者效率更高,或者你的代碼更容易被大家懂,這是我希望大家在學習這個語言當中自己去摸索,自己去體驗的。

Q6:考慮到剛才那個問題我延伸一下,Java 現在團隊開發的話,如果換到 Kotlin,看單個的代碼會容易理解一些,但是對於從系統設計的這個層面來講,還會那麼簡潔嗎?

Bruce Eckel:首先 Kotlin 這個語言的發明就是為了簡化工作量,我自己其實並沒有真的實際做這樣的一個大的工程,所以我無法具有權威性的去說這個東西一定就是好的。但是,我認為,這個語言因為它的來源就是希望幫大家簡化工作量,所以我認為應該是沒有問題的。很多編程語言我希望最終解決的問題就是如何把你的項目能夠越做越大,能有延展性。Kotlin 這個語言從其他編程語言當中吸收了很多的精華,其實就是希望能夠解決這樣的問題。

▌應該如何關愛大齡程序員?Python 到底有什麼好?

Q1:Java 未來的趨勢是什麼?它會如何演變?會被替代嗎?如果會的話,將發生於何時,誰又是它的繼承者呢?

Bruce Eckel:在 Java 8 裡面已經發生很多改變,Java 8 進行了一些改造,如果你要學習 Java 8,還是有很多困難需要面對。Java8、Java9、Java10 也都會在後面的幾個月中進行一些探討。我在新書裡面對 Java9、Java10 會做更多的闡述。但是我的理解是,Java 是很難再被改變的更多了。當我在寫《Atomic Scala》(原子 Scala)這本書的時候,我覺得 Scala 有可能會成為 Java 的一個繼承者,但是我不是特別的確定。但是我在 Kotlin 出來之後,覺得 Kotlin 可能會比 Scala 更有希望去替代 Java。我們都知道 Java 語言有很多的惰性,有很多難以改變的東西,但是 Kotlin 的出現就可以跟 Java 進行一個無縫的切換和整合。Kotlin 現在正在悄悄的溜進一些 Java 的工程,會使 Java 開發變得更快。

Q2:現代技術發展的如此迅速,請問 Bruce Eckel 是如何保持不斷更新自己的技術庫呢?

我覺得在語言方面,我更多關心的議題是:第一,如何讓開發者更多產。我自己更關心的是,第一,多產。第二,多線程的問題。第三,錯誤,如何發現跟錯誤相關的一些議題。我並不能全面的跟隨所有科技,你知道這樣做是不實際的。

Q3:請問 Bruce Eckel 對大齡程序員有什麼職業建議?

Bruce Eckel:自己開公司。不管怎麼樣都是需要不斷的去學習,無論是初級還是高級程序員。有一段時間我會特別的痛苦特別的掙扎,我會覺得自己做不了或學不下去,但是我同時腦子裡也會不停的告訴自己,一定堅持學習。有時候我覺得可能真的是已經年紀大了,或者可能真的已經不夠聰明瞭。但是,無論如何我腦子裡的聲音都在支持自己不斷的學習,堅持下去。

Q4:請 Bruce Eckel 介紹一下您在不同場景下選擇不同編程語言的動因,比如 Java、Scala、Python 等。

Bruce Eckel:坦白來講,我最喜歡的語言是 Python。因為基本來說,每當我有問題需要被解決的時候我發現 Python 是最快可以給我結果的一個語言,所以我很喜歡,很享受 Python。當然,現在情況發生了一點改變,我覺得 Kotlin 是一門非常好的語言,所以現在 Kotlin 是我的第二喜歡的。我已經可以想像出來一個畫面,我用 Kotlin 寫一些我的項目,但是目前只是一個想象的東西。底線就是每當我有問題,我覺得需要被解決的時候,我第一個想到的就是 Python。除此之外,從 Python 社區發展開始,我就在他們的官方會議上有過兩次的筆記分享,我覺得我對於 Python 在方向上的把控上是有一定的影響力的,而且我發現 Python 的社區是我見過的,我覺得這個世界上最友善的社區。

但是,回到之前說的那個話題,我覺得語言方面我最關注的是多產這一個方向。所以,我覺得我在任何一個語言裡都學到了很多東西。每一種語言都有它的優勢和劣勢。雖然我自己偏好於 Python,但是我並不建議每個人都去用 Python,我更多的是建議每個開發者都找到合適自己解決問題的那個語言,不要固定或者侷限於某一種語言,我發現當我去學其他的語言的時候,我對於編程的能力也是在不斷的擴展的。

Q5:我剛才聽到 Bruce Eckel 說您對 Python 比較喜歡,第二喜歡是 Kotlin,Python 在機器學習和 AI 方面有很多的用處,比如說 Python Machine Learning 比較好,我想知道 Kotlin 在 Machine Learning 方面有什麼優勢,比 Python 更好一些。

Bruce Eckel:Scala 裡面有一個關於機器學習的一個庫,我覺得 Kotlin 有可能也會有類似的這樣的一些庫。我主要解釋一下為什麼 Python 會作為機器學習非常好的一種語言,因為 Python 把其他語言做了一個封裝,調用其他語言做的包。很多的數據科學家他們其實是不希望學習過於複雜的編程語言,能夠把他們關於數據方面處理的智慧進行封裝起來,通過 Python 來調用這樣會方便很多,這也是為什麼 Python 這幾年這麼流行的原因。

徵稿啦!


分享到:


相關文章: