定数との比較 #3

Javaであって、英語ではないのだから、英語だと思って読み下して違和感が・・・なんてナンセンスじゃない?プログラミング言語を英語に似せたいのなら、COBOLを使うべきだと思います。

まぁ、もっともなんですけど、あれはあくまで比喩で、主語(メッセージレシーバ)と目的語(パラメータ)が入れ替わると、結果的には等価でもセマンティクスが違うんじゃないかというのが、私の主張だと一応書いておく。まぁ、規約的に反射律対象律が成立するはずで、イディオムで慣れてしまえばどうってことないないのかもしれませんが。

Javaを含む多くのオブジェクト指向の実装では、先頭に記述されたオブジェクトのみでメソッドディスパッチが決定するので、特に理由がなければ、素性がはっきりしている方のオブジェクトのメソッドを呼ぶように書く方が無難だと思います。だから、Stringリテラルのequals()メソッドを呼ぶのは、全然変なことではないと思います。

確か GoF 本には「実装に対してではなくインターフェースに対してプログラミングする」というような言葉があったような気がするんだけど、equals メソッドを信用しないとどうしようもないというか、ディスパッチされるメソッドの実装を気にするのはオブジェクト指向的にどうなのよ、という気がする。まぁ、ある種の理想論かも知れないけど。
しかし、「+」 を使った文字列連結の Syntax Suger があるんだから、equals も Syntax Suger にすればよかったのにと、と割と本気で思う。

lhs == rhs

(lhs is null) ? (rhs is null) : lhs.equals(rhs)

なコードに変換とか。