」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Kotlin Null Safety 與 Java:錯誤喜劇(但主要是在 Java 中)

Kotlin Null Safety 與 Java:錯誤喜劇(但主要是在 Java 中)

發佈於2024-11-17
瀏覽:258

Kotlin Null Safety vs. Java: A Comedy of Errors (But Mostly in Java)

啊,Kotlin 空安全 vs. Java!一場經典的對決,就像哥吉拉與摩斯拉一樣,但摧毀城市的怪物更少,更多的是關於……好吧,無。 ?

Java,祝福它的心臟,從撥號時代就已經存在了。當時,沒有人擔心 null 會導致您的應用程式崩潰,因為說實話,網路導致您的應用程式崩潰的情況要普遍得多。但時代變了,

Java 的「任何時候任何東西都可以為 null」的方法就像 5G 世界中的撥號數據機一樣受歡迎。輸入 Kotlin,超級英雄程式設計師的助手,用它驚人的空安全功能來拯救世界(和你的理智)!

十億美元的錯誤(不是標題黨!)

NullPointerException 是 Java 開發人員存在的禍根。它們就像你在半夜踩到的那些微小的樂高積木——雖小但能夠造成巨大的疼痛。

事實上,空引用的發明者托尼霍爾 (Tony Hoare) 稱其為“價值數十億美元的錯誤”。 (我們猜測他踩了很多樂高積木。)

另一方面,Kotlin 採取了積極主動的方法。這就像您為了避免踩到樂高積木而穿的舒適拖鞋。借助 Kotlin 的 Null Safety,編譯器本身就成為了一個警惕的守護者,防止 null 潛入您的程式碼並造成嚴重破壞。

Kotlin 是如何做到的(劇透:非常酷)

在 Kotlin 中,您必須透過新增 ? 來明確告訴編譯器變數是否可以為 null。到類型聲明。例如:

// Kotlin
var name: String? = null // This variable can be null
var age: Int = 42        // This variable cannot be null

就這麼簡單嗎?就像一個警告信號:「小心!空值可能潛伏在這裡!」 如果您嘗試使用可為 null 的變數做一些有風險的事情,Kotlin 編譯器將阻止您並顯示錯誤訊息。這就像你的程式碼有一個私人保鏢,只不過這個保鑣非常擅長語法和語法。

Java 的反擊(它嘗試過,祝福它的心)

Java在後來的版本中,試圖趕上諸如Optional之類的功能。這是一項勇敢的努力,有點像你的爺爺試圖學習 TikTok。他的意思是好的,但並不完全一樣。可選可能很麻煩,並且無法提供與 Kotlin 的 Null Safety 相同級別的編譯時安全性。

// Java
import java.util.Optional;

public class OptionalExample {

    public static void main(String[] args) {
        // Creating an Optional object

        Optional name = Optional.of("John Doe"); 

        // Checking if a value is present
        if (name.isPresent()) {
            System.out.println("Name is present: "   name.get()); 
        } else {
            System.out.println("Name is absent");
        }

        // Using orElse to provide a default value
        String defaultName = name.orElse("Unknown"); 
        System.out.println("Name: "   defaultName);

        // Using orElseGet to provide a default value with a supplier
        String anotherDefaultName = name.orElseGet(() -> "Another Unknown");
        System.out.println("Name: "   anotherDefaultName);
    }
}

結論(每個人都跳過的部分)

Kotlin 的 Null Safety 改變了遊戲規則。它使您的程式碼更安全、更簡潔,並且不易出現那些可怕的 NullPointerException。因此,如果您厭倦了與 null 作鬥爭,就像它們是視頻遊戲中的最終 Boss 一樣,那麼可能是時候切換到 Kotlin 了。你的理智會感謝你的。 ?

P.S. 如果您仍然持觀望態度,請想像一下:一個您永遠不必調試另一個 NullPointerException 的世界。聽起來就像天堂,不是嗎? ?

版本聲明 本文轉載於:https://dev.to/hamada147/kotlin-null-safety-vs-java-a-comedy-of-errors-but-mostly-in-java-api?1如有侵犯,請聯絡study_golang @163.com刪除
最新教學 更多>
  • 如何在 PHP 和 MySQL 中同步時區?
    如何在 PHP 和 MySQL 中同步時區?
    在PHP 和MySQL 中同步時區您正在開發一個需要使用PHP date() 函數在MySQL 中儲存日期的應用程式。有必要使用 NOW() 在 MySQL 中比較這些日期來計算時間差異。但是,PHP date() 函數使用 PHP 中定義的時區,而 NOW() 使用 MySQL 伺服器中配置的時區...
    程式設計 發佈於2024-11-17
  • 我們如何在 C/C++ 中實作鋸齒狀數組?
    我們如何在 C/C++ 中實作鋸齒狀數組?
    理解C/C 中的交錯數組雖然交錯數組的概念(其中行可以有不同的長度)在標準C/ C ,有一些技術可以實現類似的功能。 在嘗試在C/C 中宣告交錯數組時,如圖所示:int jagged[][] = { {0,1}, {1,2,3} };編譯器出錯,突顯指定的要求除第一個維度外的所有維度的邊界。為了克服...
    程式設計 發佈於2024-11-17
  • 如何在 Sublime Text 2 中取得使用者輸入?
    如何在 Sublime Text 2 中取得使用者輸入?
    Sublime Text 2 中的使用者輸入使用者嘗試在Sublime Text 2 中輸入值時遇到困難,特別是在Python 中使用input() 或gets等函數時紅寶石。控制台不提示輸入,導致出現 EOFError 之類的錯誤。 此問題是由於 Sublime Text 2 缺乏控制台輸入的原生...
    程式設計 發佈於2024-11-17
  • 如何執行儲存在 MySQL 資料庫中的 PHP 程式碼?
    如何執行儲存在 MySQL 資料庫中的 PHP 程式碼?
    執行儲存在 MySQL 資料庫中的 PHP執行儲存在 MySQL 資料庫中的 PHP 為 Web 開發帶來了獨特的挑戰。要執行此操作,您可以使用 PHP 中內建的 eval() 函數。 eval() 函數eval() 函數計算給定的字串作為 PHP 程式碼。它執行解析後的程式碼,就像直接在腳本中編寫...
    程式設計 發佈於2024-11-17
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-17
  • 如何處理 PHP 8.1 中的回傳類型衝突?
    如何處理 PHP 8.1 中的回傳類型衝突?
    參考:返回類型衝突與#[\ReturnTypeWillChange] 屬性上下文:在PHP 8.1 中,指定返回類型方法變得更加普遍,導致與現有實現發生衝突。 問題:當方法的返回類型從相容類型更改為不相容型別或未指定時,以下棄用出現通知:Deprecated: Return type of [Met...
    程式設計 發佈於2024-11-17
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-17
  • How to Correctly Transfer Files Over Sockets in Java?
    How to Correctly Transfer Files Over Sockets in Java?
    Java file transfer over sockets involves converting files into byte arrays, sending them via the socket, and converting them back into files at the receiving end. To address issues encountered during implementation, this article provides corrected server
    程式設計 發佈於2024-11-17
  • 為什麼要使用「enableReaderMode」 API 將 NDEF 記錄寫入 NFC 標籤?
    為什麼要使用「enableReaderMode」 API 將 NDEF 記錄寫入 NFC 標籤?
    如何將NDEF 記錄寫入NFC 標籤將NDEF 記錄寫入NFC 標籤需要使用enableReaderMode API,該API 提供卓越的效能和與基於意圖的系統相比的可靠性。透過處理讀寫過程而不是依賴系統的預設行為,寫入失敗和卡片損壞的風險顯著降低。 使用enableReaderMode API的主...
    程式設計 發佈於2024-11-17
  • 以下是一些適合您文章內容的問題式標題:

* Mac OS X 上的 MySQLdb:為什麼我收到「未載入函式庫:libmysqlclient.16.dylib」?
* 如何修復「庫未載入:l
    以下是一些適合您文章內容的問題式標題: * Mac OS X 上的 MySQLdb:為什麼我收到「未載入函式庫:libmysqlclient.16.dylib」? * 如何修復「庫未載入:l
    Python:MySQLdb 和「未載入函式庫:libmysqlclient.16.dylib」在嘗試開發Python/Django 應用程式時,您在Mac OS X 10.6 上安裝MySQL-python 時遇到問題。儘管成功安裝MySQL,但導入MySQLdb 失敗,並顯示錯誤訊息「未載入庫:...
    程式設計 發佈於2024-11-17
  • 發現漸進式 Web 應用程式為您的下一個專案帶來的最大優勢
    發現漸進式 Web 應用程式為您的下一個專案帶來的最大優勢
    Progressive online Apps, or PWAs, are quickly changing the online development landscape. PWAs are becoming the ideal way to connect mobile application...
    程式設計 發佈於2024-11-17
  • 現代 C++ 實作中的 std::list::size() 真的是 O(1) 嗎?
    現代 C++ 實作中的 std::list::size() 真的是 O(1) 嗎?
    在現代實作 std::list::size() 真的是 O(n) 嗎? 最近,一些開發人員建議std::list::size() 具有線性時間複雜度 (O(n))。但是,根據 C 標準,複雜性沒有定義,並且可能會根據實現而變化。 在 C 標準的早期版本 (C 03) 中,建議 size() 操作具有...
    程式設計 發佈於2024-11-17
  • 如何在 Heroku 上建立對 ClearDB MySQL 資料庫的遠端存取?
    如何在 Heroku 上建立對 ClearDB MySQL 資料庫的遠端存取?
    在 Heroku 上遠端存取 ClearDB MySQL 資料庫遠端查詢 ClearDB MySQL 資料庫可以透過 MySQL 查詢瀏覽器等工具來實現。要建立連接,您需要以下資訊:獲取資料庫憑證和連接詳細資訊:導航至Heroku 網站並選擇“My應用程式。” 選擇與ClearDB 資料庫關聯的應用...
    程式設計 發佈於2024-11-17
  • 何時選擇 IFNULL 而不是 COALESCE 以獲得最佳性能?
    何時選擇 IFNULL 而不是 COALESCE 以獲得最佳性能?
    效能比較:IFNULL 與COALESCE當資料庫列只能有兩個候選值時,IFNULL 和COALESCE 都可以用來檢索非空值。然而,目前還不清楚哪個函數更快。 調查儘管相信IFNULL 更優越,但軼事證據表明COALESCE 可能同等甚至更高效.基準測試注意事項確定哪個函數是真正更快,有必要針對特...
    程式設計 發佈於2024-11-17
  • 如何使用 Access-SQL 中的內連線從多個表中擷取資料?
    如何使用 Access-SQL 中的內連線從多個表中擷取資料?
    Access-SQL:多表內連接在Access資料庫中處理多個互連表時,需要檢索資料無縫地從多個來源。一種有效的方法是利用內聯接,它允許根據匹配值從多個表中檢索資料。 要擷取跨越多個資料表的特定值,可以使用下列查詢:SELECT tblOjt.ID, tblStudent.Lastname,...
    程式設計 發佈於2024-11-17

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3