トップページ⇒tech
408コメント99KB

コーディングトラブルの約70%はif文などでの{}省略

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2007/03/09(金) 14:02:01
自分は1行しか書かないつもりでも
あとでコードを足さなければならない事態なんていくらでもやってくる。
他人がきちんと中括弧補ってくれるかどうかはわからない。

1行文だろうがなんだろうが
最初から中括弧をつけるクセをつけろ
0086デフォルトの名無しさん2007/03/10(土) 00:47:05
そんなに1行にしたいなら改行しなきゃいいだけじゃん。
0087デフォルトの名無しさん2007/03/10(土) 00:48:04
みんな好きだねこういうスレ。
レスの伸びること伸びること。
0088デフォルトの名無しさん2007/03/10(土) 00:49:25
>>85
お前はコードレビューの時につまんない俺流コーディング規則を得意げに解説したりするんだろw
聞いてる人うんざりだろうなwww
0089デフォルトの名無しさん2007/03/10(土) 00:50:02
>>87
知識が無くても話せるからねw
0090デフォルトの名無しさん2007/03/10(土) 00:50:24
コーディング云々よりも、嘘つきの方が遙かに厄介。
0091デフォルトの名無しさん2007/03/10(土) 00:52:52
>>88
お前にいいものやるよ。

 つ [鏡]

お前の書き込み見てる人うんざりだから。
0092デフォルトの名無しさん2007/03/10(土) 00:58:18
>>1のように自分のミスを他人のコードのせいにして、非を認めずに言い訳し続けたり、
何の根拠もない数字を持ってきて嘘をついたりする人間がプロジェクトに混ざっていると、
非常に迷惑極まりない状態になる。
0093デフォルトの名無しさん2007/03/10(土) 01:03:59
有名ソフトや書籍でも、一行の場合は{}は省略してるのは多いな。
まあ、コーディングルールでも、どうでもいい部分だろな。
これは。
0094デフォルトの名無しさん2007/03/10(土) 01:10:14
>>77
えええええええ

そんなあほらしい規約があるのか。。
驚愕
0095デフォルトの名無しさん2007/03/10(土) 01:14:03
>>94
多少、あほな規約でもちゃんと一貫して守られてさえいればおk。
まぁ、厳しく管理してない限り、たいていなし崩しになっちゃうんだけどな。
0096デフォルトの名無しさん2007/03/10(土) 01:17:27
>>95
> あほな規約でもちゃんと一貫して守られてさえいればおk。

そんなことねーよ。
0097デフォルトの名無しさん2007/03/10(土) 01:19:23
linuxカーネルは、1行の場合は省略だね。
そうじゃないと、コミッタに罵倒されてパッチを受け付けてくれなかったり。
まぁlinuxの場合、インデントは8でタブで無いといけないという決まりもあるので、
読み間違えることは、まず無いのだが。
自分はドライバ書いてるが、そういう文化があるから、Cの場合は省略することが多いね。

でもJavaでは絶対省略しない。ていうか許している仕様が理解できない。
あと、elif とかをなんで用意しなかったのか、謎でしょうがない。
三項演算子もJavaの場合は使わないな。
0098デフォルトの名無しさん2007/03/10(土) 01:30:23
既にある規約を、そのやり方ではミスが増えるとか主張して、
自分流のやり方を押し通そうとする奴がいるが、
いままでそんな問題はなかったからとみんなになだめられても、
絶対に考えを曲げずに最後にはふてくされる。
はっきりいってこういう奴は使えない。
0099デフォルトの名無しさん2007/03/10(土) 01:39:40
>>98
>いままでそんな問題はなかったからと

ヘボいところは、自分らがいかにヘボいか理解できないからなぁ。

まあ、そういう所でやり方を変えようなんて怖くていえないけどな。
当たり前のことができずにトラブって「なんでやり方かえた→言い出したヤツはだれだ」
って展開になりがち。
0100デフォルトの名無しさん2007/03/10(土) 01:39:50
現場の状況に合わせて柔軟に対処できない奴はあらゆるトラブルの原因になる。
0101デフォルトの名無しさん2007/03/10(土) 01:42:43
Perlの
〜if ...;
って何気に最強だな。
0102デフォルトの名無しさん2007/03/10(土) 01:45:51
>>99
規約を変えたければ管理する側に回ってからにしないと統率がとれなくなるだろ。
主張が通らない時点で、その権限が無いことが理解出来ないのが問題なんだよ。
自分の言っていることが正しいと思いこんで、自分勝手な行動をしているという認識がない。
0103デフォルトの名無しさん2007/03/10(土) 01:53:47
>>102
いや、そこんとこは誰も問題にしてないから。
0104デフォルトの名無しさん2007/03/10(土) 02:49:26
クラスの使い方覚えてホイホイ作りまくってたら
「解かりにくいわ!」って殴られた。・゚・(PД`q。)・゚・
0105デフォルトの名無しさん2007/03/10(土) 03:34:25
>101
Rubyにもあるな。俺は and 派だが。
0106デフォルトの名無しさん2007/03/10(土) 03:44:40
アホなルールもあるこたあるからね。
1ファイルにつき1関数とか、
関数に分けてはいけない(mainだけにしろ)とか、
関数名・変数名は紙ベースの台帳管理で関数はfxxxx変数はvxxxx(xxxxは数字)とか、
こういう規則はどうなんだろう。理にかなっているのかなあ。

こういうのはやめてもらいたいと思わない?

こういう底辺な現場からおさらばして10年以上になるけど、
まだこういう現場は残っているのだろうか。

まあif以下の文で複文でない場合も{}で囲むことなんてルールは、
あってもなくてもさほど害がないルールではあると思うけどもね。
境界はどの辺にあるんだろうね。
0107デフォルトの名無しさん2007/03/10(土) 03:52:37
>関数名・変数名は紙ベースの台帳管理で関数はfxxxx変数はvxxxx(xxxxは数字)とか、

これは実際に見るまでなかなか信じがたかったが、ホントにやってるとこあるのな。
漏れが見たのはJavaでの開発だった。
0108デフォルトの名無しさん2007/03/10(土) 03:59:39
>>77
QB登場以前のBASICかよ。
0109デフォルトの名無しさん2007/03/10(土) 04:05:35
C++/Java/C#使いのみんなに聞きたい。
自動変数のスコープを限定するためだけの{}使うよな。な。
仕事で使ったら、「この意味不明な{}は何なのか説明しる」って同僚に詰め寄られたんだが……。
0110デフォルトの名無しさん2007/03/10(土) 04:38:07
>109
俺も使うことはある。特にC言語や、1つのメソッドが大きくなる時は。
ただ、Javaであまり必要に感じたことは無い。
privateメソッド複数作って、処理分けちゃうことが多いかな。
0111デフォルトの名無しさん2007/03/10(土) 04:39:32
>>109
漏れはけっこう使う。

int n;
{
 // 一時的な変数なんかも使って n を初期化するコード
}

// n を使うコード

とか。
書いてみて思ったより長かったらそのまま別の関数にするけど。
0112デフォルトの名無しさん2007/03/10(土) 04:56:00
>>107
そういう職場ってそのうち慣れますか?
それともとっとと逃げ出すのが正解ですか?
0113デフォルトの名無しさん2007/03/10(土) 05:00:10
>>112
そこに骨を埋めるつもりならがんばって慣れないと。
いずれ他所へ行くつもりなら慣れちゃったら後が大変そう。
0114デフォルトの名無しさん2007/03/10(土) 05:08:38
……後者を選ぶことにします
0115デフォルトの名無しさん2007/03/10(土) 05:55:22
>>110
そうしたくなったときというのは、
そこで関数を分けるべき時だと思っているので、
ほとんどの場合は括りだして別の関数に仕立て上げちゃう。

もちろんほんのちょっとスコープを限定したいというときは、
その限りでないけど。
0116デフォルトの名無しさん2007/03/10(土) 05:58:01
>>107
それをやっているところはコボラーが仕切っていると考えてほぼ間違いないです。

あいつらオブジェクトがどうのとかいう以前に関数をわける利点とか、
もっと以前にわかりやすい名前をつけるとかスコープとかいうことを知らん。
0117デフォルトの名無しさん2007/03/10(土) 06:34:15
このスレおもすれえ
0118デフォルトの名無しさん2007/03/10(土) 06:36:52
>116
しょうがないじゃん、COBOLの仕様にはグローバル変数と
引数の無いサブルーチンしか無いんだから…
0119デフォルトの名無しさん2007/03/10(土) 07:01:39
うざい上司にはインデントで訴えかけるに限る

hoge.each do |foo, bar|
          fuga
      piyo
    hogera
   end

      piyo
hoge.to_a.each do |foo,bar|
       foo
 poi;   bar;   poi
qwe;           end
0120デフォルトの名無しさん2007/03/10(土) 08:11:08
>>94 >>108 30年以上前かららしいから、そんなところでしょう。
COBOLで IF CC EQUAL DD PERFORM YY ELSE PERFORM ZZ. の名残だと思う。
テスト、デバックがこの方がやりやすいからというのが積極的な理由。
ただしbreakする時が大変。
0121デフォルトの名無しさん2007/03/10(土) 10:11:27
http://www.mono-project.com/Coding_Guidelines#Where_to_put_braces

2つ目のgoodがbadだぜ
0122デフォルトの名無しさん2007/03/10(土) 12:04:17
Coding Guideline であって Coding Convention じゃないんだな。
それくらい大きなオープンソースプロジェクトともなると、規約にしたところで従わない奴が続出するんだろうな。
0123デフォルトの名無しさん2007/03/10(土) 12:09:05
厳密にやろうとするなら、コミット前にチェックして(subversionなら
pre-commitフック、CVSだとcommitinfoか?)、従ってなければコミット
させないなんてトコもありそう。

0124デフォルトの名無しさん2007/03/10(土) 12:18:09
そこまでして関数名はf+数字を強制とかイヤすぎるなw
0125デフォルトの名無しさん2007/03/10(土) 12:31:50
JavaやC++で省略する奴とは仕事しない
0126デフォルトの名無しさん2007/03/10(土) 12:36:39
C++は省略しても普通だよね。
0127デフォルトの名無しさん2007/03/10(土) 12:38:07
if(flag) break;
0128デフォルトの名無しさん2007/03/10(土) 12:40:31
if(x)
    /* 何らかの処理 */;

って書くとうっかりしやすいけど、

if(x) /* 何らかの処理 */;

って必ず一行に収める習慣にすれば大丈夫な気がする。
0129デフォルトの名無しさん2007/03/10(土) 12:47:07
if(x) 何らかの処理1; 何らかの処理2;
と書く人がでてきちゃう。
0130デフォルトの名無しさん2007/03/10(土) 12:48:34
そもそもブロックなしのifに一行追加して、ブロック付け忘れてハマったなんて経験がない。
0131デフォルトの名無しさん2007/03/10(土) 12:51:29
御意
0132デフォルトの名無しさん2007/03/10(土) 12:58:06
>>129
「;」で区切って一行にいくつも文を書く人にはお勧めできない。
0133デフォルトの名無しさん2007/03/10(土) 13:28:01
if(cond) i = f(), j = g();

自分一人の開発ならこういうこともする。
読み間違えるとかありえない。
0134デフォルトの名無しさん2007/03/10(土) 13:29:32
無能コーダーにぐだぐだコーディング規則を語られるのウザいから
ソースはIDEが自動整形してくれ。
0135デフォルトの名無しさん2007/03/10(土) 13:45:22
括弧も自動で付けてくれるコードフォーマッタある?
0136デフォルトの名無しさん2007/03/10(土) 13:45:33
>>130

if(cond) {
hoge();
fuga();
}
を
if(cond)
hoge();
にしようとした形跡のあるコードで
if(cond)
hoge();
fugafuga();
と、インデントそのままでブレースだけとられたコードではめられた事がある。
じっさいにはもうちょっと長いんだけど。
0137デフォルトの名無しさん2007/03/10(土) 13:47:01
if(cond) {
  hoge();
  fuga();
}
と
if(cond)
  hoge();
fugafuga();
にしようとしたコードで
if(cond)
  hoge();
  fugafuga();
とね(ちくせう空白つめんな)
0138デフォルトの名無しさん2007/03/10(土) 13:49:17
>>135
ない
0139デフォルトの名無しさん2007/03/10(土) 13:52:23
お前ら省略って言うけど、Cの場合本来ifの文法は
if( 条件 ) 文;
だよな?
でもこれだけじゃ機能不足で、複数の文を置きたいから{ }でブロックにするんだよな?

由来とかはどうでもいいし俺も{ }は必ずつける派だけどな?
0140デフォルトの名無しさん2007/03/10(土) 14:22:20
>>139
確かに。
でもなんて表現したらいいんだろ?
0141デフォルトの名無しさん2007/03/10(土) 14:29:26
実績ある有名なソフトでも、普通に省略してあるんで、品質には関係ない部分だとは思うけどな。
0142デフォルトの名無しさん2007/03/10(土) 14:44:58
>>139
惜しい

if (式) 文

だ。最後にセミコロンはいらない。

0143デフォルトの名無しさん2007/03/10(土) 14:58:45
>>141
そもそも品質はテストによって担保するものでコーディングスタイルに依存するものではない。
ただ、よいコーディングスタイルであればミスを未然に防ぎやすいというだけのこと。
0144デフォルトの名無しさん2007/03/10(土) 15:03:38
そもそもスレタイの70%の根拠は何だ!
0145デフォルトの名無しさん2007/03/10(土) 15:12:06
>>144
そんなんどうせ >>1 の経験からのなんとなくだろ。
そんなのいちいち気にしてたら負けだ。
0146デフォルトの名無しさん2007/03/10(土) 15:18:05
だけど、
if(condition)
f1();
f2();
というコードに
if(condition)
f1();
f3();
f2();
なんて付け加えるプログラマっているか?
01471462007/03/10(土) 15:20:34
タブでなくスペースで送ってしまった。
>>146 は無かったことに。
0148デフォルトの名無しさん2007/03/10(土) 15:20:36
>>146
なにがいいたいのかよくわからん。必要応じて   を使ってくれんか?
0149デフォルトの名無しさん2007/03/10(土) 15:27:40
>>143
だから、{}を省略してもミスとは関係ないって判断してるんだろ?
有名ソフトで{}を省略するスタイルの人たちは。
0150デフォルトの名無しさん2007/03/10(土) 15:33:07
一人の天才で組んでるならともかく馬鹿と仕事するときは
馬鹿のレベルに合わせなきゃいけないんだよ
0151デフォルトの名無しさん2007/03/10(土) 15:34:10
>>149
有名ソフトでそうしているからっていう判断はあんまり感心せんな。
0152デフォルトの名無しさん2007/03/10(土) 15:36:50
>>150
短期的にはそれは認めるけど、今のこの業界は馬鹿を馬鹿のまま放置しすぎ。
0153デフォルトの名無しさん2007/03/10(土) 16:05:16
向上心が無いからバカ
0154デフォルトの名無しさん2007/03/10(土) 16:23:46
>>151
自分の経験も加えて。
2chのななしよりの意見より、実際に成果を出してるやつのスタイルのほうが参考になる。
0155デフォルトの名無しさん2007/03/10(土) 16:27:33
有名ソフトや書籍でも、省略する派としない派がある。
ようは、たいして重要じゃないってことだろ。
0156デフォルトの名無しさん2007/03/10(土) 17:48:19
う〜ん、おそらくループ変数なんかのためでしょうし、
そのほうが安全そうですが、そういうソースは見たことないです。
0157デフォルトの名無しさん2007/03/10(土) 19:51:17
>>1が70%の確率で{}省略でトラブルという告白スレ
0158デフォルトの名無しさん2007/03/10(土) 23:43:29
>>155
逆だろ
派閥が分かれるってことは懸案事項だってこと
0159デフォルトの名無しさん2007/03/10(土) 23:48:25
結論

コーディング規則を語るのは最下層の乞食コーダだけ。
0160デフォルトの名無しさん2007/03/11(日) 00:08:58
奴隷につなぐ鎖の強度を語るのはいずれ管理へ回る前途ある者
それを理解できない159は、奴隷以下の乞食か動物
0161デフォルトの名無しさん2007/03/11(日) 00:15:19
奴隷をつなぐ鎖なんて強度が十分であれば何を持ってきてもいい。
管理者はカタログから選んで持ってくればいいだけのこと。

鎖を再生産する管理者はバカ。
つながれてる鎖を自慢をする奴隷はマヌケ。
0162デフォルトの名無しさん2007/03/11(日) 01:16:33
何の比喩なのか、わかったようでわからないレスだな。
0163デフォルトの名無しさん2007/03/11(日) 01:18:14
わからないならレスしなくていいよ。
0164デフォルトの名無しさん2007/03/11(日) 01:20:33
逆切れするくらいなら比喩なんか書くなよ
0165デフォルトの名無しさん2007/03/11(日) 01:46:15
だそうだ。気をつけろよ>>160
0166デフォルトの名無しさん2007/03/11(日) 02:01:40
>>165は>>160か。そんなにくやしかったのか?
01671602007/03/11(日) 02:06:05
悔しくなんてねーよ、バーカ
0168デフォルトの名無しさん2007/03/11(日) 02:16:36
本物の160だけど、160以外のレスはつけてないけどね。
逆切れしたのはどいつだか知りたい。
あと、>>160の理由もね
0169デフォルトの名無しさん2007/03/11(日) 02:17:55
>あと、>>160の理由もね
まちがえた、
あと、>>165-166の理由もね
0170デフォルトの名無しさん2007/03/11(日) 02:27:14
160必死だなwwww
0171デフォルトの名無しさん2007/03/11(日) 03:58:07
だから{}でくくっておけばよかったんだ
0172デフォルトの名無しさん2007/03/11(日) 05:47:17
int
hoge ( void ){
}

みたいなのもやめてほしいな。
0173デフォルトの名無しさん2007/03/11(日) 05:52:03
括弧はともかく int と hoge の間の改行は正規表現で定義と使用が区別できるので vi 使いには便利。
0174デフォルトの名無しさん2007/03/11(日) 08:34:51
正規表現なら別に改行でなくてもいいんでは。
0175デフォルトの名無しさん2007/03/11(日) 08:48:19
>>174
vi使ってるときに、

/hoge で普通に検索
/^hoge で定義を検索

ていうことね。
0176デフォルトの名無しさん2007/03/11(日) 11:34:46
IDE使えよ乞食
0177デフォルトの名無しさん2007/03/11(日) 14:13:56
現実には戻りの型の方が関数名より長い事も多々あるからな。
intみたいな極端に短い物以外は改行で統一した方が見やすい。
0178デフォルトの名無しさん2007/03/11(日) 14:21:09
いやそんなにないだろ
0179デフォルトの名無しさん2007/03/11(日) 14:27:25
constもポインタも構造体もクラスもテンプレートも出てこないんですか。
APIやらライブラリ使ってりゃ長い名前の構造体なんていくらでもあるだろうに。
0180デフォルトの名無しさん2007/03/11(日) 17:24:51
構造体なんか返すなよ
0181デフォルトの名無しさん2007/03/11(日) 17:46:03
いくら長くても改行するほどじゃないな
というか、返す型情報まで含めてワンセットだから改行したくないなあ
0182デフォルトの名無しさん2007/03/11(日) 17:49:24
BSD系のカーネルのソースなんかは改行する事になってるね。
style(9)あたりに書いてある。
0183デフォルトの名無しさん2007/03/11(日) 18:19:02
>>180
32ビット値2つとか3つの組は結構返すよ
0184デフォルトの名無しさん2007/03/11(日) 18:50:28
>>158
どっちか片方に収束しないってことは、どっちでも大差ないんだよ。
どっちかが明らかによかったら、片方のスタイルは廃れてるだろ。
0185デフォルトの名無しさん2007/03/11(日) 18:54:17
>>180はC使い
■ このスレッドは過去ログ倉庫に格納されています