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

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

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

1行文だろうがなんだろうが
最初から中括弧をつけるクセをつけろ
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使い
0186デフォルトの名無しさん2007/03/11(日) 18:56:33
構造体自体を返さなくても、それを指すポインタ返せば記述は長くなりますやん。
0187デフォルトの名無しさん2007/03/11(日) 18:59:02
>>185
C++でも同じだろ。
(スマートポインタで返すって手も使えるけど)
0188デフォルトの名無しさん2007/03/11(日) 19:01:56
>>175
そんなん普通にコメントアウトでラベルつけときゃいいだけやん
0189デフォルトの名無しさん2007/03/11(日) 19:03:41
>>188
意味わからん
0190デフォルトの名無しさん2007/03/11(日) 19:30:28
>>189
int aho() /* teigi */
とかかな。
aho(); /* shiyou */

全部に書く気なんじゃない?
0191デフォルトの名無しさん2007/03/11(日) 20:13:31
lint用のコメントみたいだなw
0192デフォルトの名無しさん2007/03/11(日) 20:30:30
>>1
プログラマは信号は守るべきだが
小石を取り除くかどうかはプログラマしだいだ
尊敬するプログラマのソースを読め
0193デフォルトの名無しさん2007/03/11(日) 20:35:44
>>192
尊敬するプログラマはみんな省略してませんでした
0194デフォルトの名無しさん2007/03/11(日) 20:41:49
漏れその昔、ビル・アトキンソンをめちゃくちゃ尊敬してたが、
C系のコードは書いてたのかどうか知らん。
0195デフォルトの名無しさん2007/03/11(日) 23:10:46
defineで閉じてるのは軽くいらっとさせるね
if () {
...
#if 1
} else
#endif
...

}
GNU関連は関数なんかもこれで閉じてくるよね


0196デフォルトの名無しさん2007/03/11(日) 23:22:54
>>195
仕事でそんなコード書いてるヤツ見たら、思わずはり倒しちゃいそう。
0197デフォルトの名無しさん2007/03/12(月) 00:32:13
return_type
func_name(
 arg_type arg
)
{
}
はダメダメってことですね。
0198デフォルトの名無しさん2007/03/12(月) 01:23:06
>>197
なんで?
0199デフォルトの名無しさん2007/03/12(月) 01:47:52
つ >>172 >>177
0200デフォルトの名無しさん2007/03/12(月) 02:07:20
>>197
俺はよくそのスタイルで書く衝動にかられるけど、
引数リストの行末がカンマで統一できないのが
嫌でいつも思いとどまる。
0201デフォルトの名無しさん2007/03/12(月) 08:01:41
> 引数リストの行末がカンマで統一
そ、最後ね

arg_type1 arg1,
arg_type2 arg2,
arg_type3 arg3

最後のarg3だけカンマなしでないとエラー。よく引っかかる。
配列の初期化子は最後のカンマOKなのにね。
0202デフォルトの名無しさん2007/03/12(月) 14:22:14
>>187
C++ 使ってると C の頃の感覚が麻痺して
抵抗なく string 返したりもできるようになる筈w
0203デフォルトの名無しさん2007/03/12(月) 15:09:03
オーバーヘッドなんて高が知れてるし、参照もポインタも使わずに
構造体やクラスを平気で返しちゃうぜ
0204デフォルトの名無しさん2007/03/12(月) 20:35:18
C++クックブックって本は、コンテナクラスは 全部引数でやり取りしてた。
0205デフォルトの名無しさん2007/03/12(月) 21:53:09
何でスレ伸びてるの?
0206デフォルトの名無しさん2007/03/12(月) 23:23:25
>>76
それおまえさんが強要して出させたんじゃないか?
0207デフォルトの名無しさん2007/03/13(火) 00:04:04
>>206
スレタイの数字の話じゃねえの?
0208デフォルトの名無しさん2007/03/13(火) 01:41:45
ぶら下がりelseに起因するbug発生回数は一回
その他の中括弧の省略に起因するbug発生回数は零回
0209デフォルトの名無しさん2007/03/13(火) 02:09:20
どんな書き方をしてもバグを生み出さないソースを書けばいいだけ
どんなにファクターがありそうでも最終的にそこに原因を求めるのは結局責任転嫁だ
0210デフォルトの名無しさん2007/03/13(火) 02:10:42
読みやすい書き方はそれだけでバグの抑制になる
0211デフォルトの名無しさん2007/03/13(火) 05:57:35
インクリメントとかシンプルな処理なら{}なんて使わなくても
使うのは数行に渡る見込みがあるか後々まで残す部分くらいだな
0212デフォルトの名無しさん2007/03/13(火) 08:01:55
やはりbegin〜endの勝利だな
0213デフォルトの名無しさん2007/03/13(火) 09:26:05
Python最強ということで
0214デフォルトの名無しさん2007/03/13(火) 09:35:13
schemeもええで
0215デフォルトの名無しさん2007/03/13(火) 09:48:34
ソレより、 && || をif文中で使ってる場合の方が多いように思うけどな

特に俺が書いた時に無かったのに後から何気なく追加されたような場合、たいてい間違ってるゾ!
0216デフォルトの名無しさん2007/03/13(火) 11:02:09
70%はそっちの方だね。
0217デフォルトの名無しさん2007/03/13(火) 11:08:56
まだ && ||を2行に別けて書く人はミスが少ない気がする

if( ( hoge == hage )
&& ( hige ) ){
}
みたいに
0218デフォルトの名無しさん2007/03/13(火) 11:12:50
こういうのは程度の問題で、複雑な式は分けて書いた方が理解しすいだろうが、
シンプルな式まで徹底して分ける事に決めちゃったりしたら、かえってコードの意図がわかりにくくなると思う。
{}の省略についても同様。
0219デフォルトの名無しさん2007/03/13(火) 11:39:36
if修飾子が使える言語(PerlやRuby)だと、やることが1つなら修飾子にして
おいて、増えたら複文支配のifに書き換える、という使い分けが出来るな。
0220デフォルトの名無しさん2007/03/13(火) 13:07:20
むしろ後置ifが使えるなら、
前置ifでの単文修飾は不可能にすべきじゃなかろうか。
0221デフォルトの名無しさん2007/03/13(火) 13:16:18
perlはそうだね。
0222デフォルトの名無しさん2007/03/13(火) 14:06:40
俺はPBP6.2の通りに後置ifはnext, last, redo, return, goto, die, croak, throwでのみ使うようにしてる。
メンテ不要な書き捨てプログラムはこの限りでないがw
0223デフォルトの名無しさん2007/03/13(火) 22:45:43
if文より型の変換とか値入れてない変数とかの方がやばい気がする。
0224デフォルトの名無しさん2007/03/13(火) 22:46:14
全ての分岐をgoto文で書いてやる
0225デフォルトの名無しさん2007/03/13(火) 23:02:08
gotoが必要なのは多重ループを抜けるときだけだよな。
0226デフォルトの名無しさん2007/03/13(火) 23:14:43
ttp://gedo-style.net/g/?v=361721&d=d.jpg
0227デフォルトの名無しさん2007/03/14(水) 00:27:29
多重ループは関数化で対処
0228デフォルトの名無しさん2007/03/14(水) 04:07:30
gotoはエラー処理と字句解析のハードコード。
0229デフォルトの名無しさん2007/03/14(水) 04:48:53
if()
{
;
}

↑これは異端か?
0230デフォルトの名無しさん2007/03/14(水) 05:29:00
異端もクソも、なぜ if() の中を ! で否定しないよ
0231デフォルトの名無しさん2007/03/14(水) 06:53:59
頭ごなしに否定するのはよくない
0232デフォルトの名無しさん2007/03/14(水) 10:31:18
ケツで否定してやる。

{ ; } unless hoge;
0233デフォルトの名無しさん2007/03/14(水) 10:41:26
{ } を付けたら女の子にもてるようになりました
0234デフォルトの名無しさん2007/03/14(水) 17:09:17
スーパー括弧閉じ
0235デフォルトの名無しさん2007/03/14(水) 17:26:03
括弧閉じはコッカって言わないか?
0236デフォルトの名無しさん2007/03/14(水) 19:21:20
通じるけど恥ずかしいから自分では言わない。
0237デフォルトの名無しさん2007/03/15(木) 16:12:21
>>235
それは局所的にしか通じないだろう。
0238デフォルトの名無しさん2007/03/15(木) 16:57:00
sh 系だとそんなだよな。

esac ってなんだろと。
0239デフォルトの名無しさん2007/03/15(木) 17:06:36
fi はまあ想像つくけどなw
0240デフォルトの名無しさん2007/03/16(金) 22:54:36
言語規格の中で if() ; 形を if() { ; } の省略形であるとしている
言語はどんなものがありますか。
0241デフォルトの名無しさん2007/03/16(金) 23:11:15
そんなのあるのか?
0242デフォルトの名無しさん2007/03/17(土) 13:24:53
お前らエディタのソース整形機能とか使ったことなさそうだな
0243デフォルトの名無しさん2007/03/17(土) 13:25:18
COBOLにそんな機能ねーよ
0244デフォルトの名無しさん2007/03/17(土) 13:43:26
ソース整形が必要なほどのクソコードに出会ったら
とりあえず腹をくくることにしている。
0245デフォルトの名無しさん2007/03/17(土) 13:51:37
おまえはソース整形について誤った観念を抱いているのではないか
0246デフォルトの名無しさん2007/03/17(土) 13:52:38
ソーッスねぇ
0247デフォルトの名無しさん2007/03/17(土) 14:27:11
ソース整形したらテスト全部やり直しなんだけどそれついてはどうなの?
0248デフォルトの名無しさん2007/03/17(土) 14:29:25
>>247
なんで?
0249デフォルトの名無しさん2007/03/17(土) 14:33:05
>>248
あ?遊びでやってんじゃねーんだぞ
0250デフォルトの名無しさん2007/03/17(土) 14:34:46
>>247
kwsk
0251デフォルトの名無しさん2007/03/17(土) 14:37:04
バイナリがかわんなきゃよくね?
or
テストケース再実行すりゃいいじゃん

好きなほうで
0252デフォルトの名無しさん2007/03/17(土) 14:40:18
テストする前に整形すればいいだけじゃん
0253デフォルトの名無しさん2007/03/17(土) 14:41:43
リポジトリにコミットするとき、自動的にソース整形すりゃよくね?も追加
0254デフォルトの名無しさん2007/03/17(土) 14:45:04
>>247は自動化したテストですらとんでもなく時間を食う
ちょー大規模プロジェクトをやってるんだろう。
0255デフォルトの名無しさん2007/03/17(土) 14:49:30
>>251
>バイナリがかわんなきゃよくね?
これは納得できる

>テストケース再実行すりゃいいじゃん
手動のテストケースもあるから無理
仮に全自動であったとしても時間無駄にしてんじゃねーよ

>>252
ソース整形しただけの個所までテストするのが時間の無駄

>>253
改行した瞬間に自動的にソース整形するVBが最適解か……orz
0256デフォルトの名無しさん2007/03/17(土) 14:53:35
やはりpythonが・・・
0257デフォルトの名無しさん2007/03/17(土) 14:54:49
>>255
時間かかるテストは、夜走らせとけよ

エディタorIDE
↓
リポジトリ(コミット時にソース整形)
↓
CI(夜間に自動ビルド+テスト)

これ大抵の言語でいけるだろ。
0258デフォルトの名無しさん2007/03/17(土) 16:57:26
バイナリが変わるようなコード変換はもはや整形じゃないと思う
0259デフォルトの名無しさん2007/03/18(日) 01:12:11
>>175
そんなの^(unsigned)*[int|char|short|float|double] [a-Z]+[0-9|a-Z]*\(とかで検索すればいいんじゃね?
0260デフォルトの名無しさん2007/03/18(日) 01:20:04
無理やりこうやればできるとかいう話じゃなくってさ。
viでは検索が日常的なカーソル移動手段のひとつなんだよ。
0261デフォルトの名無しさん2007/03/18(日) 01:34:57
>>259
ぜんぜんだめ。おはなしにならない。
0262デフォルトの名無しさん2007/03/18(日) 01:51:22
C言語は文脈自由文法だから正規表現で完璧にマッチさせるのは不可能
0263デフォルトの名無しさん2007/03/18(日) 05:35:27
>>262 こういう話疎いので、初心者にも解るように解説してください。
0264デフォルトの名無しさん2007/03/18(日) 07:02:14
>>263
コンパイラの本でも嫁
■ このスレッドは過去ログ倉庫に格納されています