中括弧は独自の行に表示する必要がありますか? [クローズ]
On 2月 14, 2021 by admin回答
ほぼすべての回答ここでは、「何をするにしても、1つか2つに固執する」というバリエーションを言っています。
それで、しばらく考えてみましたが、それほど重要ではないと認めざるを得ませんでした。 。次のことを理解するのは難しいと正直に言うことができますか?
int foo(int a, Bar b) { int c = 0; while(a != c) { if(b.value[a] == c) { c = CONST_A; } c++; } return c; }
他の人のことはよくわかりません…しかし、精神的にはまったく問題はありません。スタイルを切り替えます。コードの機能を理解するのに少し時間がかかりましたが、それはCのような構文をランダムに入力した結果です。 🙂
私のあまり謙虚な意見では、中括弧を開くことはコードの可読性とはほとんど完全に無関係です。上記のいくつかのコーナーケースでは、どちらかのスタイルが違いを生みますが、ほとんどの場合、空白行を慎重に使用することでそれがクリーンアップされます。
FWIW、作業中のコーディングスタイルはわずかに使用されますより構造化されたフォーム1と変更されたフォーム3。(C ++)
// blank line is required here if (x) { //This blank line is required y = z; } // blank line is required here too, unless this line is only another "}" if (x) y = z; //allowed if (x) y = z; // forbidden
フォーム2を強く好む人が、このバージョンのフォーム1を見つけられるかどうか知りたいです。空白行の方が視覚的な分離が強いからです。
コメント
- 例が示すように、インデントは中括弧よりも読みやすく重要です。実際、一部の言語では、ステートメントをネストするための唯一の方法でインデントが作成されます!
- わかりました。正直なところ、一貫性のない例は読みにくいと思います。それほど難しいわけではありませんが、場合よりも難しいです一貫性がありました。
- アルモに同意します。"は本当に難しいのではありません" 。"の場合は間違いなく難しい"、難しいことではありませんが。では、なぜ物事を難しくするのですか? "おもちゃ"の例では、もちろん人々はほとんど違いがありません。私の経験では、他の誰かから厄介なコードを継承し、彼らがメソッド1を使用した場合、ロジックに従うためだけに、先に進んでメソッド2に変換する必要が生じることがよくあります。それが頻繁に必要になるという事実のために;どちらの方法が優れていて理解しやすいかという質問に自動的に答えます。
- @Dunk:このような無関係な詳細を入れ替えることで著しく改善されるコードを理解することはできません。
- @jkerian -どうやらあなたは'プロジェクトや会社を長く離れた他の人から多くのコードを継承していないようです。 '数年の経験を持つ人が、そのような状況に遭遇しないことは理解できません。しかし、繰り返しになりますが、'の作業状況は人によって異なります。また、"正式な"コードレビューを行う必要がある場合は、フォーマットによって大きな違いが生じます。コードを自然に読めることは非常に重要です。確かに、一時停止して中括弧を一致させることを考えることはできますが、それではプロセスが遅くなります。 1つの方法では一時停止は必要ありませんが、他の方法では一時停止が必要です。そのため、'他の選択肢が推奨される理由がわかりません'。
回答
これがまだ提起されていないことに驚いています。ブロックをより簡単に選択できるので、2番目のアプローチを好みます。
中括弧が同じ列でそれぞれの行で開始および終了する場合、余白から選択するか、列0にカーソルを置いて選択できます。これは通常、マウス選択以下のより広い領域になります。キーボード選択によるキーストローク。
元々、条件付きと同じ行で中括弧を使用していましたが、切り替えると、作業速度が速くなることがわかりました。もちろん、昼と夜ではありませんが、条件文の横にある中括弧を使用すると、作業が少し遅くなります。
コメント
- 私のような古いタイマーは、中かっこがどこにあっても、3つのキーストロークを使用してブロックを選択します。
回答
私は個人的に2番目の方法が好きです。
しかし、私が説明する方法は、最高の雇用保障をもたらすので、私の意見では最高です!私の大学の仲間の学生が宿題を手伝ってくれるように頼みました。これが彼のコードの様子です。プログラム全体が1つのブロックのように見えました。興味深いのは、彼が作成したプログラムのバグの95%が中括弧の不一致によるものだったことです。中括弧が一致すると、他の5%は明らかでした。
while(1){ i=0; printf("Enter coded text:\n"); while((s=getchar())!="\n"){ if(i%1==0){ start=(char*)realloc(input,(i+1)*sizeof(char)); if(start==NULL){ printf("Memory allocation failed!"); exit(1);} input=start;} input[i++]=s;} start=(char*)realloc(input,(i+1)*sizeof(char)); if(start==NULL){ printf("Memory allocation failed!!!"); exit(1);} input=start; input[i]="\0"; puts(input);
コメント
- 悪い、悪い、私はひどい、ひどい例を意味します。問題は中括弧ではありません! 'はクレイジーなインデントです!
- @MartinhoFernandes中かっことインデントを一緒に配置すると思いました…
- 必ずしもそうとは限りません。 ..上記を適切にインデントしてから、中括弧のスタイルをランダムに切り替えると、'理解できる'ことがわかります。
- 実際、これについて考えることで、この質問に対する私自身の答えが生まれました。
- "彼が作成したプログラムのバグの95%は、中括弧の不一致"-インタープリター言語のみで、コンパイルされません。
回答
私の個人的な好みは最初の方法です。おそらくそれが私が最初にPHPを学んだ方法だからです。
単一行のif
ステートメントの場合、使用します
if (you.hasAnswer()) you.postAnswer();
you.postAnswer();
ではなく、何かyou.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType);
など、もっと長くなります。おそらくfiに戻ります。最初のタイプ:
if (you.hasAnswer) { you.postAnswer(this.AnswerId, this.AnswerText, this.AnswerType); }
改行は使用しません。また、ステートメント。
if (you.hasAnswer()) you.postAnswer(); else you.doSomething()
は理論的な可能性ですが、私が使用したことのないものです。これは、
if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); }
回答
に変換する必要があります。最初の方法。
2番目の方法を見ると、未使用の行(最後の閉じ中括弧以外に中括弧しかない行)があるため、の連続性が損なわれているように感じます。コード。通常、コード目的の分離などを意味する空の行に特別な注意を払う必要があるため、速く読むことはできませんが、「この行は中括弧に属している」(意味を繰り返すだけです)
とにかく、テキストを書くときと同じように…段落の先頭に空白行がある場合(段落変更の二重記号)、段落の先頭にインデントを追加することは不要です。適切にインデントしているときに中括弧のために行を無駄にする必要はありません。
さらに、すでに述べたように、画面により多くのコードを収めることができますが、そうでなければ少し逆効果になります。
回答
プラットフォーム/言語/規則によって異なります
Javaの場合:
void someMethod() { if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } }
C#の場合
void someMethod() { if (you.hasAnswer()) { you.postAnswer(); } else { you.doSomething(); } }
Cの場合:
void someMethod() { if (you_hasAnswer()) { you.postAnswer(); } else { you_doSomething(); } }
Javaの人がC#コードで自分のスタイルを使用するのは嫌いです。その逆も同様です。
コメント
- Cスタイルのal方法は私を悩ませました。一貫性を保つ!
回答
私が言えるのは、あなたが方法#3のファンなら、あなたは地球上のすべてのIDEコードフォーマッターによって迫害されるでしょう。
回答
私は単に最初の方法を使用します。よりコンパクトで、画面上でより多くのコードを使用できます。私自身、中括弧のペアリングで問題が発生したことはありません(条件を追加する前に、常にif
ステートメントと一緒に中括弧を書き出します。 、およびほとんどの環境では、一致する中括弧にジャンプできます)。
中括弧を視覚的にペアリングする必要がある場合は、2番目の方法をお勧めします。 ただし、これにより一度に許可されるコードが少なくなり、より多くスクロールする必要があります。そして、少なくとも私にとっては、中括弧をきちんと揃えるよりも、コードの読み取りに大きな影響を与えます。スクロールが嫌いです。繰り返しになりますが、単一のif
ステートメントをスクロールする必要がある場合は、大きすぎる可能性が高く、リファクタリングが必要です。
ただし、すべての中で最も重要なことは一貫性です。どちらか一方を使用してください。両方を使用しないでください。
回答
12歳でプログラミングを初めて学んだとき、中かっこを付けました。次の行は、Microsoftのコーディングチュートリアルがそのようなものだからです。そのときも4スペースTABSでインデントしました。
数年後、JavaとJavaScriptを学び、同じ行に中括弧を追加するコードを見たので、変更しました。また、2スペースのスペースでインデントを開始しました。
コメント
- + 1、-1。どのエディターでもタブの長さを任意の長さに調整できるのに、なぜタブでインデントしないのですか?それ以外の場合は、8の真のインデントが好きな私たちの多くを導き、コードを呪います。
回答
中括弧を揃えたままにするが、スペースを無駄にしない4番目のオプションがあります。
if (you.hasAnswer()) { you.postAnswer(); i.readAnswer(); } else { you.doSomething(); }
唯一の問題は、ほとんどのIDEのオートフォーマッターがこれを窒息させることです。
コメント
- …これを窒息させるほとんどのプログラマーと同じように。
- それは恐ろしいようです。一番上に行を挿入したり、一番上の行を削除したりする場合は、余分な労力を費やす必要があります。'行を削除して先に進むだけでなく、覚えておく必要があります。中括弧を再挿入します。
- これは素晴らしいです!:)最初のスタイルよりも優れています!
- 名前もあるようです。 Horstman Syyle はウィキペディアで言及されています。私は'のようなコードベースで作業しましたこれ、'は本当に悪くありません使用します。
回答
プロジェクトに取り組んでいない限り、すべてはあなた次第です。コーディングの制約またはいくつかの標準は、そのプロジェクトに取り組んでいるすべてのプログラマーがコーディング中に従わなければならないプロジェクトマネージャーによって設定されています。
私は個人的に最初の方法を好みます。
また、3番目の方法で表示したいものが得られませんでしたか?
それは間違った方法ではありませんか?たとえば、状況を次のように考えます。
if (you.hasAnswer()) you.postAnswer(); else you.doSomething();
ここで、誰かが if ブロック?
その場合、3番目の方法を使用すると、コンパイラは構文エラーをスローします。
if (you.hasAnswer()) you.postAnswer1(); you.postAnswer2(); else you.doSomething();
コメント
- 誰かがやって来てやった場合、さらに悪いことになります:if(you.hasAnswer())you.postAnswer();そうでなければyou.doSomething(); you.doSomethingElse(); -'目が簡単に滑ってしまい、コンパイラが'どちらも役に立たない微妙なバグのレシピ
- @FinnNk:その通りです!
- 誰かが別のステートメントを追加したい場合は、中かっこを自分で入れることができます。彼の塩に値するプログラマーなら誰でもそれを理解できるはずです。
- 彼の3番目の方法が間違っていると言いたかったのです。
- @Robert Harvey、I '経験豊富なコーダーが、既存のコードを変更するときに中括弧を追加し忘れているのを見てきました。問題は、インデントが中括弧よりも意味の手がかりがはるかに強いことだと思います(特に、中括弧のスタイルが複数あるため)。そのため、'インデントは期待どおりに見えます。
コメントを残す