まずひとつは == 演算子を使う方法。これは左辺オブジェクトの == メソッドを呼び出し、その値によって結果が決まります。Dartでは演算子を自分で再定義(演算子オーバーロード)できますので、これによって == 演算子を使用した時の動作を変更することができます。左辺のオブジェクトが == 演算子をオーバーロードしていない場合は、基底のクラス(何も継承していないクラスならばObjectクラス)にある == メソッドが呼ばれます。
たとえば、あるクラスCが、aとbという2つのint型の値を持っていたとしましょう。しかし == の比較には a しか使用しないとします。この場合のコードは次のようになります。サンプルコード
class C { int a_, b_; C(this.a_, this.b_) {} // a_の値しか比較しない。b_の値は違っていても構わない。 bool operator==(other) { return this.a_ == other.a_; } } main() { C one = new C(1, 1); C two = new C(1, 2); if (one == two) { print('one == two'); } else { print('one != two'); } }このコードを実行すると one == two を出力します。operator== をコメントアウトすると Object.== が呼び出され、one != two と表示されるようになります。
もうひとつの比較方法は、=== 演算子を使う方法です。こちらはオブジェクトの参照が等しいかどうかが評価されます。つまり値が同じかどうかではなく、まったく同じオブジェクトかどうかです。サンプルコード
main() { Object one = new Object(); Object two = one; if (one === two) { print('one === two'); } else { print('one !== two'); } }このコードの実行結果は one === two になります。two の値を new Object(); にすると、結果は one !== two です。
すでに登場していますが、== の結果の真偽値が逆になる演算子は != 演算子で、同様に === の結果が逆になるのは !== 演算子です。
なお、=== 演算子はオーバーロードできません。
0 件のコメント:
コメントを投稿