私は全ての関数の波括弧の開始位置を丸括弧の次の行にしていますが、丸括弧のすぐよこにするメリットは何でしょうか?
そちらの方が見やすいという人のためでしょうか。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答7件
0
ベストアンサー
if
やfor
やwhile
などでは同一行に書くというスタイルでやっている場合は、揃えるのが一貫性のある姿勢だと思います。これらでも行を分けるのであればどうぞ分けてください。
ちなみに「関数定義のときだけ行を分ける」書き方にも理由があって、いにしえのC(ANSI Cの前)では関数の引数リストが
C
1void foo(hoge, fuga, ...) //引数は名前だけの宣言 2int hoge, fuga; //型の宣言です 3... 4{ 5 ... 6} 7
という構文だったので、関数定義では自然と波括弧を行を分けて書くようになり、その名残が今も続いている・・・とされていると思います。関数定義以外では同じ行に書くのは、紙媒体で出版するときに行数を圧縮するためみたいなことが言われていますね。
私は学び始めの頃この意味がわからなかったので、すべて行を分けないで丸括弧の隣に書く書き方で覚えてしまいましたが。
K&Rスタイルで納得できないこと - 涼の成長記録
字下げスタイル - Wikipedia
プログラミング言語C - Wikipedia
投稿2019/12/01 23:24
編集2019/12/02 00:13総合スコア30935
0
いろいろな人がいるので、いろいろな流儀があります。
Man page of INDENT
{
を同じ行に書く理由は行数を減らすためです。画面は有限なので、情報の少ない行(括弧だけの行)を減らしたほうが、1画面で見えるコード量が増えますので、読んだりデバッグしたりするとき効率的です。。
また、if
やwhile
等と同じ行に{
を書くスタイルの場合は、それと統一するという意味があります。
投稿2019/12/01 22:50
総合スコア85886
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
見やすいと感じるかどうかは人それぞれですね。今どきの若い人には想像もつかないことでしょうが、昔は「80桁×25行」が画面に表示できる最大文字数だったことが長い期間ありました。その中に納まるようになるべく行数を減らそうとしたものです。その習慣が今も続いているのでしょう。どこぞのコーディング規約では「1行は80文字以内」などと決めているところもあります。
まぁ、おそらく多くの人は特にメリットとか気にせずに、単に勉強の過程で参考にしたソースコードが制御文と同じ行に{
を書くスタイルだったので、そういうものだと思ってそう書いているだけだとは思いますけどね。あとは、今どきのテキストエディターには大抵コード整形機能が付いていますが、デフォルトの設定では制御文と同じ行に書くスタイルのものも結構あります。
ちなみに、私も{
は改行してから書く派です。ブロックの範囲が一瞬で判るのでプログラムの制御構造が把握しやすいということと、行単位での編集がしやすいというメリットがあります。デバッグの際も、「一時的にif文をコメントアウトしてブロックの中身を実行させてみたい」などということがやりやすいですし。
投稿2019/12/02 05:26
編集2019/12/02 05:28総合スコア5944
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんにちは。
既に複数の回答があるように、 {
を関数定義と同じ行に書くのは書式ルールを単純化しつつ行数を削減できるというメリットがあります。これはこれで有用な視点と思います。
ただ、私は個人的な見解ですが、それはメリットよりデメリットの方が痛いと思うので、逆の視点を補足させていただきます。
C++で複雑な引数を持つ関数や複雑な条件式を書いていると、なが~~~~い文が超痛いです。
下記は今サンプルとして書いただけですが、実際のプログラミングの場面ではこれを遥かに越えるものが結構発生します。
C++
1#include <iostream> 2#include <functional> 3#include <vector> 4#include <list> 5 6std::list<int> extract(std::vector<int> const& iVector, std::function<bool(int)> iCondition) { 7 std::list<int> ret; 8 for (int elem : iVector) { 9 if (!iCondition(elem)) { 10 ret.push_front(elem); 11 } 12 if (iCondition(elem)) { 13 ret.push_back(elem); 14 } 15 } 16 return ret; 17} 18 19int main() { 20 auto extracted = extract({-152, 44, 9, -29, 33}, [](int x){return x >=0;}); 21 for (int item : extracted) { 22 std::cout << item << "\n"; 23 } 24}
そのような時は、パラメータ毎に改行する人が多いと思いますが、その際に) {
という行は泣きたくなる程 意味不明なので、パラメータ毎の改行をするのかどうかその度に悩みます。
更に、上記はまだforブロックやifブロックの中が僅かしか無いのでましですが、数行~十数行を越えてくるとブロックの区切りを見落とし易くなりますが、{
と}
のインデントを揃えることで対策になります。
C++
1#include <iostream> 2#include <functional> 3#include <vector> 4#include <list> 5 6std::list<int> extract 7( 8 std::vector<int> const& iVector, 9 std::function<bool(int)> iCondition 10) 11{ 12 std::list<int> ret; 13 for (int elem : iVector) 14 { 15 if (!iCondition(elem)) 16 { 17 ret.push_front(elem); 18 } 19 if (iCondition(elem)) 20 { 21 ret.push_back(elem); 22 } 23 } 24 return ret; 25} 26 27int main() 28{ 29 auto extracted = extract({-152, 44, 9, -29, 33}, [](int x){return x >=0;}); 30 for (int item : extracted) 31 { 32 std::cout << item << "\n"; 33 } 34}
ただ、流石に下記は間延びしすぎて「見苦しい」レベルになので悩ましいのですが、私は長い文の分割に悩まないことやブロックの見落としを回避する方を優先することにしています。
C++
1if (foo) 2{ 3 bar(); 4} 5else 6{ 7 baz(); 8}
投稿2019/12/02 04:39
編集2019/12/02 05:31総合スコア23272
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
要するに関数の「宣言」を関数ブロックに含むかどうか、ということなんですけど、全体で統一が取れているならどっちだっていいと思います。
個人的には改行しない派です。if や for, while でも改行しないので、それと合わせている感じです。
if で改行しないのは、
C
1if (...) { 2 ... 3} else { 4 ... 5}
と、ブロックの区切りが一行にまとまるから……ですかね。これが
if (...) { ... } else { ... }
と、とくに else の部分が間延びしてしまう感じがします。(else if なら見やすいかも知れませんが)
投稿2019/12/02 00:37
総合スコア13703
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/02 12:31