ブログ、チュートリアル、書籍のほとんどには、クラス/モジュールの下部にプライベートメソッドがあります。これがベストプラクティスですか?
必要に応じてプライベートメソッドを使用すると便利です。例えば:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
このように、上下にスクロールし続けるのではなく、コードが読みやすくなり、非常にいらいらします。
このアプローチにはひどく間違っていることがありますか?下部にプライベートメソッドがあるのは、ベストプラクティスだけではありませんか?
私の観点でのベストプラクティスは、順番に進み、観点を非公開にせずにメソッドを宣言することです。
最後に、追加するだけでメソッドをプライベートにすることができます:private :xmethod
例:
class Example
def xmethod
end
def ymethod
end
def zmethod
end
private :xmethod, :zmethod
end
これはあなたの質問を正当化しますか?
Ruby 2.1。以来、メソッド定義の前にprivate
を追加するオプションもあります。
class Example
def xmethod
end
private def ymethod
end
private def zmethod
end
end
定義を見れば、メソッドがプライベートであるかどうかは、ファイルのどこで定義されていてもすぐにわかります。 (オートコンプリートしない場合)もう少し入力する必要があり、すべてのdef
sがうまく整列されるわけではありません。
他の人がすでに指摘しているように、慣習はプライベートメソッドを1つのプライベートクラスの下に置くことです。ただし、多くのプログラマーは、このために二重インデント(2ではなく4つのスペース)メソッドを使用していることをおそらく知っているはずです。その理由は、多くの場合、テキストエディタに「プライベート」が表示されず、それらがパブリックであると想定するためです。以下の図を参照してください。
class FooBar
def some_public_method
end
def another_public_method
end
private
def some_private_method
end
def another_private method
end
end
このメソッドにより、上下にスクロールする必要がなくなり、他のプログラマーがコードを快適に使用できるようになります。
パブリックメソッドはオブジェクトのインターフェイスの一種であり、最も目立つ場所、つまりファイルの先頭に配置するのが論理的だと思います。
各メソッドの上にpublic
やprivate
を置く必要はありません。通常、プライベートメソッドはすべてクラスの一番下に配置します。また、メソッドはデフォルトでパブリックなので、public
を明示的に言う必要はありません。例えば:
class FooBar
def some_public_method
end
def another_public_method
end
private
def some_private_method
end
def another_private method
end
end
私はJava backgroundから来ており、メソッドのタイプを見るためにスクロールしなければならないのが嫌いです。 #private
各suckメソッドの前に宣言してからprivate :...
。
それは私が思うに好みの問題ですが、私はむしろそのように言ったメソッドの後の行で各メソッドをプライベートにむしろ明示的に名前を付けます:
class Example
def cthulhu
end
def rlyeh
end
def foo
end
private :foo
def bar
end
private :bar
def baz
end
private :baz
end
各メソッドにパブリックまたはプライベートを指定する必要はありません。すべてのプライベートメソッドを下部に配置すると、ファイルごとに「プライベート」のインスタンスを1つ持つことができます。好みの問題だと思います。
1つのスタイルは、メソッドをグループ化して、private
とprotected
をクラスごとに1回だけ使用することです。別のスタイルは、メソッド定義の直後に可視性を指定することです:
class Example
def my_private_method
end
private :my_private_method
def my_public_method
end
end
Ruby 2.1.0 def
はメソッド名をシンボルとして返すため、より合理化されたスタイルが可能です。
class Example
private def my_private_method
end
def my_public_method
end
protected def my_protected_method
end
private_class_method def self.my_private_class_method
end
end
(注意:private_class_method
クラスメソッドの場合-そうでなければ、NameError: undefined method
private
はインスタンスメソッドを想定しているため。元の例のようにマクロとして使用する場合でも、インスタンスメソッドの可視性にのみ影響します。
このインライン表示スタイルは、メソッドを必要に応じて整理できるため、最も気に入っています。間違った場所に新しいメソッドを追加し、誤ってプライベートにするリスクを減らします。
クラスメソッドの構文については、代わりにこの方法で処理できます。
class Example
private def my_private_method
end
class << self
private def my_private_class_method
end
end
end
デニスには完璧な答えがありました。つまり、Ruby> = 2.1を使用する場合、defの前にprivate(またはprotected、public)を付けるだけです。
しかし、次のようにprivateをブロックとして使用することも可能になったと思います。
private begin
def foo
end
def bar
end
end
def Zip
end
通常、メソッドは次のように注文します。
private
、1回だけ書き込まれますエディターで「定義に移動」機能を使用して、スクロールをあまり行わないようにします。いずれにしても、スクロールが問題になるほどクラスが大きい場合は、おそらくいくつかのクラスに分割する必要があります。