日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java中undefined是什么意思,Haskell中的undefined和Java中的null有什么区别?

發布時間:2023/12/18 java 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java中undefined是什么意思,Haskell中的undefined和Java中的null有什么区别? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Haskell中的undefined和Java中的null有什么區別?

好的,讓我們稍微回顧一下。

Haskell中的“undefined”是“bottom”值的示例(表示為⊥)。 這樣的值表示程序中的任何未定義的,卡住的或部分的狀態。

存在許多不同forms的底層:非終止循環,exception,模式匹配失敗 – 基本上,程序中的任何狀態在某種意義上都是未定義的。 值undefined :: a是將程序置于未定義狀態的值的典型示例。

undefined本身不是特別特殊 – 它沒有連接 – 你可以使用任何底部產生的expression式來實現Haskell的undefined 。 例如,這是一個undefined的有效實現:

> undefined = undefined

或者立即退出(舊的Gofer編譯器使用這個定義):

> undefined | False = undefined

底部的主要屬性是,如果expression式評估為最低,則整個程序將評估到最低:程序處于未定義狀態。

你為什么要這樣的價值? 那么,用一種懶惰的語言,你可以經常操縱那些存儲底層值的結構或函數,而程序本身并不是底層的。

例如一個無限循環的列表是完全有力的:

> let xs = [ let f = f in f , let gn = g (n+1) in g 0 ] > :t xs xs :: [t] > length xs 2

我不能用列表中的元素做很多事情:

> head xs ^CInterrupted.

無限的東西的操縱是為什么Haskell如此有趣和performance力的一部分。 Haskell對懶惰的結果是特別關注bottom價值。

但是,顯然,底部的概念同樣適用于Java或任何(非全部)語言。 在Java中,有許多expression式產生“底部”值:

比較引用與空(雖然注意,不是null本身,這是很好的定義);

被零除;

越界例外;

無限循環等

你只是沒有能力很容易地將一個底部replace成另一個底部,而Java編譯器對于底部值的理由并沒有太多的理由。 但是,這樣的價值在那里。

綜上所述,

在Java中取消引用null值是一個在Java中產生最低值的特定expression式;

Haskell中的undefined值是一個通用的底部產生式expression式,可以在Haskell需要的底部值的任何地方使用。

這就是他們的相似之處。

后記

至于null本身的問題:為什么它被認為是不好的forms?

首先,Java的null本質上等同于在Haskell中為每個typesa添加隱式Maybe a 。

取消引用null相當于僅用于case的模式匹配: f (Just a) = ... a ...

所以當傳入的值是Nothing (在Haskell中)或null (在Java中)時,程序會達到一個未定義的狀態。 這是不好的:你的程序崩潰了。

所以,通過為每種types添加null ,您可以輕而易舉地創buildbottom值 – 這些types不再有助于您。 你的語言不再幫助你防止那種特殊的錯誤,那很糟糕。

當然,其他底部值仍然存在:exception( undefined )或無限循環。 為每個函數添加一個新的可能的失敗模式 – 解引用null – 只是使編寫崩潰的程序更容易。

總結

以上是生活随笔為你收集整理的Java中undefined是什么意思,Haskell中的undefined和Java中的null有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。