コーディングトラブルの約70%はif文などでの{}省略
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/03/09(金) 14:02:01あとでコードを足さなければならない事態なんていくらでもやってくる。
他人がきちんと中括弧補ってくれるかどうかはわからない。
1行文だろうがなんだろうが
最初から中括弧をつけるクセをつけろ
0307デフォルトの名無しさん
2007/04/13(金) 19:56:09そういうモノなのかw
他言語の人(俺含)から見れば大量の括弧の方が目につくんだがな〜
0308デフォルトの名無しさん
2007/04/13(金) 20:56:19begin endが目につくpascalとか
:-が目につくprologとか
{}が目につくCとか
<>が目につくXMLとか
0309デフォルトの名無しさん
2007/04/13(金) 21:57:000310デフォルトの名無しさん
2007/04/14(土) 01:53:45class hoge { どわーーー}
という具合に1行に書かないといけなくなりますぞ。
0311デフォルトの名無しさん
2007/04/14(土) 09:42:140312デフォルトの名無しさん
2007/04/14(土) 09:43:53そういう言語は
・閉じ括弧が少ない場合はブロックが継続する
・構文でブロックを示すからendが来るまでブロックが継続する
のどちらかを備えてるだろ普通。
Tclは前者。
BASICやCOBOLは後者。
Rubyは両方使ってるな。
Pythonはインデントでブロックを示すんだっけ?
0313デフォルトの名無しさん
2007/04/14(土) 12:12:360314デフォルトの名無しさん
2007/04/16(月) 22:57:370315デフォルトの名無しさん
2007/04/17(火) 04:31:020316デフォルトの名無しさん
2007/08/31(金) 11:46:070317デフォルトの名無しさん
2007/09/01(土) 15:23:250318デフォルトの名無しさん
2007/09/01(土) 15:33:260319デフォルトの名無しさん
2007/09/01(土) 17:16:33K&R、省略しまくりじゃん。
0320デフォルトの名無しさん
2007/09/02(日) 06:09:15コードブロックよりもセミコロンがない言語が苦手だな
0321デフォルトの名無しさん
2007/09/02(日) 18:34:190322デフォルトの名無しさん
2007/09/02(日) 21:58:200323デフォルトの名無しさん
2007/09/02(日) 23:07:250324デフォルトの名無しさん
2007/09/03(月) 00:46:44○ if a then b else c;
× if a then b; else c; (コンパイルエラー)
Cはどっちも大丈夫
0325デフォルトの名無しさん
2007/09/03(月) 01:18:280326デフォルトの名無しさん
2007/09/03(月) 13:06:030327デフォルトの名無しさん
2007/12/31(月) 03:42:45セミコロン付けると、そこでif文が終わるから
「文頭にelseはおかしい」って言われるんだよね。
0328デフォルトの名無しさん
2008/03/05(水) 17:00:17; が文同士のセパレータではなく文の終端記号でしかないから、
b; が 1 文となって問題にならない、ってこと。
0329デフォルトの名無しさん
2008/03/15(土) 16:13:12プログラムの最後だろ?
0330デフォルトの名無しさん
2008/05/04(日) 13:30:52COBOLのIF文の歴史を知らないんだな。
0331デフォルトの名無しさん
2008/05/06(火) 17:30:21>>1の考え方が危険なだけ
0332デフォルトの名無しさん
2008/05/06(火) 17:42:390333デフォルトの名無しさん
2008/06/25(水) 14:44:13形式で決められるものは、決めればいい。
その分、考えないといけないことに頭のリソースを配分しようぜ。
0334デフォルトの名無しさん
2008/06/29(日) 01:35:51女性はブラジャーの着用を義務付けるという法律が
制定できないのと同じ。
ブラは時には非常に邪魔になる。
形式では決めることができないものは意外に多い。
0335デフォルトの名無しさん
2008/06/29(日) 02:50:06Windowsのメモ帳にたくさん毛が生えたようなテキストエディタを使ってコードを書く
という時点で、おかしいだろ。
0336デフォルトの名無しさん
2008/06/30(月) 18:35:16switch内のbreakは強制だっけ
0337デフォルトの名無しさん
2008/06/30(月) 22:41:090338デフォルトの名無しさん
2008/07/01(火) 03:21:06よくね〜よw。
なるべくブラ着用。elseの多用は可愛気がないぜ。といったところ。
0339デフォルトの名無しさん
2008/07/01(火) 04:43:44事故を未然に防ぐべく何かするのが第一だろ
いつまでも
紙に鉛筆でプログラムを書くレベルに留まるな
0340デフォルトの名無しさん
2008/07/27(日) 00:00:15なぜに?
0341デフォルトの名無しさん
2008/07/27(日) 02:59:30if () {
} else {
if () {
} else {
if () {
} else {
if () {
} else {
}
}
}
}
みたいにどんどんネストが深くなる。
0342デフォルトの名無しさん
2008/07/27(日) 03:00:38if () {
} else if () {
} else if () {
} else if () {
} else {
}
みたいに書けるんだけど
0343デフォルトの名無しさん
2008/07/27(日) 03:06:050344デフォルトの名無しさん
2008/07/27(日) 03:27:46>>341みたいにきちんとif文をネストするような表現とすることを
強制するべき。
>>342式を禁止するというか非推奨にするのは、それなりに根拠がある。
多くの場合、>>342の形式の場合、ロジックが練れていなく、
バグが多い割に修正が難しいから。経験的に言って>>341式のほう
が、バグも少なくなり、バグが出ても修正しやすいような気がする。
結論的に言えば>>342式を禁止するのは一定の意味を持つが
>>1を強制するのはやり過ぎかも。
0345デフォルトの名無しさん
2008/07/27(日) 04:11:17>>1強制なんてあり得ない
0346デフォルトの名無しさん
2008/07/27(日) 13:36:09それなら俺は {} 強制で else if 容認かな。
自分のバグ元としては {}なしのif より 比較に = 使っちゃう方が多いけど。
だから、エディタで[^><=]=[^=] を赤くなるようにしてる。
0347デフォルトの名無しさん
2008/07/28(月) 15:32:250348デフォルトの名無しさん
2008/07/28(月) 17:42:410349デフォルトの名無しさん
2008/07/28(月) 21:13:280350デフォルトの名無しさん
2008/08/04(月) 12:32:49if (A) { い
} else if (B) { ろ
} else if (C) { は
} else { に
}
ってさ、
if (A) { い }
if (!A && B) { ろ }
if (!A && !B && C) {は}
if (!A && !B && !C) {に}
ということなんだけど、その条件が分散して書かれているから、わかりにくいのよね。
ただのswitch-case的な使い方だと誤解して順序を変えてしまうと、意味が変ってしまう。
0351デフォルトの名無しさん
2008/10/01(水) 23:41:42else if (id == typeB &&){}
って書く奴いるけどなんでswitch文使わないの
バカなのねぇバカなの?
0352デフォルトの名無しさん
2008/10/02(木) 09:16:07妙な && が気になるが、if で書けば
・コードの行数が少なくて済むので見やすい
・スコープがしっかり認識できて良い
・シンタックスハイラトや自動インデントなど IDE によっては switch の対応が微妙
・if の方がコンパイラが最適化しやすい条件になっている
とかとか。分かってて書いている人なら、別に良いと思うけど?
0353デフォルトの名無しさん
2008/10/02(木) 22:17:54if(id == typeB)
と
if(id == typeA)
else if(id == typeB)
同じ意味だよね?
0354デフォルトの名無しさん
2008/10/03(金) 01:40:46if (id == typeA) {
...
id = typeHoge;
}
の場合は?
0355デフォルトの名無しさん
2008/10/06(月) 12:06:12idがconstなら同じ。そうでないなら、>354の可能性がある。
例えば、この関数では全く同じ。
void func(const int id)
{
if (id == typeA) {
funcA();
}
if (id == typeB) {
funcB();
}
}
0356デフォルトの名無しさん
2008/10/06(月) 12:18:01if(id == typeA)
if(id == typeB)
って、インデント付けると
if(id == typeA)
if(id == typeB)
だよな? 更に括弧も付けると
if(id == typeA) {
if(id == typeB) {
}
}
だよな?
0357デフォルトの名無しさん
2008/10/06(月) 13:00:09>353が>351を踏まえて書いたかどうかだな。
>353が>351を踏まえずに>356の意味で書いたのだとしたら、
if (id == typeA) if (id == typeB)
は(typeAとtypeBが等しいと言う無謀な前提を仮定しない限り)
if (0)と同じになってしまう。
0358デフォルトの名無しさん
2008/10/07(火) 18:07:30typeA != typeBでもid == typeAかつid == typeBだったりすると怖いけど
0359デフォルトの名無しさん
2008/10/09(木) 12:42:52この流れでその前提は、余りに阿呆過ぎる。
最早>351も>353もいないから真意は不明だが。
0360デフォルトの名無しさん
2009/04/08(水) 19:34:440361デフォルトの名無しさん
2009/08/26(水) 18:28:000362デフォルトの名無しさん
2009/08/31(月) 11:56:110363デフォルトの名無しさん
2009/09/01(火) 02:47:110364デフォルトの名無しさん
2009/09/01(火) 07:59:270365デフォルトの名無しさん
2009/09/01(火) 12:07:22そして成長しないまま{}を省略し続けると。
0366デフォルトの名無しさん
2009/09/02(水) 02:31:00詰め込み、使い回せる関数だけを外側に出そうとする癖がつく?
本当に使い回せるかどうかの判断は実は相当のベテランでも
ない限り難しいにも関わらず。
{}を付けない癖がつくと、すべて下請けに回そうというコード
になりがち。最初は調子が良いが硬直なコードになりがちなので
仕様変更時に泣きを見る結果になりやすい?
0367デフォルトの名無しさん
2009/09/02(水) 19:45:17構造もあやふやだろうし、{}無しで使ってコケる。それも勉強だろうけど、
{}を付けて処理範囲を明確にすれば、最低限コケることは無くなる。
{構造化を意識させることもできる(その地点からはだいぶ先の話だけど)。
0368デフォルトの名無しさん
2009/09/03(木) 23:09:26上級者はふつーに省略して、省略するなって主張してるのって、2chの名無しとか
素人くさいプログラム系のブログってイメージ。
0369デフォルトの名無しさん
2009/09/04(金) 02:03:580370デフォルトの名無しさん
2009/09/04(金) 20:36:44if(){
func1();
}
else
func2();
ふつうにインデントしてれば何も間違えよう無いし{}省略で
間違えたことなんて一度もねーぞ。
0371デフォルトの名無しさん
2009/09/04(金) 20:51:54皆さんは気にしなくていいですよ
0372デフォルトの名無しさん
2009/09/04(金) 23:38:11とても思えないんだが。
0373デフォルトの名無しさん
2009/09/05(土) 08:52:10{}省略で間違えることはあまり無い。
ただ、else節以降でインデントを間違えてるソースを見た事は2回ぐらいある。
あれは悩ましいからやめてくれ。
初心者のうちは間違いようの無いシンプルなルールで書いて、
他の部分に頭を使った方がいい。
もちろん天才とベテランは別。
0374デフォルトの名無しさん
2009/09/08(火) 09:41:31バグをバクとtypoするようなレベルの奴が言っても
0375デフォルトの名無しさん
2009/09/08(火) 12:26:480376デフォルトの名無しさん
2009/09/08(火) 14:08:44(_/ (ヽ'ヽ。 (_/ (ヽ'ヽ。 (_/ (ヽ'ヽ。
ヽ ゛д ノ ヽ ゛д ノ ヽ ゛д ノ <三倍に増えるぞな!
ノ ∪ | ノ ∪ | ノ ∪ |
,ゝ、 .ノ ,ゝ、 .ノ ,ゝ、 .ノ
|_( |_( |_(
0377デフォルトの名無しさん
2009/09/08(火) 22:26:47みっともね。
0378デフォルトの名無しさん
2009/09/09(水) 09:35:16手がすべったtypo、意図的なものとして定着したtypoならそうかもしれんが、明らかに違うよな。本人乙。
0379デフォルトの名無しさん
2009/09/09(水) 11:13:43JISカナ配列使いかも知らん。
0380デフォルトの名無しさん
2009/09/09(水) 11:59:17間違いは起こりうると証明してるようなもん。
0381デフォルトの名無しさん
2009/09/09(水) 12:02:32>そもそもコーディング時のミスの話してる時
「{}を省略することによる」という前提外すなよ。
0382デフォルトの名無しさん
2009/09/09(水) 14:42:400383デフォルトの名無しさん
2009/09/10(木) 09:22:190384デフォルトの名無しさん
2009/09/10(木) 11:42:18自分の前に使ってた人がカナロックしっぱなしで
うっかり「トントカイモ」とか入れちゃったとか、そういう被害にでも遭ったのか?
0385デフォルトの名無しさん
2009/09/10(木) 22:26:260386デフォルトの名無しさん
2009/09/12(土) 16:20:260387デフォルトの名無しさん
2009/09/14(月) 04:05:51解説してくれ。
0388最後の二つはNECとNTT
2009/09/14(月) 09:17:47トントカイモ→system
ハニリイト→files
パソ通の時代は、みんな覚えていたもんさw
ミイソの98でミミカ経由で繋いでたからね。
0389デフォルトの名無しさん
2009/09/14(月) 14:20:41リニトカとかスナミとかもやったなあ
0390388
2009/09/14(月) 15:18:380391デフォルトの名無しさん
2009/09/17(木) 11:51:39それより、結局処理追加する必要があると分かった時に挿入したり、
逆に一行でいいと分かった時に整合性のために削除してることが多いのに気付いて
めんどいから最近は {} 非省略派になった。
0392デフォルトの名無しさん
2009/09/17(木) 13:44:44if(hogehoge){
...;
...;
}
とか
if(hogehoge){ ...; }
とか。
ブレース使っても短い処理なら1行で記述できるし省略の必要性は全く感じてない。
0393デフォルトの名無しさん
2009/09/17(木) 13:52:53ときには、条件に一致した場合の処理を同一行に書く、上級糞コードも。
0394デフォルトの名無しさん
2009/09/17(木) 14:04:44もっとマシなコード書けよ。
くっだらねえ。
0395デフォルトの名無しさん
2009/09/17(木) 14:54:09統一感がなかったり、合理性がない書き方をする奴は確かにコード自体も質が悪い傾向にある。
ところでたまに
if (続行条件) {
続行処理...
} else {
終了処理...
}
みたいなのと
if (終了条件) {
終了処理...
}
続行処理...
どっちがいいのか迷うんだけど、(無駄にブロック作りたくないから後者にしてるけど)
こういう制御構文の使い分けのケーススタディみたいなのが
詳しく載ってるサイトとか書籍ってないのかな。
0396デフォルトの名無しさん
2009/09/17(木) 15:18:38ジョークかと思ったら、本気みたい。
0397デフォルトの名無しさん
2009/09/18(金) 09:51:54それだけじゃよく判らんが、無駄にブロックを作りたくないなら
if (! 続行条件) {
終了処理...
}
続行処理...
とするか
if (続行条件) {
} else {
終了処理...
}
続行処理...
としてもいいよね。
0398デフォルトの名無しさん
2009/09/19(土) 12:11:51マイクロソフトならやりかねない
0399デフォルトの名無しさん
2009/09/23(水) 11:58:270400デフォルトの名無しさん
2009/09/24(木) 00:02:47勘違いする人のためには elif が有ってもいいかもね。ダサイけど。
0401デフォルトの名無しさん
2009/09/25(金) 11:04:48少なくとも>395はelse ifの話なんて全然してないわけだが。
0402デフォルトの名無しさん
2009/09/25(金) 14:46:22書かれたコードを問題にしているのではない。
書いた阿呆の無能さを問題にしているのだ。
0403デフォルトの名無しさん
2009/09/27(日) 18:19:52一度間違ってソースが全部整形されてしまって、ヒストリで元に戻そうにも
そのミスをやってしまったのがかなり前だと判明したため泣きながら手作業で修正した
0404デフォルトの名無しさん
2009/09/27(日) 18:31:080405デフォルトの名無しさん
2009/09/28(月) 11:20:30今は必要なときに必要なところだけエディタで整形している。
0406デフォルトの名無しさん
2009/09/28(月) 21:29:02■ このスレッドは過去ログ倉庫に格納されています