101

ほとんどのブログ、チュートリアル、または書籍には、クラス/モジュールの下部にプライベート メソッドがあります。これはベストプラクティスですか?

必要に応じてプライベートメソッドを使用する方が便利だと思います。例えば:

public
def my_method
  # do something
  minion_method
end

private
def minion_method
  # do something
end

public
def next_method
end

このようにして、非常にイライラする連続的な上下スクロールの代わりに、コードが読みやすくなります。

このアプローチに何かひどく問題がありますか? 一番下にプライベートメソッドを持っているのは、ベストプラクティスだけではありませんか?

4

10 に答える 10

134

私の観点からのベストプラクティスは、プライベートな観点を維持せずに、順番に実行してメソッドを宣言することです。

最後に、次を追加するだけで、任意のメソッドをプライベートにすることができます。private :xmethod

例:

class Example
 def xmethod
 end

 def ymethod
 end

 def zmethod 
 end

 private :xmethod, :zmethod

end

これはあなたの質問を正当化しますか?

于 2012-05-23T17:32:12.710 に答える
62

privateRuby 2.1 以降、メソッド定義の先頭に追加するオプションもあります。

class Example
 def xmethod
 end

 private def ymethod
 end

 private_class_method def self.zmethod 
 end
end

メソッドが (大きな) ファイルのどこにあるかに関係なく、メソッドがプライベートかどうかをすぐに確認できます。そして、それは他の多くの言語と一致しています。しかし、それはもう少しタイピングが多く、うまく整列していません。

于 2014-06-20T19:11:41.260 に答える
54

他の人がすでに指摘しているように、慣例では、プライベートメソッドを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

この方法により、上下にスクロールする必要がなくなり、他のプログラマーがコードをより快適に使用できるようになります。

于 2012-05-23T16:46:36.863 に答える
15

パブリック メソッドはオブジェクトのある種のインターフェイスであり、最も目立つ場所、つまりファイルの先頭に配置するのが論理的だと思います。

于 2012-05-23T16:36:26.937 に答える
14

各メソッドの上に配置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
于 2012-05-23T16:38:09.870 に答える
5

メソッドごとにpublicまたはprivateを指定する必要はありません。すべてのプライベートメソッドを一番下に配置すると、ファイルごとに「プライベート」のインスタンスを1つ持つことができます。好みの問題だと思います。

于 2012-05-23T16:48:03.093 に答える
3

Dennis は完璧な答えを持っていました。つまり、ruby >=2.1 を使用する場合は、def の前に private (または protected,public) を付けるだけです。

しかし、次のようにプライベートをブロックとして使用することも可能になったと思います。

private begin
   def foo
   end
   def bar
   end
end

def zip
end
于 2015-11-01T00:15:19.663 に答える