Rubyで括弧を入れたり外したりしますか?[閉まっている]


86

可能であれば..Rubyで括弧を入れたり外したりしますか?

回答:


95

Rubyスタイル要素から

Rubyでは、一般に、この誘惑に抵抗するために括弧を省略できます。

括弧を使用すると、コードがわかりやすくなります。次の場合を除いて、一般的なRubyスタイルはそれらを使用することです。

  • 空の括弧は常に省略してください
  • かっこは、ERb区切り文字で囲まれた単一のコマンドから除外できます。ERbマーカーは、コードが引き続き読み取り可能であることを確認します。
  • 単一のコマンドと単一の単純な引数である行は、括弧なしで記述できます。個人的には、これを行うことはますます少なくなっていますが、それでも完全に読みやすくなっています。私は、複数の引数があり、括弧がない通常のRubyコードの1行は好きではない傾向があります。
  • 多くのRubyベースのドメイン固有言語(Rakeなど)は、ステートメントに対してより自然な言語感覚を維持するために括弧を使用していません。

27

私は将来の私を助けるためにコメントとしてparensを使用します...現在の私よりも脳細胞が少ない可能性が高いです:-)

2年前に書いたコードを見て、それを誤解して、修正中に何かを壊してしまうことほど悪いことはありません。

もしparensが将来私を数分(または数時間)節約してくれるなら、私は声明を明確にするために必要なだけ入れます。


2
+1「私は将来の私を助けるためにコメントとしてparensを使用します...現在の私よりも脳細胞が少ない可能性が高いです:-)」それはとても真実であり、まさに私がそれをする理由です。また、私のコードを使用しなければならない私をフォローしている人にとっても慈悲深いことです。要するに、それはメンテナンスのことです。
ブリキの

9

t.columnやhas_manyin railsなどのDSL風の作業をしているときは、それらを省略します。残りの時間は、一般的に明確になり、おそらく均等に分割されます。


8

私は両方を行うと思いますが、読みやすさを向上させ、あいまいに見えるステートメントを回避する場合は、間違いなくそれらを保持します。


8

関数呼び出しの場合は、常に読みやすいので、常に括弧を付けます。条件で意味する場合(if、while)、必要な場合にのみ括弧を付けます。


2
同意する。たとえば、phpでは$プレフィックスで変数をすばやく見つけることができます。javascriptでは括弧()で関数を再構成できます。Rubyでは、varとfunc(括弧なし)の違いを簡単に確認できるとは限りません。

7

可能であれば、それらを除外するようにしています。コードが読みやすくなると思います(一般的に言えば)。


4

通常、どちらか読みやすい方。

ただし、他のパラメーター内に関数呼び出しをネストする場合は、常に括弧を使用します


2

assert_equalなどのアサーションを実行するときは、それらを除外する傾向があります。多分それはそれをドメイン固有言語のようにすることです。


1

長い間プログラミングをしていると、かっこを追加するための「かゆみ」が生じる可能性があります。多くの場合、これには十分な理由があります。

私の意見では、コードは目には簡単ですが、まだ問題は発生していません。括弧が必要な場合は、デバッグスクリプトを実行する前に、事前に知っておく必要があります。


4
「私の先生は私にその必然性を教えてくれます」。それはそうです、そしてデバッグするのは難しいかもしれません。あいまいなパラメータ割り当てを避けるために、それらを使用することをお勧めします。
ブリキの

IMOは、関数の引数を括弧で囲まないというお粗末な理由であるため、「見やすい」と否定されています。
マルチェロロマニ2015

2
両親以外の群衆と話すと、先日この問題に遭遇しif owner.is_a? thing //worked fine if owner.is_a? thing && x > 1 //not fine ました。私は数週間しかルビーを学んでいません。私が働いている場所では、可能な限り少ない文字数を使用しています。他の言語から来た場合は、学習があります。暗黙のハッシュ、シンボルの配列を渡し、シンボルを関数に渡すときを知るための曲線...私はファンではありません。
ロックマン

@MegaManif owner.is_a? thing and x > 1
anna328p

1
@DmitryKudriavtsevは、and同じ演算子の優先順位はありません&&持っている
ロックマン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.