Rubyのクラスメソッドをclass << selfで定義している理由(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Class Methods In Ruby: a Thorough Review & Why I Define Them Using class << self 原文公開日: 2017/11/24 著者: Eliav Lavi Rubyのクラスメソッドをclass << selfで定義している理由(翻訳) https://pixnio.com/nature-landscapes/winter/landscape-sky-winter-snow-ice-water-tree-nature-outdoor-reflectionより クラスメソッドは私の同僚の間で常に議論や反論の種になっています。クラスメソッドは的確かつ有用と考える人もいますが、実際にはコードの読みやすさや管理のしやすさを損ないがちな邪魔者だと感じる人もいます。私はRubyのオブジェクト指向的な本質を信奉しており、オブジェクトで考えることを(読むのも!)好んでいますが、私には後者が真実になる傾向があることに気づきました。よく言われるように、クラスメソッドがどうしても必要になることもあります。ファクトリーメソッドから、ActiveRecordモデルのカスタムクエリメソッドで使われる複雑なメタプログラミングインターフェイスにいたるまで、クラスメソッドを全否定することはできません。もちろんクラスメソッドの利用は控えめにすべきではありますが(詳しくはCode Climateのこちらの良記事をご覧ください)。 本記事ではクラスメソッドそのものの良し悪しについては言及せず、クラスメソッドが必要になった場合のクラスメソッドのスタイル上の記法について議論します。 コーディングスタイルとスタイルガイド Rubyスタイルガイドでは、クラスメソッドはdef self.methodという記法を用いるのが望ましいとされています。このスタイルでは、より明示的な def ClassName.methodという記法が批判されていますが、より謎めいたclass << selfという記法も補助的にサポートされています。記法の実際の表示については該当のセクションをご覧ください。 組織内でスタイルガイドを共有し、それに従うことは重要です。Sandi Metz氏の良記事では次のように指摘されています。 (略)スタイル上の選択は多くの場合任意であり、純粋に個人の好みの問題です。スタイルガイドを選択することは、ほとんど重要でない点で意見が割れてしまった場合の合意を形成するということです。スタイル(そのもの)が重要だということではなく、スタイルが揃うことが重要です。 Why we argue styleより この指摘は実にもっともです。しかし、スタイルを正しく選択できることもやはり重要です。服装と同じく、コードのスタイルには開発者としての信条や価値観や哲学が反映されるのですから、この問題についても十分理解が必要です。私たちの誰もが多くのクラスメソッドを定義していますが、果たして私たちはクラスメソッドの動作を理解しているのでしょうか。 https://images.askmen.com/1080×540/2015/11/06-042951-men_s_fashion_must_haves.jpgより シングルトンクラス 上の問いに答えるために、Rubyのオブジェクトモデルについて取り急ぎ調べる必要があります。一般に、Rubyのメソッドはクラスに保存され、データはオブジェクト(クラスのインスタンス)に保存されます。これはかなり一般的な知識なので、次の例でもう少し追ってみましょう。 an_array = [1, 5, 10] an_array.averageを実行すると、Arrayやそのスーパークラスにaverageメソッドが定義されていないので、次のようにNoMethodErrorエラーが出力されます。 an_array.average … Continue reading Rubyのクラスメソッドをclass << selfで定義している理由(翻訳)