まへがき
無意識だったわー このコード無意識で書いてたわー
——Zonu.EXE (24歳・中二病)
本文
このコードの ==
メソッドの定義を読んで違和感がなければRuby脳。
hoge_equals.rb
class Hoge
attr_accessor :foo, :bar
def initialize (arg)
@foo = arg[:foo]
@bar = arg[:bar]
end
def == (other)
[self.foo, self.bar] == [other.foo, other.bar]
end
end
fizz = Hoge.new(foo: "Foo", bar: "Bar")
bazz = Hoge.new(foo: "Foo", bar: "Bar")
p fizz == bazz
# => true
補足
- タイトルで煽ってますが、このコードが問題視されることは、おそらく多くありません
- Rubyの世界では 実行時に多少のオーバーヘッドがあったとしても、コードの書きやすさ、可読性が重視される文化だからです
- 僕はさう思ってますが、Rubyistの間でも見解の差があるかもしれません (きっとある)
- 他人の書いたPythonをあまり読んだことがないのですが、Pyの文化ではどうなのでせう…? (ちゃんと動きます)
解答に代へて
これをPHPに直訳すると、こんな (気持ち悪い) ことになります ヾ(#><)ノ゙
hoge_equals.php
<?php
class Hoge {
public function __construct (array $arg) {
$this->foo = $arg['foo'];
$this->bar = $arg['bar'];
}
public function equals ($other) {
return array($this->foo, $this->bar) == array($other->foo, $other->bar);
}
}
$fizz = new Hoge(array('foo' => "Foo", 'bar' => "Bar"));
$bazz = new Hoge(array('foo' => "Foo", 'bar' => "Bar"));
var_dump($fizz->equals($bazz));
# => true
個人的な見解
言語デザインの力ってすごいよね
——tadsan (24歳・自称エンジニア)
一般的な模範解答
(self.foo == other.foo) && (self.bar == other.bar)