1

多くのコードで見られるもの:

class Foo
  attr_accessor :bar

  # lots of code omitted

  def baz
    'qux' if bar
  end
end

baz メソッドの正確な形式はそれほど重要ではありません。インスタンスのクラス内から呼び出されるbarインスタンス変数の getter メソッドへの参照がここにあるだけです。明示的@barに値を取得することをお勧めします。@barこれについて何か意見はありますか?ルビー スタイル ガイドなどで、これをカバーしているものを見たことがありません。個人的には、前者を実行すると、特にクラスが数百行を超える場合に、読みにくく理解しにくくなることがわかりました。

編集:

この設計の扱いにくさを説明するために、かなり標準的な初期化メソッドを再評価してみましょう。

class Foo
  attr_accessor :bar, :qux

  def initialize(bar, qux)
    @bar = bar
    @qux = qux
  end
end

セッターメソッドを使用する場合bar = ?、類推して使用することはできません。代わりに、次のものがあります。

class Foo
  attr_accessor :bar, :qux

  def initialize(bar, qux)
    self.bar = bar
    self.qux = qux
  end
end

最初のエレガンスの一部が失われました。setter メソッドを自由に書き直して を廃止できるという点で、より柔軟な設計になっていattr_writerます。しかし、私はスタイルのポイントをいくつか挙げただけで、Russ Olsen が Rails だけでなく Ruby のデザイン「パターン」を宣言した、その逆ではなく、慣習よりも構成に似ているように感じます。

4

3 に答える 3

1

実際には getter を使用する方が高速です。主な理由はattr_reader、 andattr_accessorが Ruby ではなく C で記述されているためです。

数年間 Ruby のコーディングを行ってきた者として、私は usingattr_*の方がはるかに読みやすいと思います。しかし、それはおそらく私が慣れているものです。

于 2013-08-09T20:50:52.630 に答える