我发现我的Java重拍了!
在一月份,我寫了一篇文章,介紹了一些我希望在Java語言中看到的變化,這些變化會讓我更加喜歡它(并使它變得更現代)。 很多人建議使用許多JVM語言,但我基本上不予使用,因為這不是我想要的。 我希望Java在這些方面有所不同,因為我不太可能說服工作場所讓我使用Java以外的東西。 此外,建議的大多數JVM語言都具有一些語法思想,這些思想對我來說很難理解。
但…
但是,后來我找到了Kotlin。 這是由JetBrains,IntelliJ,PyCharm和其他一些IDE和工具的創建者制作的JVM語言。 在大多數情況下,我覺得這些家伙讀懂了我想從我的語言中得到什么。 他們錯過了我帖子中的一些內容,但是卻有很多我忘記或什至沒有想到的內容。
與我的舊清單比較
首先,我們將把他們做了什么和沒有做的與我以前的帖子中的列表進行比較。
擺脫分號
Kotlin并非沒有分號,但是在極少數情況下需要它們。 在大多數情況下,您可以在行尾省略分號。
卸下花括號
可悲的是,他們沒有這樣做。 我住
操作員超載
是的,他們有很多操作員重載。 與Python不同的是,它們具有遞增和遞減運算符,正負標記以及否定運算符(例如python的__bool__() ,但具有自動轉換功能;相反,它們還具有用于創建一系列對象的運算符( 1..3 ),但兩個數字在Kotlin中都應包含在內,盡管通常更容易閱讀,但在很多時候都可以進行更多中間計算,這就是為什么許多語言都希望將末尾包括在內。
最后,您定義自己的“運算符”,但是它們必須是布爾值中綴運算符。 實際上,您沒有定義自己的運算符,因為在使用一個參數調用方法時,該語言提供了一點語法上的好處。 對象a的任何方法md (通過參數b調用)(即a.md(b) )都可以更簡單地寫為a md b 。
元組和/或數據結構
從某種意義上說,Kotlin同時具有這兩種功能,但從某種意義上講,兩者都沒有。
它們有一個名為Pair的類,可以用作2元組,并且它們有一個不錯的語法糖系統,可以將任何類都轉換為一個已命名的元組。 您可以通過字段的位置或字段名稱來引用它們。 有關更多信息,請查看其有關Multi-Declarations的文檔。
至于數據結構,他們走了帶有屬性的類路線,這很好而且很花哨。 但是,關于它們的數據結構類的真正好處是定義它們的簡單性。 一個示例聲明是data class User(val name: String, val age: Int) 。 這不僅為您設置了所有屬性,還自動定義了equals() , hashCode() , toString() (形式為"User(name=John, age=42)" ))和一個特殊的copy()功能,這是所討論此處 。
物產
Kotlin當然具有屬性。 實際上,使用屬性比擁有簡單的公共字段要容易。 它們的屬性為您自動創建后備字段,其名稱與屬性相同,但下劃線開頭。
默認為public
說到方法,情況就是這樣,我很高興。 好極了!
類型對象
是的,他們已經刪除了直接訪問基元的權限,并且您僅使用類型對象(由于使用了空安全措施,因此它比平時更安全,我將在稍后介紹。
列表,字典和集合文字
Ko,Kotlin沒有收集集合文字。 令人遺憾的是,但是,借助Kotlin的某些功能,您可能會創造出非常簡單的方法來內聯其創作。
我忘記的事情
這些是我知道我想用Java編寫的幾件事,但忘了放在舊帖子中
控制流表達式
當可以將一種語言中的控制流結構制成表達式(返回值)時,我喜歡它。 當然,Java(和許多其他語言)具有三元運算符,可以將if-else塊看作是表達式,但僅限于單個“ if”檢查。 它不允許沒有難以理解的嵌套的“ else if”塊。
但是Kotlin不會因為if塊而停下來。 它們還執行try-catch表達式和“ when”表達式(在下一節中說明)。 使用try-catch作為表達式時,可以縮短一些需要在計算周圍使用try-catch塊的分配。 所以代替
Integer a; try {a = Integer.parseInt(input); } catch(NumberFormatException e) {a = null; }你可以輸入
Integer a = try { Integer.parseInt(input); } catch (NumberFormatException e) { null; }顯然,您不需要將它們用作表達式。 您仍然可以按照自己的意愿使用它們。
模式匹配
之前提到過“ when”表達式,但是現在我們真的要深入探討了。它在Kotlin中用于模式匹配,并使用更簡化的語法替換了switch-case塊,這些語法也可以像if-else表達式一樣工作,但用途更廣。 它可以與切換塊類似地起作用,因為它可以繼續到下一個“ case”,但是必須使用顯式的continue命令來完成(現在大約是時候“ switch”的默認設置為不繼續流動,但是即使這樣不需要那么多的東西,因為您可以簡單地用逗號分隔多個可能性,使它們全部都采用同一分支。請在此處查看 。
它不是某些功能語言定義的模式匹配,但據我所知,這是您可以在OO語言中做到的最好的選擇。 我也傷心地報告說,盡管有體面的模式匹配,這是偉大的遞歸函數,Kotlin似乎并不具有尾調用優化。 然而(?)。 Kotlin還很年輕。 也許它將使它走到盡頭。
類擴展
無檢查異常
我當然不介意拋出可能的異常的聲明,也許是編譯器警告讓我們知道我們沒有處理或聲明可能的異常被拋出,但是我當然不想被強迫“處理”。 ”實際上不會引發的異常。 所以,我很高興Kotlin沒有任何東西。
命名和默認參數
當您可以為參數使用默認值時,重載函數幾乎是沒有意義的;當參數的含義不明顯時,能夠在傳遞參數時命名參數可以使讀取函數調用更加容易。
我從未意識到的事情
現在,我將列出Kotlin提供的一些最酷的東西,我什至從未意識到這是一個好主意。
空安全
除非對象的類型明確聲明其為null,否則不能將其設置為null。 在Kotlin中, List類型的對象不能為null,但是,如果它是List?類型的List? , 它可以。 這以及一些簡單的語法使您可以安全地處理可為空的對象,從而使語言變得更加令人愉悅,幾乎消除了NPE的可能性。
作為表達式功能
這個不是很大,但是它可以減少簡單的功能,以清晰的方式占用更少的空間。 如果函數的主體只是一個表達式(無論是簡單表達式還是“ when”表達式之類的復雜表達式),則可以跳過主體周圍的花括號,而在其前面加上= 。 例如:
fun powerOf(number: Int, exponent: Int): Int {return Math.pow(number, exponent) }可以改為:
fun powerOf(number: Int, exponent: Int): Int = Math.pow(number, exponent)這沒什么大不了的,但我喜歡它不僅可以讓您切換=的花括號,而且還可以讓您跳過使用return語句。
奧托羅
所以,這就是我對Kotlin的熱愛。 您應該在他們的官方頁面上查看一下,并告訴我您的想法。 我對此感到非常興奮,并計劃在完成當前項目后切換到該項目,您可以期望下周在我的帖子中聽到一些信息。
翻譯自: https://www.javacodegeeks.com/2015/03/i-found-my-java-remake.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的我发现我的Java重拍了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给linux分区时找不到用于efi(给l
- 下一篇: 从jHiccup开始