2

私は実際に C# を使用していますが、Nulls に関する問題について、地元の開発者グループ (Chester Devs、英国) のソーシャル サイトで Nulls の問題が取り上げられました。

オブジェクト Person には Name などの String 型のプロパティがあります 名前が不明な場合、C# では Name は null です

Eiffel には、この一般的な動的 void を処理する C# ( x が null の場合 ...) よりも優れた方法がありますか?

4

1 に答える 1

2

Eiffel では、void値を使用できます ( nullC# の場合)。ただし、無効なターゲットで呼び出しが行われないようにします (つまり、 はありません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。これが設計されているため、通常は特別な型はほとんど必要ありません。

于 2016-02-09T12:51:21.680 に答える