二項演算子の前後に改行を入れるべきですか?[閉まっている]


11

PythonまたはJavascriptを使用している場合は、改行がコードを途中で終了させないように、常に前の行の最後にバイナリ演算子を配置する必要があります。エラーをキャッチするのに役立ちます。

しかし、CまたはC ++では、これは問題ではないので、私は疑問に思っています:

最初のバージョンよりも2番目のバージョンを好む理由はありますか?

return lots_of_text
       + 1;

return lots_of_text +
       1;

(たとえば、そのうちの1つは他の種類のエラーの防止に役立ちますか?または、そのうちの1つはより読みやすいと見なされますか?)


いいえ、Pythonでそれを行うべきではありません。主に、あなたが主張する効果がないからです。末尾の演算子は行の継続を引き起こしません。バックスラッシュ、または閉じられていない括弧、括弧、または括弧がある場合。

@delnan:私は(非常に注意深く)行の継続を引き起こすとは言いませんでした。グループ化文字を囲む必要があることは承知しています。私はそれがあなたにエラーを与えることによってあなたのラインが途中で終わるミスを防ぐのに役立つと言いました。
user541686

わかりましたが、それもしません。少なくとも、私はそれが起こるのを見たことがありません(そして、演算子の後に改行を置くことに関するPEP 8の規則に厳密に従います)、演算子の前ではなく演算子の後では改行で有効な非工夫されたコードを想像することはできません。たとえば、最初のスニペットのようなコードでもエラーが発生します(インデントによる)。行を分割するときに誰かがインデントを追加しませんか?

@delnan:バルク編集や長方形の選択を行う場合など、テキストエディターでインデントを誤って誤って設定するのは実際には非常に簡単です。また、メンテナンス中に発生した場合、最初のケースではエラーが発生せず、静かにスリップしますが、2番目のケースではエラーが発生します。
user541686

4
これがなぜ投票されたのかはわかりません。合理的なコーディングスタイルの質問のようです。
スチュアートマーク

回答:


18

答えからわかるように、この問題に関してコンセンサスはありません。チームで作業している場合を除き、自分が使いやすいもの使用してください


演算子の前に改行を挿入すること好みます。

行を区切る必要があるときはいつでも、通常、同じ「レベル」の項を1行に1つだけ入れます。

Pythonのニュートンの重力の法則:

force = (
    gravitational_constant
    * mass_1
    * mass_2
    / (distance * distance)
)

これと比較してください:

force = (
    gravitational_constant *
    mass_1 *
    mass_2 /
    (distance * distance)
)

私は「距離の2乗で除算する」ことを知りたいのですが、「mass_2 除算される」ことを知りたくありません。

さらに、私は通常、私が何をているか(オペランド)を気にする前に、私がをしているか(オペレーター)を最初に知りたいです。

または、この複雑なSQLステートメントを検討してください。

WHERE
  a = 1
  AND b = 2
  AND c = 3
  AND ( -- or put the OR on one line together with the AND
    d = 3 
    OR e = 1)
  AND x = 5

これにより、個々の条件が非常に簡単に接続されていることがわかります。上から下にスキミングするだけで、最後まですべての行を読み取ってオペレーターを見つける必要はありません。

WHERE
  a = 1 AND
  b = 2 AND
  c = 3 AND
  ( 
    d = 3 OR
    e = 1) AND
  x = 5

私は「の面でかつて考えX、私が言っているの改正、真である」:「、これも真実である」と感じている他の方法で回避よりも、私にはより自然。さらに、視覚的に解析する方がはるかに簡単です。

またはPHPの例:

$text = "lorem ipsum"
      . "dolor sit amet, "
      . "consectetur adipisicing elit, "
      . "sed do eiusmod tempor";

繰り返しますが、ほとんどの場合、実際には文字列/条件内にあるものを実際に気にしていないと感じるので、縦に読んでテキストを単純に連結していることがわかります。

もちろん、私はこのスタイルを無条件に適用しません。演算子の後に改行を入れるのが私にとってより理にかなっているように思える場合、私はそうしますが、現時点では例を考えることはできません。


最初の例に括弧の欠落を追加しました。
ケビンクライン

1
+1:完全に正しい。数学は常にタイプセットされるため、継続行は演算子で始まります。
ケビンクライン

あなたが説明したのと同じ理由で+1しますが、PHPの例は非常に奇妙に見えます。それらの連結はそう.ではありません.=か?
イズカタ

@Izkataそうそう、もちろんあなたは正しい。ありがとう。ケビン:かっこは正しかった;)私はちょうどそれらを揃えてforce
phant0m

11

コードの読者に、これが次のステートメントではなく式の継続であることを明確にするために、私はほとんど常に二項演算子の前で改行します。これは、次のステートメントが通常インデントされる場合に重要です。たとえば、複雑な条件式を含むifステートメントを考えます。

if (first_part_of_condition &&
    second_part_of_condition) {
    statement_within_then_part;
}

条件式の2番目の部分は、then-partの最初のステートメントと簡単に混同されます。これは、条件の最初の部分が長く、&&が最終的に右側にある場合、非常に混乱する可能性があります。これを代替案と比較してください:

if (first_part_of_condition
    && second_part_of_condition) {
    statement_within_then_part;
}

これは少し奇妙に見えますが、条件の2番目の部分がステートメントの始まりではないことが非常に明確になります。

他のコンテキストでもこれを行いますが、インデントがあいまいなので、ifステートメントが最も重要です。もちろん、インデントまたはブレースの配置を変更することもできますが、これも奇妙に見えます。

tl; dr行の左端は、迅速な読解にとって重要であるため、左端に演算子を置くことは、これが文ではなく継続式であることを示す顕著なマーカーです。


面白い考えが、私は(で行わ場合は特にこれはかなり混乱見つけSTIL +-も単項演算子として理解することができました)。連続する行を目立たせるための通常の解決策は、行をさらにインデントすることです(つまり、2レベルずつ)。
コンラッドルドルフ

「条件式の2番目の部分はthen部分の最初のステートメントと混同されやすい。」:これは、「{」と「}」を垂直(同じ列)に揃えて開始と終了を行う場合には起こりません。ブロックのより明確に際立っています。
ジョルジオ

8

常に最初のものを使用します。その1で何をしているのかを明確にしたいのです。私がそれを見て、その1の上にテキストの壁があった場合、その1の使用に関しては何が起こっているのかわかりません。

'+'が1の隣にあると、明確な理由もなく「私はすべてあなたのコードの男だ...」と出かけるのではなく、少なくとも問題の1で何かをしていることが明らかになります。


出向...........
ジェームズ

7

行の最後にバイナリ演算子があるため、文が次の行に続くことを示すと、文が不完全になり、理解が非常に読みやすくなります。行方不明のセミコロンでは、すぐにそれを理解することはできません。

これは単に習慣の問題かもしれませんが、セミコロンを必要とする言語(シェルスクリプト、メイクファイル、Pythonなどの言語が広まっていることを考えるとかなり非現実的だと思います)だけで作業しない限り、おそらくその習慣もありません。

編集:Giorgioはコメントで優れた点を示しています。この使用法は、数学と自然言語の両方で一般的な句読点を反映しています。あなたは書くだろう

私は沈む
ので、泳いだ

あなたは書きません

沈む
ので、泳いだ


3
+1:行末の+は、オペランドのリスト内の2つの項目を区切るコンマとして読み取る傾向があります。このため、コンマを使用する場合と同様に、行の末尾に+を配置することを好みます(コンマで行を開始することはありません)。
ジョルジオ

@Giorgioこの点は非常に優れているので、答えを盗みました。あなたが私を許してくれることを願っています。
コンラッドルドルフ

先に行く:名誉を感じます。;-)
ジョルジオ

7
コードは英語ではないので、コーディング規則を正当化する方法として英語の構文規則を使用するのは間違ったアナロジーだと思います。末尾の演算子スタイルは好きではありませんが、KonradにはPythonのような言語について良い点があると認めています。
M.ダドリー

3
数学的な組版では、改行は常に演算子の前にあり、後にはありません。散文的な例では、演算子は「したがって」です。英語の散文では、コンマは基本的にブレスマークです。
ケビンクライン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.