私は実際に C# を使用していますが、Nulls に関する問題について、地元の開発者グループ (Chester Devs、英国) のソーシャル サイトで Nulls の問題が取り上げられました。
オブジェクト Person には Name などの String 型のプロパティがあります 名前が不明な場合、C# では Name は null です
Eiffel には、この一般的な動的 void を処理する C# ( x が null の場合 ...) よりも優れた方法がありますか?
私は実際に C# を使用していますが、Nulls に関する問題について、地元の開発者グループ (Chester Devs、英国) のソーシャル サイトで Nulls の問題が取り上げられました。
オブジェクト Person には Name などの String 型のプロパティがあります 名前が不明な場合、C# では Name は null です
Eiffel には、この一般的な動的 void を処理する C# ( x が null の場合 ...) よりも優れた方法がありますか?
Eiffel では、void
値を使用できます ( null
C# の場合)。ただし、無効なターゲットで呼び出しが行われないようにします (つまり、 はありませんNullReferenceException
)。attached
これは、型の/detachable
概念で拡張された型システムと、アタッチされた型の式が実行時に常にオブジェクトにアタッチされることを保証する特別な void-safety ルールのセットに依存することにより、コンパイル時に保証されます。 (つまり、決して ではありません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
。これが設計されているため、通常は特別な型はほとんど必要ありません。