設計程式語言為啥要引入布林型別?

時間 2021-06-01 22:06:45

1樓:Wang Namelos

不是必須引入布林型別。

比如Haskell,OCaml等等這些ADT語言裡,布林型別就是個普通可以自己創造的型別,按照普通語言的理解就是enum 。也就是說加入語言不內建這個type也是OK的,只不過問題在於大家得用一套True False才行,如果語言不內建,所有和布林值相關的標準庫函式就不能存在了。

至於數值型別,C是靠數值的,JS這些動態型別理論上其實也可以把布林型別刪了,老款的Lisp是空列表。所以你看還是很多語言沒有的。帶來的問題就是不夠清真,經常不小心搞錯。

強型別語言都是必須有布林值的,其實我們大部分軟體系統打交道的都是布林邏輯,做數值運算有時候可能真的沒有判斷真假用得多。

2樓:hx小龍

可暫時理解為增加程式可讀性。兩個關係運算出來就是邏輯型別,布林發明的這種運算,固叫布林運算子!而且布林型別在不同語言中所占用的記憶體空間不同,這點也是需要注意到的!

所以也可以理解為優化記憶體空間!

3樓:祖與佔

data Bool = True | False

data Int = Zero | Pred Int | Succ Int

// 以上notation來自haskell

這兩個不是同乙個型別, 前者是邏輯物件的集合, 後者是算術物件的集合.

如果有Zero是False, 非Zero是Ture這種設定, 這兩個型別就同構了, 所以互換來使用. 但是型別是不對的, 就是其他回答裡的說型別不安全, 追求型別安全的話就是編譯器可以方便為你檢查.

例如C語言新手常犯的乙個錯誤:

本來想寫 if (x == 0)但是寫成了if ( x = 0) , 括號裡邊應該是乙個布林型別的表示式, 但是C語言對這個約束沒那麼大所以就坑了, 現在的編譯器有這種檢查, 還有Yoda conditions這種東西, 這都是後知後覺.

C語言就是一旦接受了這種設定也蠻帶感的例子 (

4樓:

一階邏輯是對映到真假上的,所以定義了布林。布林是乙個特殊的Enumerate。

在Ada語言中,boolean就是定義在enumerate上的,和具體數值無關。

程式語言設計界是否開始認為 Subtyping 是 Anti pattern?

已登出 主要是你把 subtyping 和 polymorphism 一組合起來,你就不能暴力列舉出來所有可能路徑。當然,你可以配合乙個證明系統,在這個系統中做且只能做可被推導的 subtyping。但是這又不實用,因為能搞懂你幹了什麼的程式設計師一般不會用搞 subtyping,搞不懂的程式設計師...

C 帶壞了 多少程式語言的設計?

嵌入式Linux 我覺得如果說低階C語言開發者,我可以承認,如果是高階C語言開發者,根本不侷限,完全可以用C實現物件導向,繼承,高內聚,低耦合,等等 這不是 的問題 是寫 的人的問題。 qwety ed c語言的編譯器可以寫得很簡單,c語言流行的時代也是各類平台爆發的時代 c語言設計的簡單,但遠不算...

從程式語言設計的角度,如何評價PLSQL語言?

Leekaven276 評價語言首先要看他所應用的場景和執行的環境。plsql 是用來整合SQL操作的,用來處理資料的,封裝業務邏輯,當然也可以當Http servlet來用。雖然 plsql 不像通用語言那麼豐富的內容,但是也沒有必要呀,下面列出通用語言的功能,大家看 plsql 是不是根本不需要...