2010-02-24 19 views
2

我正在寫很多不同語言的關鍵值存儲API(如ODBC,只是接口,而不是底層存儲),雖然我不想在語言之間音譯API,但我不希望例如存儲值從Java作爲「null」,然後以不支持null的概念的另一種語言讀取它。我不知道如果我解釋這個這麼好,但它的我第一次嘗試:)所有編程語言都有NIL,null或undefined的清晰概念嗎?

參見:

Is this API too simple?

有關鍵值存儲API

+0

相關:http://stackoverflow.com/questions/3989264/best-explanation-for-languages-without-null – nawfal 2013-04-01 21:06:38

回答

4

沒有指針的所有prodedural語言我能想到沒有這樣的概念。例如,經典的Basic(像80年代家用電腦中使用的那種)沒有這樣的概念。我不認爲Cobol也有。

+1

Sidenote:在QuickBasic中,如果未定義變量[integer],它默認爲0 ...當然,我可能只是漫步自基本!= QuickBasic ... – Warty 2010-02-24 07:54:02

+1

當然,對許多Basic方言來說都是如此,但0並不像NULL/Nothing/Undefined /無 – 2010-02-24 08:29:00

1

我的討論想我明白。雖然我會說,敲木大多數語言的頭頂將與ODBC接口一起使用將有NULL的概念。從C語言獲得的進一步,你的里程可能會有所不同。

3

如果不是,則需要提供替代約定,如isAgeNull函數。它不應該關心你。
所有主要的數據庫都有空值(甚至是空類型),並且它們在不同的語言中表現很好。
您還應該記住,對象空指針與數據庫空值之間存在差異。

+2

+1指出它是語言的責任來支持數據庫,反之亦然。 – 2010-02-24 08:00:28

+0

是的,大多數數據庫apis有isnull – Zubair 2010-02-24 08:12:23

+0

+1 - NullPointers!= NullValues – 2010-12-22 04:59:29

2

不,並非所有語言都支持「null/nil/Nothing」概念;在某些情況下,這種支持也僅限於一個簡單的約定,其中未知/未定義的值由特定值表示。

我建議你簡單地處理「NULL/Nothing/nil」,就好像這只是一個特定的「類型」。
換句話說,就像您可能會發現爲浮點算術值提供支持(即使並非所有語言都支持這些算法值都很方便),如果您發現NULL有用,則可以將其包含在數據模型/ API中,並且只需將責任置於API的特定實現上即可將NULL轉換爲任何適當的值(如零或空字符串或其他),而底層語言不會支持NULL概念(或者,如果不希望出現異常在特定語言中爲空值)。

9

這是一個類型系統問題,所以任何回答「0」的人都會錯過這一點。

你在說什麼是總和類型(檢查「類型和編程語言」)。

也就是說,有n + 1個居民的類型。也就是說,其elemens是類型:

  • 所有類型的值,你關心

OR

  • 額外的價值,沒有什麼。

這很容易描述爲代數數據類型,例如,在Haskell

data Maybe a = Just a | Nothing 

奇怪的是,相對較少的語言支持和類型,所以它們編碼它們的產品(一對標籤只是或沒有,和值本身),或者通過重載型的居民之一(例如-1或0變成Nothing)。

此類型通常稱爲Maybe或Optional。

+1

對不起,我無法評估此答案,因爲我沒有回答術語。 – Zubair 2010-02-24 09:37:57

+1

有關各種基本類型結構的背景信息:http://en.wikipedia.org/wiki/Tagged_union – 2010-02-24 21:04:20