2016-02-09 97 views
2

其實我使用C# - 但空值的問題,提出了在本地開發組(切斯特離散事件,UK)關於與零點艾菲爾避免所有空值?

對象者擁有財產問題的社會網站,說名稱,類型爲String 如果名稱不知道,那麼在C#名稱爲空

是否艾菲爾有更好的方式比C#(如果x爲空...)來處理這個常見的動態無效?

+1

C#有更好的方法來處理'null'; ''可選''''可能''類似於類型,空對象模式等等。當然它們並沒有被廣泛使用,但它們存在。 你可以在艾菲爾做類似的事情,雖然我不知道它是否足夠了解它,告訴你他們喜歡哪個特定的選項。 – Cubic

+0

@Cubic你可以精確的C#解決方案來處理空? –

+0

不在評論範圍內。只要查看我在之前評論中列出的術語,就一定會發現_something_有用。 – Cubic

回答

2

Eiffel允許void值(在C#中爲null)。但是它確保從不會有無效目標上的呼叫(即沒有0​​)。這可以在編譯時通過依賴類型系統來確保,該類型系統通過增加一個類型的概念和一組特殊的空白安全規則來保證附加類型的任何表達式總是在運行時附加到對象(即永遠不會null)。

在您的例子,類的聲明看起來像

class PERSON ... feature 
    name: detachable STRING 
end 

然後在它的代碼可以作爲

p: PERSON 
a: STRING 
d: detachable STRING 
... 
d := p.name -- OK 
a := p.name -- This is not allowed, because `a' is of an attached type. 
if attached p.name as q then 
    a := q -- OK 
    ... -- Both `q' and `a' are equal to `p.name' and are attached. 
else 
    ... -- The name is `void', do something else. 
end 

可能可以有一個OPTION型和依賴它當一些價值可能存在或缺失,但缺乏價值自然地由void表示時,這是它的設計目的,因此通常幾乎不需要特殊類型。

+0

謝謝。 這會將運行時的Null問題推到屬性值來自的任何位置。 (通常是一個數據庫) TBW它引發了爲什麼大多數數據庫允許null的相關(但不是主題)問題。 –