1 名前:デフォルトの名無しさん [2008/04/12(土) 23:20:23 ] 基礎編 * サブルーチン(関数)を長くする。数百行以上。 * コピペ多用 * ネストを深くする * フラグを多用する * マジックナンバーを使いまくる * 識別子(変数名、関数名)は意味不明に * グローバル変数つかいまくり まとめサイト www34.atwiki.jp/hetacode/ ↓以下、応用編、上級者編
2 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:24:04 ] クラスの数だけインターフェースがある
3 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:31:14 ] if (success == true) ・・・ とか、bool値のリテラルとの比較があると、コードが素人くさくなる。 (if (success != false) みたいにfalseとの比較ならいいとかって話じゃなくてね)
4 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:37:29 ] /************************************************* * * * *************************************************/ サブルーチンごとに、先頭に、こういう罫線を囲んだコメントがついてるとか。 ひどくなると、サブルーチンの途中でもがんがん入れてある。
5 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:37:38 ] if not notNullCheck(notNullFlg) then
6 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:41:09 ] ' <<<------------ 初期化 ------------>>> : : ' <<<------------ DB更新 ------------>>> : コメントにいらん飾りを入れる
7 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:43:25 ] 基礎編 見れば分かるコメントを入れる fp = fopen(path, "r"); // ファイルオープン return hogeLength; // hogeの長さを返す
8 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:48:39 ] 言語依存なものばかりだな
9 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:49:29 ] グローバル変数の応用編 size = **; func(table); 配列は引数で渡してるのに、配列に入ってるデータの個数はグローバル変数で渡すとかってコードを見たときは、 鳥肌たった。
10 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 23:59:41 ] Java、C++ あたりのサブルーチンの途中でも変数宣言できる言語でも、宣言は全部サブルーチンの 先頭で行う。
11 名前:デフォルトの名無しさん [2008/04/13(日) 00:10:50 ] 引数が30個以上ある関数
12 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:20:22 ] // ADD START M.YAMADA 2008/4/15 : : // ADD END 変更履歴みたいなコメントが大量にあるとか、変更前のコードとか削除したコードを消さずに コメントアウトして残してあるとか。
13 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:25:06 ] >>12 それは言語の責任ではないしコードの問題でもない バージョン管理システムに類するものの有無の問題だ
14 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:29:16 ] ・ 暗黙の型変換(キャスト) ・ 省略可能な{}を省略してしまう(K&R) ・ 難解な演算子の使用法 (例) o = --o - o--;
15 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:31:47 ] int xxx = 0; int xxxx = 0; int xxxxxx = 0; int xxxxxxx = 0; ↑こういうのじゃなくて int xxx = 0; int xxxx = 0; int xxxxxx = 0; int xxxxxxx = 0; ↑こういういちいち桁を揃えてるほうが素人っぽく見える
16 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:34:57 ] >>13 コードの問題です。 コードの書き方と環境の問題は切り離せません。
17 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:42:26 ] ・インデントがずれてる。 ・関数が長い(制御のブロックが長い) ・削除せずにコメントアウトしてコードを残してる のコンボで、どうしようもないコードをいじったことがある。 制御ブロックの最後の } がどこに対応してるか、目で追うのが大変すぎるから、 エディタの対応する括弧に飛ぶ機能を使おうとしたら、 // if (hoge > 100) { // DEL M.YAMADA 2000/10/10 if (hoge > 200 { // MODIFY M.YAMADA 2000/10/10 みたいなコードが途中に何行もあって、それも使えないでやんの。
18 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:48:20 ] >>14 > (例) o = --o - o--; これは、下手なコードと言うよりバグだろ。
19 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:48:24 ] >>17 それは自動整形に通せよ インデントのズレ修正とコメント削除はできるだろ
20 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:49:12 ] >>17 コメント内の括弧を対応させようとする間抜けなエディタを使うのを止めたらいい。
21 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:50:08 ] Cで。 文字列はかならず memset() で初期化。 かつ NULL を使うと上級者。 memset(s, NULL, sizeof s);
22 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:53:13 ] >>20 素のviしかない環境で作業させられた。 つか、ふだんそういう機能が必要になる局面がないんで、つかってるエディタが、言語の コメントを意識するかとか、考えたこともないけど。
23 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:57:11 ] >>19 しょうがないから、コメントとか、大量のデバッグprintはいったん削除して作業した。 勝手にコメントを削除していいような空気でなかったんで、動作確認したら、 変更箇所をもとのソースに書きもどしたけど。
24 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:58:03 ] >>22 それは作業環境の改善を要求するべきだったね。とりあえずvimかemacs入れてもらうとか。 少なくともSyntax Coloringするエディタは言語のコメントを意識してるかな。
25 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 00:58:36 ] >>22-23 それならばスレ違い
26 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 01:00:57 ] if (cond) return true; else return false;
27 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 01:13:19 ] 職場の年寄りがVB.NETで仕事してるけど、やっぱ変数名は intHoge とか lngHoge とかやってる。 打ち合わせで、ハンガリアンやめましょー、みたいな話がでて、そうしようみたいになってたと思うけど、 伝わってなかったか。 ほかの人も、MSのクラスライブラリの作成ガイドラインみたいな文章に沿いましょうみたいな話に なってたはずだけど、なぜか定数値だけは、HOGE_MAX みたいな、Cのスタイルにこだわってたし。
28 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 01:44:16 ] >>27 ああ、あるな。
29 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 05:09:21 ] やる気の低下で1週間とか放置することがあるから汚いコードとは思いつつコメントだけは多めに入れてある
30 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 08:38:15 ] 後で大変なことになるぞーと思いつつ、バカが考えたコーディング規約厳守だから俺にはどうにも出来ないorz
31 名前:デフォルトの名無しさん [2008/04/13(日) 12:03:20 ] checkをchkとか、countをcntとか、単語を省略すると一気に素人くさいコードになるな。 とくにcntは、ネイティブはぜったいやらない省略。
32 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:10:19 ] じゃあこれらは何かの間違いか全部非英語圏の人間の書いたコードだな ttp://www.google.com/codesearch?q=cnt&hl=en
33 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:15:04 ] contine なんだかcontrolなんだかcountなんだかワカンネーよ
34 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:16:00 ] continueだったorz
35 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:17:27 ] 少なくとも1ページ目に出てるのは contine でも control でもなさそうだ
36 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:20:57 ] ならば問う、cntの正体とはは何だね?明智君
37 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 12:57:41 ] 変数名が hogeInfo とか hogeData もヘタクソ臭が。
38 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:11:10 ] >>37 LCCなんて時代錯誤は捨ててアンダーバーで区切るべきだよな
39 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 13:35:48 ] if (...) { ... } // なにやら // 非常に // 長ったらしい // 説明と // 空白行 // の後に... else if (..) { ↑ってうぉ?!繋がってんのかよ!!!
40 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:40:09 ] >>38 infoとかdataじゃ分かりにくいって話じゃないのかこれ。
41 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:43:48 ] hogeってそのまま書いてあるのか。そりゃひどいな。
42 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:44:37 ] わかりにくいっていうか、変数なんてデータが入ってるもんなんだから、いちいちDataなんてつけないでいいだろってツッコミ。
43 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 14:47:05 ] こういうコードは頭痛が痛いな。
44 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 15:00:36 ] >>42 かと言って例えば受信データを入れる変数を Receive にするのはもっとまずいと思うが。
45 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 15:08:10 ] >>42 もしくはdataじゃなくてnameとかlengthとか 意味がありそうな単語を付けるとかかな。
46 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 15:19:58 ] だから言語実装依存の話なんかしたって意味ねーんだよ
47 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 15:24:38 ] 名前や長さというのは名前ではなく所属クラス自体に持たせる情報だな クラスがあればだが クラスが無い場合は名前に情報を持たせるしかないだろう
48 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:15:02 ] >>46 自分でスレを立てたらいいよ。"言語に依存しないコードの上手下手"とかそんな感じで。 ム板にしてはかなり盛り上がっているのだし、吠えても意味ない。
49 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:19:04 ] >>48 言語や環境を特定せずに「コードが下手」と言っても意味がないという指摘なのでは Javaの論理をVBに持ち込んでも仕方がないし、PHPの書き方をC++で使っても無為だ
50 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:19:16 ] コメントの書き方とか、変数名の話とか、どこが言語実装依存かよくわからんけど。
51 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:21:14 ] >8 >46 >7 や >11 辺りは比較的言語に依存しないヘタコードだと思うが。 n = 65; // n に 65 を代入する ウボァー
52 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:23:12 ] 言語によっては、マジックナンバーを使うべしとか、グローバル変数をどんどん使うべしってのが お作法になってりするのか。 たしかにN88BASICとかグローバル変数しかないし、HSPとか構造化されてないコードとか当たり前みたいだけど。
53 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 16:50:01 ] 定番の話題だけど、比較で定数を左にもってくるやつとか if (100 == n) ・・・
54 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:03:03 ] = とミスする可能性は排除するには、有りだな
55 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:19:59 ] 最近のコンパイラは警告してくれるけどな。
56 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:21:58 ] 代入と比較を間違えたらコンパイラが警告出すから、定数値を左にもってくるような不自然な書き方はしないってのが主流。
57 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:30:58 ] google code searchで検索すると ==\s*0 lang:c 1,870,000 0\s*== lang:c 143,000 「定数が左」派は7%超えてるのか。 思ったより多いな。1%未満かと思ってた。
58 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 17:55:11 ] VB.netだけど bFlag = i = 0 って式があって一瞬混乱したんだが、こういう場合には bFlag = 0 = i みたいに定数を左に持ってきて、条件式だって明示するのもいいかもしれないとふと思った。
59 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 18:23:13 ] おれは、 button.Enabled = (count = 0) みたいに括弧でくくってるよ。
60 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 19:11:01 ] 代入演算子と等値演算子が同じなんて、言語仕様がバグってる。
61 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 19:25:23 ] 左辺と右辺が完全に独立しているから、混乱することはないので問題ない、 それよりも、式のど真ん中で代入できたり、代入がない式でもエラーが出ない方が異常じゃないかと思いつつC++を15年使ってる。
62 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 20:15:16 ] 「あとで(自分を含め)誰かが読んで何やってるかわかりにくいのがへたなコード」ってことでおk? ・相変わらず昔の名残で変数の宣言をメソッドの先頭でやって、後の方で使う ・同じ変数を、違う場面で(違う意味で)使いまわす
63 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 20:18:53 ] ・同じ変数を、違う場面で(違う意味で)使いまわす これ最悪だな
64 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 20:35:13 ] 関数の中のコードをほんの数行変えてfunc2とかfunc3とかを量産するのはホントやめて欲しい。
65 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 21:19:10 ] >1 の条件すべて満たすコードばっかりのところで仕事してる。 関数が長いのに加えてその中に長大な#ifdef〜#endifが無数にあって、一部はネストになってる。 もう人間が読めるようなものではない(がんばって読んでいるけどね)。 この仕事何年やってんだよお前ら。
66 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 21:30:33 ] >>60 きもちわるいよね
67 名前:デフォルトの名無しさん [2008/04/13(日) 21:39:53 ] >>62 > ・相変わらず昔の名残で変数の宣言をメソッドの先頭でやって、後の方で使う C++やC#で、これプラスして、変数は必ず初期化するってルールでやってるもんだから、適当に0とかNULL で全部初期化してたりするところもあるな。 コンパイラは未初期化の変数を参照したら警告出してくれるけど、それが台無しになってるっていう。 VB.NETは、初期化を省略したら勝手に初期化するって仕様だから、デフォでこの状態になってるけど。
68 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 21:57:39 ] VB.NETにもスコープ用の{}みたいなのが欲しいな。 スコープを意識するような文化が根付けば メソッドの先頭で変数宣言することも減るかもしれない。 ついでにスコープごとでの処理の抽出もしやすくなり、 自然と各メソッドも短くなるかもしれない。
69 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:06:16 ] goto使いたくないからという理由で do {} while (0); でくくる。 キモいよ、キモすぎ。
70 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:10:53 ] ・省略可能な{}を記述してしまう ・三項演算子を使わない
71 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:19:42 ] 3項演算子は、書くときはすごい簡潔になってスゲーと思うんだが、他人が書いたのを読まされるときはさっぱり意味がワカンネエと感じる。
72 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:24:48 ] 省略可能な {} ってなに? if (a) {b = 1;} else {b = 2;} → if (a) b = 1; else b = 2; みたいなやつのこと?
73 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:27:20 ] >>69 それってdo whileの中で複数判定があって、そこでbreakさせるってこと? 別関数にしてreturnしちゃったほうが手っ取り早そうだな。
74 名前:デフォルトの名無しさん [2008/04/13(日) 22:30:11 ] >>72 それは3項演算子を使わないのほうじゃないのか?
75 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:33:23 ] if ( a ) b = 1; //省略可能 else { b = 2; //省略不可能 c = 1; } こういうことか
76 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:35:45 ] そうなんですよ、いろんな箇所でbreak。 モチベーションとしては呼び出し元にreturnするのは、そのサブルーチンの最後ってことにしたいらしい。 コード自身のクオリティーがそもそも高ければ、エラー処理程度のgoto文は普通にOKだと思いマッスル。
77 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:36:19 ] >>69 あるある。マイクロソフトのドライバのサンプルコードにそれが。
78 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:38:25 ] if (cond) { n = 0; } こういう、一行でもカッコをつけるべしってスタイルの人は、このスタイルが絶対的に正しいって 信じ込んでる場合が多いですな。
79 名前:デフォルトの名無しさん [2008/04/13(日) 22:40:27 ] >>78 はい、そのスタイルは絶対神であります。
80 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:40:53 ] >>75 さんに言うわけじゃないけど if、elseに限らず、たとえ省略可能であっても {} は省略しないほうがいい。 動作チェック後、たった1行の修正しようとした新人PGがこれにはまったことがあった。 省略可能とはいえ、その後のメンテを考えればつけるべき。
81 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:42:51 ] if ( a ) b = 1; //省略可能 d = 1; else d = 2; { b = 2; //省略不可能 c = 1; } 気にしない。気にしない。
82 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:45:57 ] 有名プロダクツのソースとか、定番の書籍とかでも、省略してるのはよくあるよ。 追加したときに、{}を付け忘れてハマるから省略すべきでないってのが理由だけど、 そんなので嵌るのって、10年プログラムやってて、一回あるかどうかだと思われ。
83 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:50:12 ] >>82 うん、Linux kernelソースなんかは全然ついてないね。 でも、プロプライエタリを複数人で開発してると、ソースの寿命ってそんなに短いわけじゃないから、 いつ新人が入ってきていじりだすか分からない。 事故は未然に防ぐという意味は十分あると思う。
84 名前:デフォルトの名無しさん [2008/04/13(日) 22:51:42 ] >>82 そんな理由じゃなく、神には叛けないからだろ。
85 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:55:27 ] if ( a ) b = 1; これみたいに1行ならいいけど for (i = 0; i < 100; i++) if (aaa (i)) { } こんなのは外側のも囲わないと気持ち悪く感じる
86 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 22:55:52 ] >>82 (っ´▽`)っ >10年プログラムやってて、一回あるかどうか かなり高確率じゃないか。 こういうバグで数百億の損害を出すことだってあるんだよ。
87 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:55:57 ] 俺は1行か2行以上か考えて変えるのが面倒くさいという理由で全部に付けてる。 変更で後から付けるのも面倒だし、変更で後から外すのも面倒だ。 とにかく頭を働かせるのが面倒だ。俺のチャンクは他人より少ないんだぜ。
88 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:59:44 ] 2行を1行に修正した時に {} をとるってのもまぁ、律儀といえば律儀なんだろうけど変な気がする。 今のところそんな diff にはお目にかかったことがありません。
89 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:03:09 ] (っ´▽`)っがリーダーで、if文に{}をつけないメンバがいたら、 お前は今後の保守において、if文が2行になった時、 {}を付け忘れる奴がいないことを保証できるのか? と問い詰めるね☆
90 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:04:00 ] >>85 おれは、制御されるコードが一行のときだけ{} 省略ってルールでやってる。 複数行の場合は省略したら、さすがに見難いと思った。 K&Rはガンガン省略してたけど。 >>86 まあ、10年に一度ってのは、適当だけど、linuxとかやってる人は影響ないって思ってるみたいだね。 >>83 MISRAとか、ループをbrackで抜けるの禁止とか、安全側に振ったら、いくらでも厳しくなっちゃうだろうね。 たとえば{}の位置論争とか、たいがいの人はどっちでもいいじゃんと思うだろうけど、{}の省略は、なぜか 省略しない派の人は、ぜったい自分が正しいと思ってる場合が多いって話。
91 名前:デフォルトの名無しさん [2008/04/13(日) 23:06:29 ] > 複数行の場合は省略したら、さすがに見難いと思った。 具体的にどんなのよ?
92 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:08:00 ] >>91 >>85 のようなコード
93 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:09:47 ] >>90 自分が正しいと思ってるかどうかじゃなくて、実際に起こった事故の同じ轍は 二度と踏ませないという意味で説得力があるって話。
94 名前:デフォルトの名無しさん [2008/04/13(日) 23:09:57 ] インデントで見やすくしとけよ。
95 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:10:26 ] (っ´▽`)っ {}の省略のメリットってなんだろう☆ 2文字減らせるってことかな☆ デメリットは2行になった時に{}を付け忘れても普通に動くってことだよね テストで気づけよと思うかもしれないが、将来直す人に対して言うことはできないよ {}を付け忘れるなとコメントを残す?それだったら{}つけよう☆
96 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:10:43 ] >>91 if (・・・) { if (・・・) n = 0; } こういう場合は内側のifは{}省略。外側は省略しない。
97 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:12:29 ] (っ´▽`)っ と言いつつ(っ´▽`)っも if(条件A){ } else if(条件B){ } else{ } ってやるけどね。 厳密に{}をつけるルールなら if(条件A){ } else{ if(条件B){ } else{ } } だね☆
98 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:13:48 ] (っ´▽`)っ だって、見やすいんだもん☆ 条件が増えると if(条件A){ } else{ if(条件B){ } else{ if(条件C){ } else{ if(条件D){ } else{ if(条件E){ } else{ } } } } } って感じで深くなっていく・・・
99 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:14:18 ] >>93 でも、じっさいでかいコードを書いて、実績上げてる人でも、いらねって思ってる人もけっこうな数いるわけで。 そうでないひともいっぱいいるし。 正直「どっちでもいい」レベルの話だとしか思えない。 >>95 メリットはコードが見やすくなる。
100 名前:デフォルトの名無しさん [2008/04/13(日) 23:14:51 ] >>95 全然関係ないが、俺は未来にメッセージを送信できる装置を考案したぞ。 完成したら将来直す人と連絡するために使ってみるか?
101 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:15:55 ] >>97 >>98 厳密うんぬんの方はぶっちゃけどうでもいいんで、脳内で繰りひろげてください。 ただただキモいです。
102 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:16:34 ] >>101 (っ´▽`)っ そりゃキモいさ☆ www.google.com/search?hl=ja&lr=lang_ja&ie=UTF-8&oe=UTF-8&q=%E2%97%860351148456&num=50
103 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:17:41 ] (っ´▽`)っがキモいのはよくあること。配慮してくれないと☆
104 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:18:53 ] >>102 ごめん、おれ、あんたとはファーストエンカウントだ。 あんたのことはたぶん忘れないよ。終生キモいってことでインプットしといた。
105 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:18:57 ] >>100 (っ´▽`)っ 使ってみて使ってみて☆
106 名前:デフォルトの名無しさん [2008/04/13(日) 23:21:08 ] 読みにくいコードって確かに上に書かれているような 「書き方」の問題もあるけど「書き方」だけではない何かがあるよね。 なぜそれをしているのか分からないけど意味がある部分とか 論理的には正しいけど、簡潔に書かれていないとか。 う〜ん、うまく表現できないけど。
107 名前:側近中の側近 ◆0351148456 [2008/04/13(日) 23:22:01 ] >>104 (っ´▽`)っ サンクス☆
108 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:27:18 ] >>99 興味本位で聞いちゃうけど見やすいってのは、 行数が少なくなるから? 文字数が少なくなるから? {}がないことで処理が1行しかないと判定できるから?
109 名前:デフォルトの名無しさん [2008/04/13(日) 23:28:06 ] >>106 最適化の問題かもな。 コメントで補えばいいだろ。
110 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:33:24 ] >>99 その「どっちでもいい」に足をすくわれた人間は、はたと気づく。 「ここの {} はあってもなくてもいいんじゃないですか?」と言われればちゃんと 自分の実体験からその必要性が説明ができる。 「どっちでもいい」と思ってる奴は今後も引き続き「どっちでもいい」でいいよ。
111 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:45:04 ] >>108 省略派の人は、省略すべきだと主張したりして、理由を言ったりしないから、一般的な理由はしらない。 お作法系の本でも、そういう議論はみた記憶がない。 個人的には慣れの問題。 >>110 コーディングスタイルって、どれか決定的に有利なのがあれば、2chで議論するまでもなく、とっくにそれに収束してると 思うんだよ。 有力な人たちの間でも考えが分かれてるような問題は、まあ「どっちでもいい」レベルなんだと思うよ。
112 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:45:25 ] >>78 残念ながらそれは正しくない。なぜコンパイルエラーにならないのか?不思議なくらいだ。 正しくは、こう if(cond) { n = 0; }
113 名前:デフォルトの名無しさん [2008/04/13(日) 23:52:00 ] 中間とって if(cond) // { n = 0; // } こうしとけばいいだろ。
114 名前:108 mailto:sage [2008/04/13(日) 23:55:29 ] >>111 最後の理由でないなら安心した。 付けることで思考の妨げになってるんじゃないかと心配してたが そうでもないようで良かった。 (まあ複数行での括弧付きが読めるんだから当たり前か)
115 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:57:56 ] >>112 C#だと半強制的にそうなるな。
116 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 23:58:55 ] >>111 がどの程度の規模のプロジェクトに関わっていて、また、 その中でどのポジションにいるのかわからないけど、 リーダーなどリスクに大して敏感な人は、その「有力な人たち」の一部が 危険性を孕んでいると認めているコーディングスタイルに対して それを無為無策に放ったりはしない。 「どっちでもいい」と思うんなら別にもう「どっちでもいい」でいいよ。 これ以上は平行線だから。
117 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:01:37 ] >>115 VSの設定で変更できるよ。
118 名前:デフォルトの名無しさん [2008/04/14(月) 00:02:09 ] お前らの書き込み見てるとどうも正しいコードの書き方について 論じているように思えてならない。
119 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:08:22 ] じゃあとりあえず n = cond ? 0 : n;
120 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:15:21 ] if(...){ ... } の様に右端に{を書かれると、括弧の対応かなり読みにくい。こんな読みにくいコード書く理由があるのか?
121 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:20:34 ] じゃあとりあえず (cond&&(n=0));
122 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:22:27 ] >>120 俺は昔そう書いてた。理由はCの本がそうだったから。 今では違う
123 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:25:01 ] >>120 ifがあるってことは{もそこにあるってことだから問題ない
124 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:25:59 ] ローカル変数を複数の用途に使いまわす もかなりイライラ来るなあ メンバ変数だと直させるが
125 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:29:46 ] XMLのノードは3階層までのアクセスに 限定させる <a><b><c></b></a>
126 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:30:18 ] >>120 これは慣れの問題
127 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:36:42 ] 俺はこれが読みにくい if (...) { ... } ...
128 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:38:54 ] >>124 for (int i = 0; ...) が許される言語なら同意 ま、C な人の一部は高級アセンブリだという宗教があって どっちみちレジスタは使いまわすじゃんみたいなw
129 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:44:09 ] ループ変数は字面的に局所化されてるように見えるからいいんだが そうでない変数をこねくり回されると死ねる
130 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 00:44:33 ] ・明らかに何らかの判断結果を返している関数名が、executeXXXXX() 逆に、処理を行っているのに checkXXXXXX()
131 名前:デフォルトの名無しさん [2008/04/14(月) 01:09:57 ] 普通に書け
132 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:22:31 ] バグを直してるうちにそうなっちゃうことがあるのは良くあること。
133 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 02:59:48 ] #define HYAKU 20
134 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 05:17:26 ] >>14 キャストと{}省略、難解な演算子はCなら比較的みんなやるだろ そうだと言ってくれ…
135 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 05:26:18 ] おれはやらんなぁ〜ウヒヒヒヒィ
136 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:46:24 ] >>134 やってるよ。単に>>14 のスキルが低いだけだろ
137 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 02:34:56 ] ・checkXXX() なんてメソッド名 何がどうなるとその結果になるのか意味わかんねーw せめて isXYZ() とかにしてください、おながいします
138 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 05:41:54 ] 統一されているかどうかだなあ アレコレが混在していたらそれら一つ一つが「オススメ」であっても ヘタに見える
139 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 08:02:07 ] CheckError()だと、エラー有りがtrue/falseのどちらか迷うが IsError()だとtrueがエラー有りと考えなくても分かるってことだな。
140 名前:デフォルトの名無しさん [2008/04/15(火) 10:51:20 ] 変数名には w と v しか使わない。 int wwvwvvww; char * wwvvwvww; FILE * wwvwvwvw;
141 名前:デフォルトの名無しさん [2008/04/15(火) 13:22:47 ] >>137 やべぇ、最近までのオレだ・・・ CheckErrorがふつーにあるw いつもTrueかFalseなのか悩んでたんだよな これからはちゃんとIsErrorにします・・・
142 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 14:34:04 ] 呼び出し元でチェックの真偽を確認する時はisErrorと名づけて真偽値を返すようにして checkErrorというネーミングの時は値を返さずエラーの場合に実行時例外を出すようにしてるなあ
143 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 20:18:52 ] 変数名、関数名に日本語だらけ。 ウチの社長、他所からソース提供されたときに「読みにくい。日本語にしてくれ」と要求していた。
144 名前:デフォルトの名無しさん [2008/04/15(火) 22:08:05 ] >>120 C++、JAVAなどのコーディング規約ではifの{を右に書くことになっている ちなみにC#だと改行することになっている
145 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:12:02 ] >>144 プロジェクトでの規約じゃないのか?
146 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:13:39 ] まぁ統一されてればどっちでもおk
147 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:19:28 ] ブラケットはK&R派かGNU派かって認識だったな。 オフィシャルでコーディング規約があるなら教えて欲しい。
148 名前:デフォルトの名無しさん [2008/04/15(火) 22:44:50 ] >>147 C/C++の世界で公式と言えばGNUのこと。 非標準はマイクロソフト。
149 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:50:21 ] ISOでもANSIでもいいけど規格化されたコーディング規約ってあるの? C/C++の世界で公式といえばそういうものを指すんじゃないのか?
150 名前:デフォルトの名無しさん [2008/04/15(火) 22:56:48 ] >>149 いいえ。 標準化委員の大多数がGNU関係者だから。
151 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 23:39:38 ] 結局、そういうふうに書くやつが委員に多いと言うだけであって オフィシャルじゃないってことか? 意味ねー。
152 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:01:44 ] >>144 > ちなみにC#だと改行することになっている VSの設定いじれば、どっちのスタイルでも使えるよ。
153 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:06:13 ] コメントでも、ログでも、画面に出すメッセージでも、字の間にスペース入れて目立たせるやつ。 * * * 対 象 デ ー タ 更 新 * * * みたいなの。 特にログでやると検索できねーだろ。アホか。
154 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:27:13 ] ワロタ
155 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 01:04:54 ] ・無駄な括弧をつける if ((a >= 0) && (b <= 0) && (c != ((10 * 3) / d) + e)) { ・文字を詰める if(a>=0&&b<=0&&c!=10*3/d+e){
156 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 01:04:54 ] >>152 全員でやってないと、なにかの拍子に書き換えられちゃうんだよな。 デフォルトの力の前には無力だ。
157 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:55:47 ] 各関数にreturnは1個というコード規約に振り回され難解なコードに化けたものを見たことがある。 return1個は慣れればどうってことないけどその人は初体験だったみたい。 ソースレビューはなかったらしい。 多重ネストでforから脱出するフラグがいっぱい♪
158 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:03:46 ] >>157 例外使ってないってことはCかな。
159 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:02:41 ] >>155 それは駄目なのか?むしろ括弧はつけろと思うが 演算子はつめてもいいんじゃないか?
160 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 07:13:25 ] >>155 さんじゃないけど、おれもこれ程度のif文なら無駄な括弧は省きたい。 でも、レビューしたとき「なくてもいいのは知ってるけど、つける規約になってるからつけて」って言われてつけてる。 コンパイルは -Wall なんで、「ambiguous ...」みたいなメッセージをたまに見るところをみると おれもまだまだダメちんのようです。
161 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 08:02:34 ] C系だと括弧は気にせず付けて、VB系だと括弧はなるべく付けないようにしてる。
162 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 18:14:03 ] 無駄な括弧大好きで、if文は一行でも括弧付ける派の俺が言うのもなんですが Javaでは int a[]; よりも int[] a; として欲しい
163 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 22:50:53 ] ・普通のコード struct Item { int id; int size; string name; } Item items[NUM]; ・基本 int id[NUM]; int size[NUM]; string name[NUM]; ・上級者 struct Item { int id[NUM]; int size[NUM]; string name[NUM]; } Item item
164 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:36:51 ] >>163 基本って何の基本だ? AoSよりSoAの方がいいという話は聞いたことがあるが、未だにメリットがわからない・・・
165 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:43:32 ] x >= 0 ? x += 100 : x -= 100; はどうかな? 「素直にif文使えよ」と言っといたんだけど。 x += (x >= 0) ? +100 : -100; ならなんとか許容範囲。
166 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:45:46 ] >>164 パディングの分だけ無駄領域が出にくいとか。 つーか、AoSとかSoAってのも初めて聞いた。
167 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:51:59 ] >>164 >>1 に載ってる基本レベルかなと思って。
168 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:54:11 ] >>165 > x >= 0 ? x += 100 : x -= 100; gcc-4.1.2だとコンパイルできん。
169 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:55:53 ] 名前空間が分かれてるのにわざわざプレフィックスを付ける struct Hoge { int hoge_xxx; int hoge_yyy; int hoge_zzz; }; struct tmとかCの標準ライブラリでもやってるけど。
170 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:56:47 ] >>165 私は頭が悪いので少しでも考えないといけないソースは苦手です。
171 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:58:49 ] すべての行の右側にコメントが入っている。 FORTRANとかアセンブラの話じゃなくて、C++の話。
172 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 23:59:14 ] ・なんでもかんでも>>163 の上級者に従うコード プログラムの律速はキャッシュミスにあるので、使用するアルゴリズム、処理によって データ構造を適切に選ぶ必要がある。 また、組み込み系などメモリがシビアな時は、速度を犠牲にして空間効率を高めたりするので、 開発環境によっても自然、アルゴリズムとデータ構造は適切に選択しなければならない。
173 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 00:05:23 ] >>171 富士通だか日立だか忘れたけど、もと有名企業の社員で技術力には自信がありますとかHPでアピールしてる フリーの人から仕事をもらったら、そういうコード書いてたよ。 こういうところがアマチュアと違うんだとか、本人は得意げだったけど。
174 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 00:22:22 ] >>173 書けばいいってもんじゃないんだがなあw しかも書いてあるコメント見ると、>>7 みたいなのがほとんどだった。
175 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 01:51:14 ] >>168 調べてみたが、C++ならおkだが、Cだとだめらしい。初めて知ったよw つーか、>>170 の言う通りだよなあ…
176 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:46:05 ] x += (x >= 0) * 200 - 100; こういう書き方が玄人の証と考えていた時期が俺にもありました。
177 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 02:46:48 ] だいたいコードレビューでダメだしされます
178 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 03:57:32 ] x += ((x >> 31) & -200) + 100;
179 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:52:47 ] >>178 "Hacker's Delight"レベルなら許すんだがなあw
180 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:09:53 ] プロジェクトで指定されてもいないのに、 妙に大仰なファイルヘッダ書くのは素人くさいなあと思う。 ずれまくりだとは思うがこんな感じ。 //----------------------------------------------------------------------------// // // // Sub System Name : Xxxxxx Module // // File Name : Xxx_Main.h // // Engineer : xxxxxxxx xxx // // Created Date : yy.mm.dd // // Last Edit : yy.mm.dd // // Revision : nnn // // Description : Xxxxxx Module Local Define // // // // Copyright (C) by xxxxxxxxxx Co.,Ltd. All rights reserved. // // Author xxxxxxxxxx Co.,Ltd. // // 機密文書:永久 xxxxxxxxx Confidential (Critical:Eternity) // // // //----------------------------------------------------------------------------// 日付やリビジョンを人手で入力してたり、 日本語でおkなのにもかかわらず微妙な「英語」で書きたがるのもお約束かなあ。
181 名前:180 mailto:sage [2008/04/17(木) 11:26:37 ] 今見たら、フッタにまでこんなのが書いてあった。 //----------------------------------------------------------------------------// // 機密文書:永久 xxxxxxxxxx Confidential (Critical:Eternity) // // この文書、図面、Source Code、及び、含有する全情報の所有権,著作権は // // xxxxxxxxxxxxxx株式会社に属する。事前にxxxxxxxxxxxxxx株式会社の文書による // // 許可無くして、xxxxxxxxxxxxxx株式会社の物品の製造以外の目的に、この図面、 // // Source Codeを複写、複製及び使用してはならない。 // // Copyright(c); xxxxxxxxxx Co.,Ltd. All rights reserved. // // Use,duplication or disclosure restricted by the law & xxxxxxxxxx Co.,Ltd. // //----------------------------------------------------------------------------// // ****************************** [ XX_Common.h : EOF ] ****************************** 別に法務部から何か言われたとか、上司から指示があったとか、 コーディング規約で決まってるとか一切なくて、本人の独断で入れたみたい。 こんなの書かなくても機密保持契約は有効だし、 会社の著作物であることは当然なんだけど、もしかしてわかってないのかなあ…
182 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:32:24 ] >>181 あれこれ理由はなくて、書いた本人が単にそういう様式で書きたかっただけだろ? 「ぷれぜんてっど ばい おれ」みたいな感じで
183 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 13:16:24 ] 日本語の文中に、カタカナで書くのが普通な外来語を 英語表記で書くのってなんか馬鹿っぽいよね。<Source Code 自意識過剰な人なのかもな。
184 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 14:29:44 ] ヘッダだけなら実害もないんだけど、そういうズレた自己アピールを成果物に盛り込みたがる奴は、 コードそのものでも>>176 とか>>178 みたいに「個性」を表現したがる。 そういう奴はコードレビューでいじめてやるのだが。
185 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 14:43:22 ] >>176 はともかく、>>178 はイインジャネ?速いんだし。 もちろんコメントつけてわかりやすくしといた方がいいけど。 全くもって速度がどうでもいい場所で そういうコードばっかり考えて時間無駄にしてるならともかく、 コンパイラが最適化してくれない部分を そういうテクで補うクセが付いてる人って、俺は羨ましいけどなぁ。 自分はなかなか思いつかんし。 >>178 みたいなテクを考える人が減ってくのはちょっと寂しい。
186 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 14:50:57 ] >>184 もしかして逆アセンブルとかしてデバッグできない人? すべてのケースで、またすべてのコンパイラで成り立つか分からないが、 多くの場合3項演算子使った最適化に有利。 そんなこと知らないとしたら、>>184 みたいな人間にレビュー付き合わされる人間て可哀想。
187 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 14:51:51 ] >>185 真偽値を1,0と決め付けている点で五十歩百歩。技巧以前の問題なのだ。
188 名前:186 mailto:sage [2008/04/17(木) 14:52:36 ] あ、すんません。 >>185 さんが言うように、すべてのケースにおいて3項演算子使えなんてことは毛頭言うつもりはないです。
189 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 14:59:41 ] >>178 もどうかしかし 符号付きなら論理シフトになるか算術シフトになるか決まってないし 32ビットと決め打ちだし、そもそも普通のif文のほうが早い可能性もあるし
190 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:28:27 ] >>187 う?178のどこに真偽値が? まぁどっちにしても環境を限定した書き方だから 処理系をまたぐであろうプコードでそんなの書けないだろうけど。
191 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:28:58 ] ×プコード ○コード orz
192 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:40:06 ] おまいら、アクロバティックな記述もいいが、オブジェクトの解放をしてない、なんてのもポイント高いですよ。 「システムを運用しているうちにサーバの応答が遅くなり、しまいには無応答になる。サーバを再起動すれば治るが、 数日でまた応答しなくなる」というクライアントの訴えを受けてサーバを調べた俺が見たものは…… メモリを埋めつくす数十プリニウスものexcel.exeだった。
193 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 15:53:59 ] 三項演算子が「禁止」なのは、許可すると技巧に走るバカがいるから 三項演算子自体の可読性も性能も別段悪くないんだが…
194 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 16:22:18 ] >>185 >速いんだし。 x>>31 が abs(x) より速いという確証があるのか? >全くもって速度がどうでもいい場所で 速度が問題になる箇所ならインラインアセンブラ使えって話だ。 >>187 >決め付けている点で 関係演算子の結果は、そう決まっている。 >>189 >論理シフトになるか算術シフトになるか決まってないし こっちは処理系定義なんで、移植する気がないなら問題にはならない。 まあ個人的には、どっちもキモいな。
195 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 16:24:50 ] abs(x)使うとどう書けるの?
196 名前:194 mailto:sage [2008/04/17(木) 17:47:52 ] abs(x)関係ない。すまん、読み違えてた。 元の>>178 のコードだとふつーにifか三項演算子だ。
197 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 17:53:22 ] 185だけど、論理式+乗算(>>176 )よりはシフト+ビットごとのAND(>>178 ) の方がさすがに速いだろうと思ったんだけど。違うの? 高速化に関しては初心者だけどさ。 >速度が問題になる箇所ならインラインアセンブラ使え そらそうだろうけど、ゲームなんかだと毎秒30〜60回実行されるコードが 何万行とあるじゃん。チリも積もればなんとかで、手軽に条件分岐を減らせるなら 減らした方がいいと思うけど。俺の場合は上にコメント書く。 abs(x)使うやり方は気になるw まさか((x - abs(x)) & -200)とか?
198 名前:197 mailto:sage [2008/04/17(木) 17:56:18 ] ぶw すれ違いだし最後の式おかしいし・・・ なんかいけそうな気もするけど無理か。スレ汚しスマソ
199 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:07:25 ] もっと時間食ってるコードが絶対あるから、 簡単な計算は可読性重視、速度無視
200 名前:デフォルトの名無しさん [2008/04/17(木) 21:25:48 ] 名前空間が分かれてるのにくべつ用のプレフィックスとか付ける struct Hoge { int hoge_xxx; int hoge_yyy; int hoge_zzz; }; struct tmとかCの標準ライブラリでもあるけど。
201 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:35:16 ] 配列とかで大量に使うならともかく、ローカルのワークに使う変数とか、引数なんかでshortを使ってるやつ。
202 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 21:45:16 ] >>200 これは俺もよく見る。そのたび同じことを思う。
203 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:23:48 ] なんで>>169 と同じ事を書いてんの スルーされたから?
204 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:34:52 ] コピペによる予想外の冗長さを身をもって表現してくれたんだよ。
205 名前:側近中の側近 ◆0351148456 [2008/04/17(木) 23:06:24 ] (っ´▽`)っ 処理時間をどうこう言ってる人がいるが、 保守性、可読性を優先させたほうがいいでしょう。 処理時間をどうこう言うなら、目標時間を定めてから。 1秒を0.95秒にしたところでユーザに喜ばれるだろうか? こう言うと、 ちりも積もれば山となる、処理時間だって言える ソースコード全てにおいて、スピードを考慮すべき と答える人がいるが、 実は、ソースコードの5%が処理時間の95%を占めるという研究結果がある。 つまり、闇雲にスピードを追求してもあまり意味が無いってことだ。 むしろ、スピードを追求した結果、 保守性が低くなるどころがバグ満載では、本末転倒である。 (っ´▽`)っ 処理時間と保守性、可読性についてもっと知りたい、考えたい人には、 コードコンプリート下巻をお勧めしよう。
206 名前:側近中の側近 ◆0351148456 [2008/04/17(木) 23:11:32 ] (っ´▽`)っ コードコンプリートは上巻を読まないと下巻は理解しづらいかもしれないね☆ 上下巻併せて12,810円です。 上下巻ともに、広尾の都立中央図書館の1階開架に置いてあるようです☆
207 名前:側近中の側近 ◆0351148456 [2008/04/17(木) 23:13:39 ] (っ´▽`)っ っていうか、名著中の名著だから、ここの人たちはみんな読んだことがあるんだろうね☆ (っ´ω`)っ 出しゃばってごめんね、いきててごめんね、
208 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:18:31 ] >実は、ソースコードの5%が処理時間の95%を占めるという研究結果がある。 観念的な空論をとなえるのをやめてちゃんとプロファイルをとれば、 こんな流言に左右されずに適切な最適化を実施すること(あるいは実施しないこと)ができる。 ところで漏れが組んだシステムで↑みたいな極端な例は殆ど無かったなぁ。 実はかなり特殊な領域を対象にした研究なんじゃないだろうか。
209 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:23:34 ] リファクタリングの本だとたしか10%と90%って数字だったな。 まあなんにせよ速度の最適化にはまず測定からだ。
210 名前:208 mailto:sage [2008/04/17(木) 23:31:49 ] >>208 ちょっと前の俺に反論。 高速化したい対象だけ注視しないで、UIやらなんやらを含む全コードを見れば やっぱり極々一部が大半のCPUパワーを使っているような気がするぞ。
211 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:32:10 ] //Author ああああ 毎度、毎度ファイル先頭に1行 ってなんだよやめてくれよw
212 名前:側近中の側近 ◆0351148456 [2008/04/17(木) 23:33:18 ] (っ´▽`)っ こういう感じだね☆ 処理時間の目標の設定(Plan) ↓ 測定(See) ↓↑ 処置(Do)
213 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:33:19 ] >>184 これ書いた人、ローカル変数の頭に全部"the"つけてるんだよね。こんな感じ: #define UC unsigned char #define CLEAR 0 static void Xxx_YyyClear( UC inXxxYyyName ) { UC theXxxLocalYyyNameNo = CLEAR; theXxxLocalYyyNameNo = inXxxYyyName; xxxGlobalInfo[ theXxxLocalYyyNameNo ] = clearXxxYyyyInfo; } 強烈でしょw 固有名詞は伏せたけど、実在のコード。 補完機能付きのエディタ使ってないのに、 使い捨てのローカル変数にこんな長い名前つけてて、なんともご苦労様なことで… あ、関数名が(動詞+目的語ではなく)目的語+動詞になるのもへたくそっぽくない?
214 名前:側近中の側近 ◆0351148456 [2008/04/17(木) 23:39:17 ] (っ´▽`)っ で、コードコンプリートってどうなの?名著なん?
215 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:40:09 ] 一番気になったのはこれだ #define UC unsigned char
216 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:45:54 ] >>203 ネタ帳から貼ったの忘れてたよ。
217 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:51:58 ] >>215 名前もあれだけど、なんでtypedefにしないんだ。
218 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:02:48 ] >>213 >補完機能付きのエディタ使ってないのに、 こういう人たちは補完を使わない=出来る人間だと思ってる節がある。 全員分IDE買ってんのに「自分はEditor派なんで」。 ・・・しかも当然遅い。
219 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:11:02 ] >>215 実際にはそれはプロジェクトのヘッダファイルに入ってるんで、 それはまた別の困ったちゃん。ちなみに>>171 w まあ、typedef知らないんだろうと思うよ。 そういえばconstやstaticも使ってなかったな。
220 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:13:34 ] >214 絶対読まなきゃ、というほどではないにしろ、読んでおくほうが望ましい。 ちゃんとわかってて読めばいい本ですよ。
221 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:22:37 ] なんか急にレベルが下がったな 女の陰口のようだ
222 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:34:52 ] とあるヘッダファイルから。 #ifdef GLOBAL_VALUE_DEFINE_XXX_COMM // グローバルを作る #define GLOBAL_XXX // GLOBAL→空白に変換 #define GLOBAL_XXX_VAL(v) =(v) // GLOBAL_VAL(数値)→(数値)を設定する #else // グローバルを使う #define GLOBAL_XXX extern // GLOBAL→externに変換 #define GLOBAL_XXX_VAL(v) // GLOBAL_VAL→削除する #endif GLOBAL_XXX SomeStructAaa varAaa; GLOBAL_XXX SomeStructBbb varBbb; GLOBAL_XXX SomeStructCcc varCcc; ... ある意味懐かしい感じがする。
223 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:50:08 ] なぜかcaseラベルのある行だけ複数の文を書く人がいる。 switch(xxx) { case XXX: var1 = ...; var2 = ...; break; case YYY: var1 = ...; var2 = ...; break; case ZZZ: var1 = ...; var2 = ...; break; }
224 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:56:17 ] >>222 何でもかんでもって感じで多用されてたらうざいけど、使うこと自体は別にいいかなって思う。 それよりもプリプロセッサのネストが気になるw
225 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:02:16 ] 多次元配列の定義で、最初のデータを書き終わるまで改行してくれない。 struct Xyz fooBarBaz[DIM_XXX][DIM_YYY][DIM_ZZZ] = {{{{1,2,3}, // 中略 {7,8,9}}, // 数十行くらい続く
226 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:12:33 ] 構造体の(ポインタでない)メンバにconstとかvolatileがついてる。 struct Xyz { volatile int xxx; volatile int yyy; volatile int zzz; }; つーか、文法的にはおkなのかなあ?
227 名前:226 mailto:sage [2008/04/18(金) 01:24:55 ] う、POD型な構造体に限定したほうがいいかな。 それにしたってvolatileはないけど。
228 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:27:21 ] >>223 縦に揃ってたら見やすいじゃん。 一貫性があれば異質な物にも気付きやすいし。
229 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:30:46 ] >>226 const int * p;なら意味あるよん。 規格呼んだわけじゃないけどそれ以外は関数のexternと同じように無視される気がする。
230 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:39:35 ] >>229 うん、だからポインタでないメンバと限定したわけだ。 (PODな)構造体のメンバがint * const memberとか宣言されてたらおかしいでしょ。
231 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 02:38:10 ] >>223 case hoge: の後が一文(特に代入だけ)の場合、 俺も改行しないで列挙するなぁ。複数の文はさすがにアレだけど。
232 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 03:14:02 ] 縦に揃うときれいだからといって、同じ条件の三項演算子をズラズラ並べるのはカンベンして欲しい。
233 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:14:11 ] おまえら正しくは条件演算子ですよ 三項演算子の一種であるので C言語の場合ほぼイコールだけど
234 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 08:23:39 ] >>230 >(PODな)構造体のメンバがint * const memberとか宣言されてたらおかしいでしょ。 別におかしくない。 初期化で値を設定して、その後変更するつもりがないメンバだろ?
235 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 14:26:49 ] >>226 そのコードに必要だったかどうかは実物見ないとわからないけど、 一般論で言えば意味あるに決まってんじゃん・・・ 割り込みで変更される可能性のあるメンバとか、 メモリマップトIOのアドレス範囲を構造体で定義するとか、 マルチスレッドで他スレッドからもアクセスされるフラグ的なものとか、 そんなときに使う。稀といえばまれか・・・ 案外モノ知らない人多いんだな〜。 >>230 そのメンバには書き込んで欲しくないというときには、どう宣言せよと?
236 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:35:17 ] >>235 226が遭遇した事例では、メンバに付けるよりも 構造体の変数を宣言するときにvolatile付けるほうが適切だったんだと思う。
237 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:55:49 ] 相手がvolatileを知らない前提で語ってるのがワラタ volatile習いたてですか?
238 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:59:58 ] >>226 はどうみても volatile を知らないわけだが・・・ >つーか、文法的にはおkなのかなあ? こんなこと書いてるし。 いや、「見かけたことはある」という程度には知ってるのか。
239 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:13:37 ] Google code search で、struct volatile を検索すれば カーネル内のコードやら aKode やら山ほど出てくるね。 なぜポインタにしか使わないとかそういう誤解があるんだろう。
240 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:49:14 ] >>236 それだと今度は宣言する人が付け忘れちゃう可能性がなくない?
241 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:14:01 ] >>235 ,237,238,239 ISO/IEC 9899:1999 6.7.3.3 The properties associated with qualified types are meaningful only for expressions that are lvalues. ISO/IEC 14882:1998 3.9.3.2 A compound type is not cv-qualified by the cv-qualifiers (is any) of the types from which it is compounded. つまり、メンバにいくらconst/volatileを指定しても、 構造体全体としては指定されてないのと同じということだ。 仮にメンバごとにアクセスする時だけconst/volatileの効果があるのだとしても、 構造体まるごとで操作した時にその効果がなくなるなら、全然意味ないじゃんって話。 で、全メンバに同じCV修飾子をつけるなら、構造体自体を修飾したほうが素直だろってこと。 もっとも、const/volatileは文法的には型に対する修飾子なので、 メンバの宣言に使っても文法上は間違いではない。 記憶クラス指定子のように、オブジェクトに対する指定を行なうものだと 考えるのがわかりやすいかな。 >>230 ,234 C++のクラスならおかしくない。が、そういうconstメンバはコンストラクタでしか 設定できないから、CやC++のPOD型で指定するのはおかしいって話。
242 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:14:02 ] はじめてここにきたが おれほとんどあてはまってる みんなごめん
243 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:21:26 ] >>241 メンバ変数にアクセスするときに効果があるんだったらそれでいいんじゃないか?
244 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:31:12 ] だからstructまとめてコピーとかしたときにまずいって話でしょ
245 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:47:46 ] コピーも結局、暗黙でメンバ変数にアクセスしてるんじゃないか?
246 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:56:14 ] byte A = 0; abs(A++); 行ったり来たり...
247 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:00:05 ] >>108 行数が少なくなる事で各メソッドの全体像を一瞥しやすくなる。 文字数はあまり関係ない。新規行および不具合のある行についてのみ横方向に解析するので。 {}がないことで処理が1行しかないと判定できる。これもデバッガ使用、机上デバッグ、リファクタリング等の際に有効に機能する。 システム保守等で取り扱うコード量が増える程この手の基本的な書き方が重要になってくる。
248 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:04:05 ] >>246 これは何? 意味分からない
249 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:20:45 ] int a = 0; for (;;) a = abs(--a);
250 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:33:58 ] >>247 >{}がないことで処理が1行しかないと判定できる。 {}が無いのにうっかり処理を2行書いてしまった部分を見逃す危険性は無い?
251 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 02:03:55 ] for (); このセミコロンは下に打っておかないと 1行追加するとき見逃す可能性があると思う for () ; こんな風に
252 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 02:22:23 ] >>250 処理をうっかり2行書いてしまった部分は変更を加えたのだからテスト対象になる。 また見逃してしまうようではシステム保守を担当できるスキルまで達していない事になる。 そもそも局所的にしかコードを把握していないようではシステム保守を任せることができない。
253 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 02:50:49 ] >また見逃してしまうようではシステム保守を担当できるスキルまで達していない事になる。 おまえはわかってないな そういう奴が触る可能性を考慮して書くんだよ 一生そのプログラムの保守をする気があるとか、趣味でやってるとか、書き捨てなら話しは別だけど
254 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 02:56:41 ] >>253 わかってないのはおまえだよ。 そういう奴を育てる事も考慮して書くんだよw ゆとりをもって取り組もうな。
255 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 03:03:52 ] その発想はなかった 保守担当が自分の部下ならそうするけど・・・ 板違いになりそうだからやめとくか
256 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 03:21:19 ] >>252 (っ´▽`)っ プロジェクトにはスキルの高い人もいれば低い人もいる。 今はスキルの高い人がいるとしても、将来はどうだかわからない。 プロジェクトにスキルの高い人がいるとしても、その人が保守を担当するとも限らない。 要員の都合でスキルの低い人に任せざるを得ない場合もある。 つまり、将来の保守は、どのようなスキルを持った人が担当するかわからない。 貴方が未来永劫保守が正しくなされるのを監視するのであれば問題ないが、 貴方はいつかは退職するでしょう? 貴方がいなくなったとき、保守はどうなるのかな?
257 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 03:27:00 ] >>254 (っ´▽`)っ もし、その育てられた人が退職したらどうするの?
258 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 03:58:02 ] >>256 >>257 まず処理をうっかり2行書いてしまった人とテスト対象を見逃してしまった人は違う人物となり得る。 つまりコードを変更する事とその変更を検証する事は別の事柄だ。 コードを変更する人は>>247 等を考慮して作業にあたれば良い。 変更を検証する人はテストケース等でテスト漏れを防止すれば良い。 それでもミス等は発生し得るのだから検証する枠組みを強化すれば良い事になる。 仮に個人のスキルに委ねた検証の仕組みしか提供できないのであればそれはその企業体自体の問題である。
259 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 07:28:09 ] >>249 a=a^1;
260 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 08:38:35 ] >>258 > それでもミス等は発生し得るのだから検証する枠組みを強化すれば良い事になる。 検証だけちゃんとやればいいという素人くさい意見有難う。(w 俺は、検証もがんばるし、そもそもミスを発生しにくいようにしたいから {} は 省略しない。
261 名前:デフォルトの名無しさん [2008/04/19(土) 08:47:43 ] >>258 > それでもミス等は発生し得るのだから検証する枠組みを強化すれば良い事になる。 失礼なことお尋ねするようですけど、ちゃんとどこぞの会社で働いてらっしゃるんですよね? ミスは発生しうるという考えが先行してるように見受けられますが、 なぜ、「ミスを起こさせないためにはどうするか」という発想に至らないのか不思議でなりません。
262 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 08:48:35 ] 他の人も触る可能性があるなら {} つけといたほうがいいと思う
263 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 08:54:26 ] 付ける付けないはそこまで重要じゃないだろ。 プロジェクトで統一されていることこそ重要。 {}付けるなら絶対にすべてに付ける。 {}付けないなら絶対にすべてに付けない。
264 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 08:56:42 ] >>263 重要とかそういうことじゃなく、それは決まりごとっていうんだ。 朝から強烈な電波、お疲れさまです。
265 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:14:53 ] >>263 すべてにつけないは無理だろう。 俺はすべっつけるけど。空文もな。空文の括弧には、意図した空文か判るようにコメント入れような。
266 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:14:54 ] 決まり事は重要だぞ。 似たような処理が統一されたスタイルで書かれていれば 何も考えずに理解できるし、違う書き方で書かれた場所があれば そこが特別だということが分かる。
267 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:19:44 ] 決まりごとは守らなければならない、これあたりまえ。 おれは上で議論してるのは、なぜそれを決まりごとと決めなければならないのか、 そっちを議論してるんだと思ってたんだが?
268 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:22:30 ] うちだと1行に収まる場合以外はブロック化だな。 亀だけど。 >>173 大手ドロップアウト組はそんなもん。 WebSite見るとその頓珍漢なコードを掲載している傍ら、野菜作ってたり実家の手伝いしていたり。 まともな仕事を受注できなくても危機感もなければ研鑽する気もないから酷いコードのままの罠。
269 名前:デフォルトの名無しさん [2008/04/19(土) 11:26:44 ] hoge(int aaa){ if(hogehoge(aaa)==-1) return -1 return 0; } 見たいな感じでエラー処理したりしちゃう癖があるんだが これは醜いのか?
270 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 11:37:51 ] >>269 (っ´▽`)っ C言語?それならエラー時にリソース解放するの忘れないでね☆
271 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 11:57:11 ] 「関数の出口はひとつにしろ」とか言う人もいるんだよなぁ インデント深くなるし、わかりにくくなるから、エラー時はさっさとリターンしたいんだけど・・
272 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 11:59:30 ] おれはエラー時はさっさとgotoしちゃいます。
273 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 11:59:44 ] void someFunc() { if (error) goto Return; ...; ...; Return: ; }
274 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:01:41 ] goto文は多重ループを抜けるときにだけ使えって教えられたから
275 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 12:20:24 ] (っ´▽`)っ そこでtry〜catch〜finally〜ですよ
276 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:21:38 ] それはC++前提ね
277 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:22:16 ] >>275 Cならどうしてる?
278 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 12:28:08 ] >>277 (っ´▽`)っ (っ´▽`)っも>>273 に似たようなもんだが void someFunc() { /* 主処理 */ if (error) goto Catch; /* 主処理 */ goto Finally; Catch: /* エラー処理 */ Finally: /* 終了処理 */ return: }
279 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 12:29:41 ] (っ´▽`)っ >>278 だと、正常の場合でもエラーの場合でも 終了処理が確実に実行されるよね。
280 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:30:28 ] Catch、Finallyなんて変なラベルは使わない(見たこともない)けど、同じだね。
281 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 12:32:22 ] >>280 |▽`)っ あえてラベル名は変えてある (っ´▽`)っの正体がばれるから☆ |彡☆ サッ
282 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 12:33:33 ] (っ´▽`)っ >>278 の手法って結構メジャーなのかな? 書籍とかであまり見ないから。 (っ´▽`)っが誰だか特定されちゃうと困るんだけどね。
283 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:34:11 ] そんなもったいつけてどうすんのwww どうせ、そんじょそこらのおっさんでしょ?プゲラッチョ
284 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:34:15 ] コテうぜえ
285 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 12:35:42 ] >>283 (っ`Д´)っ お・ね・え・さ・ん!!! (っ´▽`)っは永遠の16歳だよ。美少女だよ☆
286 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 12:39:04 ] お局さんに内部変換した。 貰い手がいないんなら、おれがもらってやるよwww
287 名前:デフォルトの名無しさん [2008/04/19(土) 12:42:12 ] でこの書き方はどうなんだ?
288 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 13:04:31 ] >永遠の16歳 なんだ、永遠に女未満なのか。
289 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 13:04:50 ] ま、いいんじゃね?一般的かどうかということになると、goto使わない派がそれなりに多い現状からすると マイナー(ただしマイナーの中のメジャー)だと思うけど。 1行だけのブロックを{}で括らない職業プログラマは逝ってよし。
290 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 13:11:18 ] >>289 考え方の問題だろうけど俺は使わん
291 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 13:24:33 ] 手元にソースのあるプロダクツをざっとみて確認してみた。 if で一行でも{}でくくってるか。 linux くくらない postgresql くくらない apache くくらない vim くくらない mozilla くくらない sqlite 基本くくるみたいだけど、くくってないところもある mysql くくらない
292 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 13:39:09 ] >>289 >マイナーの中のメジャー (っ´▽`)っは側近中の側近だよ☆
293 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:13:01 ] >>291 オープンソースな人とと職業プログラマでポリシーが違うのは当たり前だから、 あまり参考にならない意見有難う。
294 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:13:48 ] >>293 「と」 が余分だった... orz
295 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:15:24 ] 確かに開発ペース&品質なんかはオープンソース系の方が上だよな。 って事考えると職業プログラマってグダグダ議論するワリにアレだよな・・・。
296 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:23:41 ] オープンソースの場合は納期もないし責任もないのでそれはまた違った形になってくるのだろう
297 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:23:59 ] VC++ のランタイムのソースと、SunのJDKのクラスライブラリのソースはくくる派だな。 意外なことに eclipse はくくらない派だった。 Javaはくくる文化かと思ってたよ。
298 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:24:48 ] ちなみに以下のコードはある環境下でバグになるって事を認知してる? if (a > 0) { #define _DEBUG printf("a = %d\n", a); #endif }
299 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:25:44 ] >>296 責任ないって言っても、バグっていいとか、保守性がわるくなってもいいとか思って、くくらないスタイルを 採用してるわけじゃないだろ。
300 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:03:30 ] >>298 そりゃそんなとこでdefineしたらおかしくなるだろ
301 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:04:50 ] >>296 納期があるから{}を必ずつけるのか。 俺には理解できない話だが、参考になったよw
302 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:06:38 ] >>298 ていうか_DEBUGって何? NDEBUGではなくて? そんな環境依存の話されてもわかんない。
303 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:13:49 ] >>293 以前はクローズドで、後にオープンソースになったSolarisも、くくらない派だったよ。
304 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:13:55 ] #ifdefだろ常考
305 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:15:04 ] >>296 現実的な責任云々いいだすとオープンソースの方が責任重いと思うが、 web鯖にたとえるなら喪前はapache以上の普及率を誇る製品作ってるのか?
306 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:16:58 ] ?
307 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:18:45 ] きっと296はWindowsOSの開発をしていてMSの社内ポリシーは{}を必ずつける、ってんだろ?w
308 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:19:46 ] オープンソースと責任を議論する人って一体?
309 名前:側近中の側近 ◆0351148456 [2008/04/19(土) 15:29:11 ] >>288 (っ´▽`)っ 16歳の女の子といえば女子高生! 食べ頃じゃないのか?
310 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:41:57 ] ああごめん。#ifdefの書き間違い。 if (a > 0) { #ifdef _DEBUG printf("a = %d\n", a); #endif } b = 1; c = 2; これをリリースモードでビルドするとa > 0の場合にのみb = 1が動作する環境に遭遇したことがある。 使用していたコンパイラが空ブロックにNOPを生成しないタイプだったのが不具合の原因だった。
311 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:45:27 ] 書籍だと、 詳解UNIXプログラミング、UNIXネットワークプログラミング くくらない EffectiveC++ くくらない Effective Java くくらない プログラミング言語 C++ くくらない プログラミング作法 くくらない CODE COMPLETE くくる (書籍中では、この件に関しては議論はしてない) デザインパターン(GoF) くくる
312 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:45:39 ] 規格に準拠してないコンパイラなんてどうでもいいよ。
313 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:45:51 ] 俺は不要な{}はつけない派だが、 そんな処理系固有のバグを得意そうに指摘しても意味がないと思うぞ。
314 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:48:10 ] 紙媒体を引き合いに出されても困るんですけど。 よく「紙面の都合上…」ってをみるでしょ?
315 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:49:44 ] でもそういうバッドノウハウとして「{}をつけるべき」とか言ってる奴はいるかもな。 もはや常識であるdo{...}while(0)を知らずに #define FOO(x) func1(x); func2(x) みたいにして、痛い目にあったとか。
316 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:53:08 ] > これをリリースモードでビルドするとa > 0の場合にのみb = 1が動作する環境に > 遭遇したことがある。 今時のコンパイラならリリースビルドだと普通 if() 分もろとも省略すると思うが。 どんだけしょぼいコンパイラなんだ? # つーか、コンパイラのバグ回避はまた別の話だろ。
317 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:53:45 ] >>310 その情報って{}を付けるか付けないかと全く関係ないよね。 何が言いたいの?
318 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:55:06 ] >>316 >>317 もう触れないであげて。彼はいま自分の若さを再確認してるところだから。
319 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:56:45 ] >>314 とりあえず第三者が検証可能だから。 上のほうの「自分の経験では」とかだとアレだけど。 まあ、チョイスも偏ってるしあくまで参考までに。
320 名前:315 mailto:sage [2008/04/19(土) 15:56:50 ] おっと、do{...}while(0)だって立派なバッドノウハウだな < 自己ツッコミ だが、へぼいマクロのために必ず{}で囲うべきだと強弁するなら、 そっちのほうがよほどワースノウハウというものだ。
321 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 16:14:16 ] >>317 if (a > 0) { } b = 1; c = 2; をコンパイルすると if (a > 0) b = 1; c = 2; と同じ挙動になったという話なだけ。 あくまで「ちなみに」レベルの話。
322 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 16:18:44 ] なんでそんな関係のない話を得意げに語るの?
323 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 16:35:47 ] >>309 体だけでしょ。心も知性も女未満。
324 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:04:02 ] Cは「プログラマは無謬」という前提で設計された事を 認めない(/知らない)人が多いところだね。 冗長な記述をいくら推奨しても「歪む」とは思わないの?
325 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:08:26 ] >>324 dmrはそんなこと言ってなかったよ。
326 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:09:02 ] 〜〜ことを認知してる? なんて偉そうに書いてるから俺も気になったじゃまいか。 ifステートメントは直後の1文(セミコロンが1つ見つかるまで)、 もしくは直後の1ブロック?({}で囲まれた部分)までであるというのは 多分CでもC++でも標準規格ではっきり決まってることだと思うんだが、 その程度の仕様も守れないクソなコンパイラのアホなバグを なぜ知ってなきゃならんのだw 技術者が信頼できない道具なぞ使うなと思うし、 使わなきゃならないならその環境が諸悪の根源なだけだろう。
327 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:12:21 ] 本来であれば>>315 のマクロ記述の方が不具合なのにそれを隠蔽してしまう「必ず{}で囲うべき」という思想がヘタの証。 >>321 も最初から{}を省略する書き方であれば遭遇しない不具合だし。
328 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:14:47 ] プロトタイプ宣言を書くのはいいんだが、 仮引数を型だけ書く中途半端に古いスタイル。 int foo(int, int); わざわざ仮引数名だけを消してて、ご苦労様と言いたくなる。 Quick-CとかMS-Cあたりの時代から進化していないらしい。
329 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:16:25 ] >>324 設計者の意図がどうあれ、そんなことを理解 { しない | できない } 奴等に仕事させないといけないので、{} は必須。 そう言うお仕事もあるってだけのことだ。 >>326 アホに構うな。 そこにしか突っ込めないなら、止めやしないが。
330 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:26:54 ] >仮引数を型だけ書く中途半端に古いスタイル。 はぁ? 古いってどういう意味? プロトタイプ宣言は昔からパラメータ名を書いても書かなくてもいいんですが。 ついでに言えば、C++の場合は実体定義のときも省略できますね。
331 名前:葉猫 ◆Jz.SaKuRaM mailto:sage [2008/04/19(土) 17:36:46 ] プロトタイプの引数に変数名入れるのは素人っぽいからヤダ
332 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:40:31 ] >>330 うんうん、そうだよね。文法的には正しいよね。 わざわざ情報量落してるあたりが馬鹿っぽいということとは無関係だもんね。
333 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:42:57 ] >>331 と考えてしまうところがヘタレな証拠
334 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:43:21 ] >>330 は返り値がintの関数を定義するとき型名を書かないらしい。
335 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:44:28 ] それはc++とc99ではできなくなったはず
336 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:45:05 ] Cはプロトタイプと本体の定義で、名前が違っていてもエラーにならんからね。 書く人にやめろとは言わないけど、俺も書かない。 void func(int x, int y); void func(int y, int x) { ・・・ }
337 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:47:45 ] どっちかに統一してあればどっちでもええやん #返り値がintの関数云々はともかく
338 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:49:29 ] 引数名は省略できても書いた方がいい。
339 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:50:20 ] >>336 それは仮引数名の命名がおかしいだけであって、 仮引数名をつけない理由にはならないんだが。
340 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 17:53:29 ] >>339 引数に名前があっても、信用できるわけじゃないしって話。
341 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 18:29:52 ] コメントだって信用できないから、書かない方がいいって言う人? # 書いてない方がマシなコメントもあるけどさ。
342 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 19:36:10 ] 全ての文にコメントをつけろって会社で働いたことがあったが、あれは地獄だったな。
343 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 19:47:37 ] >>342 俺にも覚えがあるな。こんなコメントが蔓延してなかったか? // ほにゃらら履歴を走査する@ // ほにゃらら履歴を走査するA ちなみに、そのプロジェクトにはコメントの体言止め禁止という不可解な規約もあった。
344 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:31:29 ] コメント等の説明文に関しては「…される」じゃなく「…する」と表現しなければいけない等のルールにも出くわした事もあるな 上のを例にすると「// ほにゃらら履歴を…に走査させる」はNGとか
345 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 20:44:21 ] コメントは日本語と英語を併記するって所もあったな。 めんどくさいからコメントはなるべく書かないようにしてた。
346 名前:324 mailto:sage [2008/04/19(土) 22:20:19 ] >>329 お気の毒です(笑)。いや、それでも。 それは「仕事でやる場合、そういう{指導|規約}が必要になる」 という事実を表明なさっているだけに思えますが。 #スレ違いと考えたら駄目ですかね
347 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:32:09 ] >>335 化石プログラマにはC++やC99なんて存在しないのも同然。 >>331 変数名(笑) 素人臭さを演出して皮肉っているんですね。わかります。
348 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:43:36 ] > 仕事でやる場合、そういう{指導|規約}が必要になる > という事実を表明なさっているだけに思えますが。 まさにそうだが? >>346 で何を言いたいのかよくわからん。 スレチだと考えるならそう考えておけばいいと思うけど、できたら 今後この手の話題にレスする時は「仕事以外では」と明記してもら えると心置きなくスルーできるので助かるんだが。
349 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:51:44 ] まぁこの手のくだらん制限がかかるのは大体仕事絡み
350 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:57:42 ] >> 仕事でやる場合、そういう{指導|規約}が必要になる >> という事実を表明なさっているだけに思えますが。 >まさにそうだが? 正直、極一部のヴァカの為にヘンテコなルールを導入する組織もどーかと思うが。
351 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 22:59:33 ] ごく一部というか毎年一定の割合で入ってきたり、派遣されてきたり
352 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:03:39 ] 解っていた事ではあるがオープンソースが責任やら納期やらの話で{}を省略しているのではなくて、 仕事でやっている連中はレベルが低すぎるから糞ルールを導入せざる得ない。 とハッキリ言えばいいのになぁ。 なんかヘンテコなプライドがあるんだかないんだが。
353 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:14:51 ] >>350 > 正直、極一部のヴァカの為にヘンテコなルールを導入する組織もどーかと思うが。 じゃあもっといい方法があるのか? --- > 仕事でやっている連中はレベルが低すぎるから糞ルールを導入せざる得ない。 > とハッキリ言えばいいのになぁ。 >>256 , >>329 に書いてあるのに理解できてない >>352 に言われても...。
354 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:15:01 ] スレの主旨や話題にケチつける気はないんだが(これは>>348 に対する皮肉でもあるがw) どーも感心するほどの話が出てこないなぁとオモタ。 自分は現役離れてフリーターやりながら作品作ってる身分なので偉そうなことは言えないが、 「会社の超下手糞なスタッフが読んでもわかるように」、みたいな今の日本特有?の IT土方的環境を前提にしたら話がおかしくならんか? ヘタなコードか上手いコードか、ってのは 仕事、趣味、オープンソース、個人グループ、などに関わらず議論できることであって、 何でもすぐ自分の立場だけで考えようとするのはアホだしプログラマとしても才能無いぞ。 クソルール作ってる連中と大して変わらんしな。
355 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:15:54 ] 逆にオープンソースのように、ちゃんとみんなでソースをチェックしてやれば そんな些細なミスなんて問題じゃなくなるってことじゃねえか? ソースレビューすればすぐ見つかるようなことだろ。
356 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:26:57 ] > 何でもすぐ自分の立場だけで考えようとするのはアホだしプログラマとしても才能無いぞ。 自己紹介乙。(w >>348 にも書いたが、できたら今後コテ付けてくれ、スルーするから。
357 名前:354 mailto:sage [2008/04/19(土) 23:29:03 ] 何か勘違いしてるようだが346は俺じゃないよ。
358 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:29:17 ] >>355 まあ、それはそうだが、無駄な手間が増えるってことだからな
359 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:41:59 ] >>357 それはすまんかったが、どちらにせよ「仕事以外の話」と言うならわかるように 書いてくれと言うだけのこと。 > 仕事、趣味、オープンソース、個人グループ、などに関わらず議論できること > であって、 とてもそんな議論ができるとは思えないから。 # 少なくとも「趣味」が入ったら何でもアリだろ? # 七行プログラムみたいのが上手いコードと言い張る奴もいるだろうし。
360 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 23:53:33 ] >とてもそんな議論ができるとは思えないから。 そう?>>7 とか>>39 とか>>124 とかがまさにそういう議論(というより意見か) だと思うんだけど。 ># 少なくとも「趣味」が入ったら何でもアリだろ? ># 七行プログラムみたいのが上手いコードと言い張る奴もいるだろうし。 短いプログラムとしてなら上手いだろうし、可読性の点では最悪だろう。 それは趣味プログラマだからどうこうっていう話じゃなくね?
361 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:38:37 ] >>124 は「メモリきちきちの環境」とかだとむしろ推奨とか言い出す奴がいても おかしくないと思う。 > 短いプログラムとしてなら上手いだろうし、可読性の点では最悪だろう。 {} にしたって、文法上不要なところは省くと短いプログラムとしては上手いだ ろうし、(未熟なプログラマに対する) 配慮と言う意味ではは劣るだろ? それを、トータルでどっちが上手いと言う議論をしても、短いプログラムと未熟 なプログラマに対する配慮の重要度が「仕事、趣味、オープンソース、個人グ ループ、など」では違うから、結論なんかでないと思うよ。
362 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:49:34 ] >>361 !? それは逆アセンブルした結果をみて言っているのか?
363 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:56:42 ] >>124 と関連するが、自動変数のスコープを限定するためだけの {} はあり? なし?
364 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:58:53 ] >>362 お前は何を言ってるの?
365 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 00:58:54 ] >>361 コンパイラの最適化時の賢さにもよるだろうけど、ローカル変数なら 別に使いまわしても使いまわさなくても吐くバイナリは同じだと・・・・ 思ってるんだけど違う?w >結論なんかでないと思うよ いやそれでいいと思うんだけどなぁ。 ifステートメントとかの{}は、誰かも言ってたけど会社のコーディングルールで 決まってれば従えばいいし、一貫させることの方が重要だから 俺としては”さっさと終わっていい話題”だと思った。w 「このコードダメだよね?」「このコードうまいよねー?」みたいな話は 1.美的感覚を元にして話す から面白いんであって、ここはム板なんだし 2.愚痴っぽいネガな理由持ち出してコーディング規則を語る のは聞くに耐えんなぁ、と思っただけ。 音楽を聴くとき、あんたはアーティストがいかに不遇な環境で頑張ったかで良し悪しを決めるのかい? 先ほど書いた通りスレ主旨や流れにケチつけるのもアレだから、このくらいにしときまw
366 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 01:00:48 ] 変数使いまわして意味があったのはインタープリタのBASICだけだと思ってたけど
367 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 01:26:49 ] >>365 > いやそれでいいと思うんだけどなぁ。 だったらスルーしとけばいいんじゃないかな。 > 1.美的感覚を元にして話す その美的感覚は人によっていろいろ違う。 君には、「愚痴っぽいネガな理由」としか思えなくても、他の人には 美的要素として重要なことだってあるんだし。 > 音楽を聴くとき、あんたはアーティストがいかに不遇な環境で頑 > 張ったかで良し悪しを決めるのかい? 仕事ならそう言うこともあるだろうね。
368 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 01:56:39 ] >>348 =>>356 =>>359 =>>367 ??さっきから何様なの? >その美的感覚は人によっていろいろ違う。 >君には、「愚痴っぽいネガな理由」としか思えなくても >仕事ならそう言うこともあるだろうね。 なんていうか・・・色々と社会勉強してきてください;;;; (ヒント:相対主義)
369 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 03:02:08 ] くだらん事で必死だな
370 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 03:58:45 ] 上手なコード ヘタなコード fool proof なコード のそれぞれに語る価値はあろうが、スレタイを前提とすると、このスレで"上手なコード"を語る意味はない。 であるからして"ヘタなコードだけどfool proofだから書かねばならぬ"というのを攻撃するのもスレ違いに思う。 "上手ヘタに関わらずfool proofであるべき"などと主張したい奴は別のスレを立てろ。
371 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 06:52:53 ] 仕事でヘタコードを強要させられている愚痴ならともかく 仕事でヘタコードを制定しているアフォが自己肯定する為にこのスレで我侭言っている だけだもんなぁ。 一番議論を邪魔しているのが自分だと気づけっての。
372 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 08:52:23 ] >>368-371 > だったらスルーしとけばいいんじゃないかな。 > だったらスルーしとけばいいんじゃないかな。 > だったらスルーしとけばいいんじゃないかな。
373 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 10:54:09 ] なんでそんな3回も連呼するほど必死なん?
374 名前:デフォルトの名無しさん [2008/04/20(日) 12:35:18 ] むしろ下手なコードを奨励し、下手なコードを書く技術を向上させるための 議論をするスレだろ。 どうやったら上手に下手コードを実現するか。 さぁ議論再開。
375 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:37:36 ] おいおいw
376 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 13:02:55 ] >>373 今時必死か。 下手なレスの書き方を披露してるのか? (w
377 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 13:51:03 ] ケンカはやめて(><)
378 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 14:55:50 ] こういうのもヘタっぽい if (b > c) a = b; else a = c;
379 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:20:35 ] 結局「{}は仕事で絶対必要」クンが暴れているスレになったな。
380 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:35:00 ] >>379 とりあえず、職業プログラマにならないでね。 まわりの迷惑だからwww
381 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:37:29 ] とりあえず漏れの会社は>>380 の居るヘタコード強要会社ではないので安心だ。
382 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:39:27 ] おれも>>381 がいるトンチキ会社じゃなくてほっとしたよ。
383 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:40:49 ] たぶん漏れの会社も>>380 の居るヘタコード強要会社ではないみたいなので安心だ。
384 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 16:47:11 ] 囲わないと後から文を付け加えたときに囲い忘れるかもしれないなんて、 「条件式で誤って代入演算子を書いてしまう」以上にありえないことだと思う。 それと違って、囲うかどうかはどっちでもいいと俺は思うしコンパイラも警告出すことでもないけどね。 ところで、1文だけのとき、普段は省略するけど、if - elseでは気持ち悪いから両方を囲っているんだ。 if (...) { /*複数文の処理*/ hage; piyo; } else { hoge; //1文だけの処理 } そうしていたら、それで最近、常に囲うほうで統一すればいいような気がしてきた。
385 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:04:49 ] 囲い忘れたらインデントがずれるしね大体
386 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:22:34 ] >>384 > 囲わないと後から文を付け加えたときに囲い忘れるかもしれないなんて、 > 「条件式で誤って代入演算子を書いてしまう」以上にありえないことだと思う。 だよね〜。 と、俺も思っていたが、実際にあるから怖い。 >>381 みたいな自信過剰の奴は時にとんでもないポカミスをするから、そう言う 奴をはじく意味でも彼等の言う「ヘタコード強要」は必須。
387 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:28:53 ] 1.1行で書ける/書くのが自然な時は囲まない 2.それ以外は囲む これでやってる。でも1.の場合があまり無いから結果的に殆ど囲まないなぁ。
388 名前:387 mailto:sage [2008/04/20(日) 17:29:47 ] 1行ってのはifも含めてって事ね。 if(a) hogehoge;
389 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:00:56 ] >>386 1行のifを中括弧で括るのがヘタコードだなんて誰も言ってないようなw
390 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:07:45 ] >>388 大量に羅列する時などは一行に書いてしまうが、その時は {} で囲む。 正直、単発で一行にするのは勘弁して欲しい。 インデントがあれば、キーワードを見ずとも制御構造があることがわかるという利点がある。 また、デバッガで追いかける時に面倒くさいことになることがある。
391 名前:387 mailto:sage [2008/04/20(日) 18:28:17 ] >>390 うん、だから1.はあんまり使わない。 それと>>387 で全く逆の事言ってた。殆ど「囲む」の間違いね。
392 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:33:19 ] 前にも書いたと思うが、うちも>387と同様。 慣れた奴は書かなくてもいいと思うかもしれないが、 それを真似して慣れてない奴が間違うのが困るんだ。
393 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:45:44 ] >>392 「間違えるから成長する」という考え方は?
394 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:48:01 ] >>393 間違えて成長する奴なら、間違えなくても成長する。 間違えても成長しない奴は、いつまで経っても間違える。
395 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:48:19 ] >>392 無いカスだから間違える これ全世界共通の常識
396 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:54:55 ] 意味不明ww
397 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:57:04 ] 括弧で括ろうが括るまいとプログラムの変更箇所に対してテストしてれば どっちでも問題ないと思うが「括弧で囲まないと困る」ってのはなんだかな?って感じだ。 「慣れてない奴が間違える」はコーディングルール以前に 品質を維持するルールが存在しないアフォ組織に思えるが。
398 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:57:24 ] そんなところで間違って貰っては困る
399 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:57:41 ] if (a != 0) a--; b = a; みたいなのは紛れもなく糞
400 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:01:09 ] 糞と言うか見辛いだろうが、そこで修正間違えるヤツはかなりマとしての適正を欠いているとオモ
401 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:03:55 ] >>399 こんなの見た日には、メーリングリストで晒し者したい気分
402 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:05:25 ] if (a != 0) a--; b = a; if (c != 0) c--, b = a; どうぞ
403 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:07:20 ] 一応、こういうコード書いた奴を少し問い詰めたくなる罠 もしかしたら凄い理由があるのかも知れないし。
404 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:37:58 ] 成長しない見本 (w >>397 =>>258 同じ事を何回も書くんじゃねぇ。
405 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:51:58 ] なにが言いたいのか解らんが日本語が不自由な人なんだろうか?
406 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:54:56 ] たぶん、漏れのレスが絶対正義と信じて疑わない人なんだろ 成長しない人間にありがちな思考だ。
407 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:59:20 ] >>378 にもご意見くださいな
408 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:00:05 ] プログラミングが好きでもないのに仕事で中途半端に高い立場になってしまって 毎日ム板でストレス発散してんのさきっと。 だから趣味グラマ=実力皆無、非営利のコード=無意味と決め付けてるのもうなずける。 自分が会社の外で勉強する気が無い(向上心がない)から他人もそうだと思い込んでるのだろう。 そらウンコルールも作りたくなるわw
409 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:02:00 ] >>378 a = max(b, c); a = b > c ? b : c; の方がいいってこと? どれでもいい気がしなくもないけどmax使った方が判り易いか。
410 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:08:52 ] >>409 そうそう。元のコードだと最低でも3行に目を通さないといけないからヘタな書き方だと思うわけ。 この場合はa = max(b, c);が素直だと思う。実際のa, b, cはもっと長い変数名なんだから。
411 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:14:00 ] しかし二つしか比較してないのにmaxってのもなぁ
412 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:17:25 ] え?こういうの書かない? a = max(a, 0);
413 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:24:14 ] #define max(a, b) (a > b ? a : b)
414 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:29:11 ] 普通、static int max(int a, int b) {return a > b ? a : b;}じゃないのか?
415 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:31:06 ] C++だとテンプレート版max()があったような。
416 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:32:58 ] 俺は統一されてるのが好きだけど{}囲ってるけど、どっちもでいいな。 強要されるのはごめんだが。 ところでこいつを見てくれ、どう思う? if(isA){ if(isB) if(isC) hoge1(); else if(isD) hoge2(); }
417 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:33:37 ] .NETにはEnumerable.Max<T>()が……
418 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:35:18 ] >>416 構文解釈しにくいなあ elseはどこにかかっているんだろう でも俺は{}でくくるのを強制されるのはゴメンだね。
419 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:35:38 ] >>416 レビュアーにケンカ売ってるのかな? とか
420 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:36:20 ] >>416 プログラミング作法かなんかで見たような気がする
421 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:40:56 ] >>416 そのインデントからすると単なるバグ。正しくはこう if (isA) if (isB) { if (isC) hoge1(); } else if (isD) hoge2();
422 名前:デフォルトの名無しさん [2008/04/20(日) 23:43:58 ] いや、実はインデントをミスしただけかもしれない
423 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:45:31 ] >>416 Cだとelseって一番近いifにかかるよな?インデント間違ってないか?
424 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:54:10 ] >>423 スレタイを読め
425 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 23:59:21 ] >>424 と思った、ということじゃないのかな?
426 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:04:24 ] >>424 お前さんのツッコミの意図がわからん。
427 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:17:17 ] このスレも末期ですね
428 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:19:52 ] スレ違いだけど、おれの場合はグローバル変数を使い始めたら 糞コード生産開始の合図だわ。。
429 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:40:03 ] グローバル変数にはメリットもあるだろ。
430 名前:デフォルトの名無しさん [2008/04/21(月) 00:45:58 ] perlでクライアントの2chブラウザ作ったけど見たい人いますか? 4時間ほどで作りました
431 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:48:17 ] 日本語でおk
432 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:48:28 ] 別にいいです
433 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 00:50:03 ] Pythonのお勉強 Part 25 pc11.2ch.net/test/read.cgi/tech/1206876081/ 604 名前: デフォルトの名無しさん Mail: 投稿日: 2008/04/20(日) 20:46:14 perlで2chブラウザ4時間で作った〜 ボク厨房!Pythonスレで自慢してみたのに、 誰も食いつかなかったからこっちに来てみたよ!><
434 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:12:30 ] なんか流れを見てみると、自動インデント機能を使ってない人多いのかね? (ちゃんと文法まで解釈するやつね) >>416 とかみたいなのは打ち込んでいるうちにおかしいってわかるから、 入力の手間を省くためというよりは、文法チェックのつもりで使ってる。 だから、そういう機能がない環境のやつほど {}使いたがらせるんじゃないかと予想しているんだけど、関係あるかな? かく言う自分はEmacsメインで{}強制はバカっぽく見える派。
435 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:17:56 ] 一応確認するけど ヘタだなと思ったコードを貼るのがこのスレの趣旨だよね? まさかと思うけど>>374 がこのスレの趣旨じゃないよね?
436 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:29:19 ] >>1 を読め
437 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:57:32 ] >>435 374はネタだろ? 今までの流れからすると前者でおk
438 名前:デフォルトの名無しさん [2008/04/21(月) 03:05:22 ] 前者ならマ板だろ。 >>374 で桶。 ここは技術板だ。
439 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 03:32:12 ] なんか、最近、技術って言葉を聞くとむなしくなる
440 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 07:19:20 ] 俺は直感で書くとこうかなあ。 少し BASIC っぽい? if(式) 文; else 文; if(式) 文; else { } if(式) { } else 文; if(式) { } else { }
441 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 07:34:19 ] それ珍しいなw 1つめはおいといて、個人的には ifを囲うならelseも囲った方が、短くても同じ条件で分岐したものだと 認識しやすいと思う。 あと } else {も、(賛否ありそうだけど) } else { .... にした方が、行の最初に来るから認識しやすいかも?
442 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 08:30:17 ] あとネタ半分だけど VC使っててあらゆるインデントを消すツワモノが居たなw 「どうせ一緒なんだから消してもいいじゃんw」 とのことだった。その人は今はCOBOLerだが。
443 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 09:57:28 ] 変数名で悩まされるのはホント勘弁して欲しい。 int dynamic_static; ってなんなんだよ・・・ 一体何に使ってるのか気になってしょうがねえ。
444 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 10:03:47 ] >>443 そいつ、おちゃめだな
445 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 10:21:24 ] 変数は大抵ローマ字で書いてる int kao; int me; int hana; みたいに
446 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:10:33 ] FILE* fairu; _Bool raito_huragu; とか?
447 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:12:37 ] int koreha_daijina_switch,tugini_daijina_switch; float fudo_swith,syosuten; 死ねと思った
448 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:14:52 ] >>447 ネタでなくそんなコーディングがあるとは、いやはや
449 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:17:17 ] >>448 新人研修中で、実習させて提出されたコードの大半がこれ。 で極めつけが 課題.c 作成ファイル.doc <-Makefile とかで渡してきやがった 文字コードがUTF-8(MAC)だし意味不明死ねと思った
450 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 11:29:01 ] >>449 新人研修とはよかったじゃないですか 今後業務で同じことをしないよう指導できるいいチャンスじゃないかな、しかも効率よく 教官の腕が試されてると思って頑張ってくらはい
451 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 12:27:15 ] >441 } else { は個人的には使わないなあ。 } だけの一行ってのは、俺にはどうも if〜elseまで含めた、全体の終わりに見えてしまう。
452 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 20:06:52 ] if(cond) { //... //... } else { //... //... }
453 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:05:58 ] >>452 それ見たことある
454 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:10:12 ] 上のほうの#ifdefと同じで環境依存だけどVC8で #ifdef _DEBUG if( FALSE ) 〜; #endif 上のthen行が実行されしまうんだ。 if( FALSE ) { 〜; } と、括弧でくくればちゃんと機能するんだけどな。 #ifdefとifの組み合わせでバグる処理系って実は多いのか?
455 名前:デフォルトの名無しさん [2008/04/21(月) 22:22:22 ] 関数を分けすぎるってのはどうなんだ? 俺2行以上でかつ同じことを二回書くことになったら 関数に分けるって考えかたしてるんだけども これだと分割しすぎるような気がしてきた
456 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:26:05 ] >>455 関数化って処理ブロックの名前付けという働きもあるから 適切に名前が付いてるならいいんじゃないかな。
457 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:27:52 ] グローバル変数にすべきものってなんだ? 勝手に書き換えられると困るからなるべくグローバル変数にしないで、引数で渡すようにしてるんだが
458 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:40:33 ] 何階層もの関数を引数で渡していくのとグローバル変数使用とではどっちが見やすいだろうか。 グローバル変数といっても〜.cファイルの中だけで使うようにして他の〜.cでは使わないようにすれば C++で言うところのメンバ変数みたいな感じで良いと思うんだが。
459 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 23:35:03 ] それならstaticってつけるべ
460 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 00:14:48 ] 括弧の有無で問題が生じるなら。 それは括弧の有無自体が問題なのではなく、 関数の粒度が問題であると思うのだが。
461 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 01:33:27 ] >>458 グローバル変数じゃないじゃん 広義のグローバル変数にはあてはまる?
462 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 01:37:47 ] staticってつけたいけど、エラー時に変数ダンプしたい時にexternできなくなるからつけない・・・ ちゃんとつけてそのファイル内にダンプ処理書けばいいんだけなんだがめんどくさくって
463 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 01:38:53 ] クラスにしておけばいいのに。
464 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 06:57:20 ] *変数名が意味しそうな内容と実際に格納される内容が全く関係ない。あるいは単なる一時記憶になってる
465 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:56:51 ] 明解な変数名を付けて、名称通りの用途に使っておきながら、いつの間にかまるで違う用途に使っているとか、なかなかハイレベルなトラップだぜ。 レビュー前にコードを斜め読みして大混乱。
466 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 08:21:10 ] >>462 アクセサつければ?
467 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 08:50:43 ] Linuxならそんな問題起きないのにな。 ほんとWindowsは駄目だな。
468 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 09:35:42 ] おいおい、Windozeプログラマがキれちゃうぞ(笑)
469 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 12:07:33 ] >>465 プログラミング作法に似たようなのあったね。 コードを直したときにコメントを直すのを忘れて、コードとコメントが合ってない、とか。
470 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 17:50:29 ] 俺は分岐する際、エラー処理を固めるためにネスト深くしてるんだが不味いかな? returnは必ず一箇所で行うようにしてたらそうなってしまったんだが こんな感じ↓ if( ) { if( ) { if( ){ if( ){ //処理 }else{ // エラー処理; } }else{ // エラー処理; } }else{ // エラー処理; } } else { //エラー処理 }
471 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 18:04:08 ] Cではそうしていたけれど、他に移ったら例外処理があるから そんなネストは要らなくなったし、returnを1ヶ所に拘る必要も失せた。 すれ違いすまん。
472 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 19:21:14 ] >>471 Cでも呼び元でエラー処理すれば同じことじゃね
473 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 19:25:02 ] if文でネスト深くなるのは、いいけど例外で深くなると見栄えも悪いな まあ、別に悪くないけどさ try{ try{ try{ try{ // 処理 } catch( ) { ; } } catch( ) { ; } } catch( ) { ; } } catch( ) { ; }
474 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 19:27:09 ] try{ // 処理 } catch( ) { ; } catch( ) { ; } catch( ) { ; } catch( ) { ; } これでいいだろ?
475 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:00:20 ] >>470 判定と異常の位置が離れてしまって見難くならないか。 どれとどれが対応してるのか探すのがまず大変そうだ。 途中のreturnがいやならフラグはどうだ。 もしくはエラーだけ関数分けるか。 void hoge() { if(IsOk()) { //処理 } } bool IsOk() { bool isOk = true; if( ) { //エラー処理 isOk = false; } 中略 if( ) { //エラー処理 isOk = false; } return isOk; }
476 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:02:41 ] ヘタ
477 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:08:17 ] ちくしょう、傷付くじゃないか。 ちなみにどう直したらいい? ケチ付けようとかいう気持ちはなく、ただ純粋に参考にしたい。
478 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:10:08 ] 俺ならエラー時、returnの手前にgotoする まぁあくまで俺個人の意見
479 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:18:06 ] なるほど。そしてその指摘で気がついたが 別にすべての判定もエラー処理もする必要なかったから else ifでも良かったかも。
480 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:30:23 ] むかーしはこんなんもあったよな。 if (a=0) { a = 5; } else { a = 6; }
481 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:39:35 ] >>478 そこまでしてreturnしない理由て何?
482 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:47:07 ] >>481 ソース見たとき、一つのサブルーチンの中に複数returnがあるより、 ERRORみたいなラベルにgotoしてるほうが個人的にすごく見やすかったもんで
483 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:08:16 ] 俺もreturnは一箇所で纏めるな int iResult = FALSE; if( ) { if( ) { if( ) { iResult = TRUE; } else { } } return iResult; ってな感じ
484 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:11:04 ] 途中で送ってしまったorz int iResult = FALSE; if( ) { if( ) { if( ) { iResult = TRUE; } } } return iResult; それぞれの分岐のelseにはエラーメッセージの設定や後始末を入れる ただ、ネストがあまりにも多い場合や 後始末処理が重複する場合のみ 先頭で return 返すかな 以前いた現場のコーディング規約に goto は原則OKだったんだけど、gotoアンチだった俺が 使ってみたらやばい便利だったw
485 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:21:21 ] なんでBOOLって4バイトもあるん?
486 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:27:55 ] #define BOOL int とかなんとかあったような気がする。(Win32SDKの話だが。) C++のブーリアン型のboolとは別。
487 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:40:11 ] 理由になってないよ
488 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:49:07 ] 8bitとかの方が節約できるのに、ってことか? アホかお前
489 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:55:09 ] return を複数書いてて、それにケチをつけられたら「これはガード節ってテクニックです! ケントベック読んだことないんですか!?」とか 言い返してやればいいよ。
490 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:00:35 ] 単純にintの方が速いからじゃね どうせ1bitを正確に表現する型はないわけだし
491 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:07:50 ] intをcharにしてメモリを節約しても、油断してるとあちこちでintに変換するコードが入るから、 コード領域では、節約した分はすぐふっとぶね。
492 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:31:28 ] >>458 > C++で言うところのメンバ変数みたいな感じで良いと思うんだが。 メンバ変数でも、ひとつのクラスにたくさんあって、メンバ関数もたくさんあるって状態で、 それを好き勝手にいじってたら、グローバル変数と同じだよ。 イベントドリブンのシステムで初心者に作らせると、たいがいそうなるね。
493 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:33:59 ] つーか、BOOLは真偽値(だけ)を現す型じゃないんだってば。
494 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:59:25 ] 真と偽とエラー値の3通りの値を返す可能性がある、 返り値がBOOL型のWin32 APIがあるらしい。 どうせAPIの互換性なんか気にもしてないんだろうから(偏見)、 とっとと直せばいいのに。
495 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 02:34:07 ] GetMessageがBOOL返すけど、何の為にBOOLなのかわからん。 intでいんじゃね? defineする必要なくね? ---MSDN引用 WM_QUIT 以外のメッセージを取得した場合、0 以外の値が返ります。 WM_QUIT メッセージを取得した場合、0 が返ります。 エラーが発生した場合、-1 が返ります。 ---引用終わり
496 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 03:31:07 ] INTやらBYTEとかと同じだろ。そんなこと言い出したら Win32APIの型全部無駄だし。 一応BOOLは、「TRUEかFALSEのどちらかになりますよー」という 返り値が2値であろうと予想がつくという意味がある。 だからこそGetMessageはINTか何かにしてくれないと誤解を招くがww
497 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:41:29 ] XXXcheckなメソッドを複数呼ぶまとまりの メソッド名とか何かいい名前ないですかねぇ 登録前のチェック群メソッド名
498 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:44:07 ] CheckPhase
499 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:57:47 ] Checkers
500 名前:497 mailto:sage [2008/04/23(水) 14:35:57 ] >499 素でそれ使ってましたw それでbool返せば他の人が isMethodみたいに イメージできるかなぁと思った次第です まぁちゃんとメソッドヘッダにreturn説明書いてますけれどね
501 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:14:45 ] 状況にもよるだろうが、Checkを確認するの意味で使っているとしたら、 CheckXXXになるケースが多いのではないだろうか。Checkerなら、XXCheckerでも分かるが……
502 名前:デフォルトの名無しさん [2008/04/23(水) 21:41:09 ] gotoつかうやつは知識が無い奴。 上級者はfor(;;)やwhile(1){}を使う。 ヒント:break,continue 分かるかなぁ?www
503 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:07:37 ] >>502 ・・・
504 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:19:14 ] 大学の時に教授にgoto文を使っちゃだめって言われたけど、 なんで?
505 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:25:18 ] 無限ループよりはdo{...break}while(false);のほうが安心出来る
506 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:46:00 ] >>502 それを使うのが上級者かどうかは置いといて、それを知ってるぐらいで上級者って言って欲しくない。
507 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:46:44 ] >>504 それは ja.wikipedia.org/wiki/%E3%82%A8%E3%83%89%E3%82%AC%E3%83%BC%E3%83%BB%E3%83%80%E3%82%A4%E3%82%AF%E3%82%B9%E3%83%88%E3%83%A9 という昔の学者が(ry
508 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:50:45 ] 場合によって使い分けれるのが一番だな
509 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 22:57:50 ] だが、gotoがない言語でも普通に開発できるんだから無理に使う必要ないケースが多い。
510 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:10:47 ] >>502 for(;;){break;}を使ったコードがgotoを使ったコードよりどういう点で優れているのか 説明してくれ。 for(;;){break;}の何が良いのかさっぱり分からないんだ。
511 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 23:22:00 ] 無限ループからbreakで脱出する利点はわかる。処理Aが終わらないと条件Aの判断ができないとき、 処理A; while (条件A) { 処理B; 処理A; } みたいな冗長なコードを書かずにすむ。 while (1) { 処理A; if (条件A) break; 処理B; } でもgotoとは関係ないよね。
512 名前:>>502 じゃないけど mailto:sage [2008/04/23(水) 23:32:31 ] >>510 goto は、ラベルのあるところならどこにでも飛べるのでほんのちょっぴり危険。 for(;;){ break; } なら、後の } に次に行くしかないので少しだけわかりやすい。 (とろこで、なんで for(;;) なの? >>505 のように do{ break; } while(false); じゃないのか?) 例えば、 if(〜){ goto Err1; } Err1: 〜; if(〜){ goto Err1; } Err2: 〜; なんて言うミスを防げる。 まあ、関数内で goto を多用しなければあまり問題ないと思うけど、一番の難点は goto を許すと、ループを goto で作ったりするアホがでてくる可能性があると言 うことだと思う。
513 名前:>511 mailto:sage [2008/04/23(水) 23:35:49 ] >if (条件A) break; ...だめだろw >でもgotoとは関係ないよね たぶん、こゆこと goto skip; do{ 処理B; skip: 処理A; }while(条件A);
514 名前:510 mailto:sage [2008/04/24(木) 00:00:02 ] >>511 >>513 なるほど。たまに利用したいケースはあるかも知れない。 >>512 ん〜、タグ名のマチガイかぁ。 それって、変数 x に代入すべきところを y に入れちゃったってのと同レベルのマチガイでしょ。 なんでその問題解決に、無限ループしてカッコ閉じを探すスタイルを使うのかが分からない。 タグ名で意味づけできる&無条件で移動するという意図が明確なんだから、 まだ goto 使うほうがマシな気がするんだよねぇ。 > 一番の難点は goto を許すと、ループを goto で作ったりするアホが > でてくる可能性があると言うことだと思う。 これは激しく同意。
515 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:08:43 ] >>513 う〜ん。そのgotoはキモイw 悪い例として書いてくれているんだろう。 というのは、俺が>>511 の書き方をするのは、長さのわからないストリームを読むときにほぼ限られるから。 処理Aでストリームを読んで、処理Bでそのデータをゴニョゴニョするのに、順番が逆になっていると、実にキモイ。
516 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:13:40 ] > それって、変数 x に代入すべきところを y に入れちゃったってのと > 同レベルのマチガイでしょ。 自分はそう言う間違いを絶対にしないと言うなら、goto 文使っても問 題ないよ。
517 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:57:42 ] 10行くらいの関数だったら多少のgotoは気にならない。 でも数十行以上の関数だったら勘弁してほしい。
518 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:59:59 ] >>513 511の方が普通だな。本当に普通だ。 何かが起こったらbreakする普通の無限ループに過ぎないわけだがw javaの名前付きブロックで置換できないようなgotoの使い方は 多分、考え直した方が良いな。 名前付きブロック、デストラクタ、例外、関数リテラル とかがあれば、gotoは要らなくなってくる。 全部無いプレーンCには明らかにgotoが必要だろ。
519 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:04:55 ] >>518 >>513 が>>511 に突っ込んでいるのは、多分、条件が逆ってことだろ。
520 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:35:44 ] >>519 あー、あー、やっと理解できた。 502が想定して叩いてるgoto使い、 を想像したコード例を書いたのか。
521 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:47:06 ] >520 本当に理解できてるのかw >条件が逆ってこと だNE!
522 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:07:00 ] >>条件が逆ってこと >だNE! その下の変なコード例挙げた意図を曲解したってことだよ。
523 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 02:56:54 ] goto議論はアホでも参加できるからすぐ荒れるね
524 名前:502 mailto:sage [2008/04/24(木) 04:29:22 ] ネタ投下したまま忘れてた。ゴメン
525 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 04:36:38 ] >>524 よぉ、キチガイ
526 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:03:40 ] goto文の代わりにwhile文を使うメリットを教えて進ぜよう。 それは宇宙の真理をコードで表現することである。 本質的に全ての制御はループで記述できるという宇宙の真理が存在する。 むしろ、我々が「ループではない」と思っているものは一回だけループするという特殊なループに過ぎない。 このことを表現することが出来るのである。
527 名前:510 mailto:sage [2008/04/24(木) 08:04:17 ] >>526 う〜んなるほどありがとう
528 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:20:18 ] つまり、whileさえあればifも必要ないってことですな。
529 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 08:53:35 ] >501 RegistCheck, InsertCheckとかで XXXXCheckを束ねて boolをreturnしてるけど まぁ一般的なんですね
530 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 09:26:58 ] for(i=0;i<x;i++){ for(j=0;j<y;j++){ goto LABEL; } }
531 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 10:28:12 ] コードについて話すなら。 構造化定理 ぐらいは知っておいてくれ。
532 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 12:32:51 ] ぐぐってみた。 「構造化定理は、 全てのアルゴリズムは、 順次、選択、繰り返しの3つの基本制御構造を組み合わせて作ることができる という定理ですが」 ・・・・・w
533 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 15:14:51 ] 532 :デフォルトの名無しさん [↓] :2008/04/24(木) 12:32:51 ぐぐってみた。 「構造化定理は、 全てのアルゴリズムは、 順次、選択、繰り返しの3つの基本制御構造を組み合わせて作ることができる という定理ですが」 ・・・・・w
534 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 21:22:43 ] >>470 >>475 >>278 (っ´▽`)っ この議論はコードコンプリートに取り上げられている。 さあ読むんだ。コードコンプリートを。
535 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 21:25:45 ] >>472 (っ´▽`)っ リソースを確保してるのがローカル変数だったらどうする? int Func(void) void *p; p = malloc(1024); (処理) free(p); return; }
536 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:28:49 ] alloca
537 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 21:31:23 ] >>491 (っ´▽`)っ それどころかめちゃくちゃ遅くなる場合がある。 たとえばchar型をループカウンタに使った場合。 ループ1回まわる度に、int型にキャストされるから。 単なるキャストと思われがちだが、 キャストというのは記憶領域を新たに確保しなければならない 結構高価な処理なのです。
538 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 21:50:27 ] (っ´▽`)っ っていうか、returnを複数書くと保守の時がっかりするんだよね。 int Func(void) { (処理) if(ErrorCode == 1){ (エラー処理) return; } else if(ErrorCode == 2){ (エラー処理) return; } else if(ErrorCode == 3){ (エラー処理) return; } else{ (正常時の処理) return; } } 上司「(っ´▽`)っ どんなエラーが起きても終了処理Aが行われるように直して!」 部下「(っ´ω`)っ 4箇所も直すのか・・・。」 〜1年後〜 上司「(っ´▽`)っ どんなエラーが起きても終了処理Bが行われるように直して!」 部下「(っ`Д´)っ また4箇所も直すのか!氏ね!」
539 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 21:54:22 ] コードの標準化、改善がなされているプロジェクト (っ´▽`)っ(っ´▽`)っ(っ´▽`)っ(っ´▽`)っ ←みんなニコニコ コードの標準化も改善も全くなされていないプロジェクト (っ´ω`)っ(っ`Д´)っ(っ;д;)っ(っ ゚▽ ゚)っ ←欝病、キレる人、泣く人、狂う人
540 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 21:57:20 ] >>538 Cだとそうなって仕方ないけど、 finallyやデストラクタなど後始末をまとめる機能のある言語なら困らない。
541 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 21:59:13 ] >>540 (っ´▽`)っ 大賛成!Cだと困る。だからCは困る☆
542 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:03:57 ] まぁエラー時の共通処理を関数化したりマクロ化すればいいんだけど それでも面倒だよね
543 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 22:04:11 ] (っ´▽`)っ こういうことだね。 int Func(void) { try { (主処理) } catch(Exception e) { (例外処理) } Finally { (終了処理) } } 上司 「(っ´▽`)っ 終了処理Aを入れて☆」 部下 「(っ´▽`)っ は〜い☆Finally句に入れるだけでOK!」
544 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 22:13:46 ] (っ´▽`)っ 構造化プログラミングとは、順次、選択、繰り返しで構成されるプログラミングだね。 主処理、エラー処理、終了処理で構成するプログラミングにも名前を付けよう☆ 主処理、エラー処理、終了処理を1ブロックとし、 そのブロックも主処理、エラー処理、終了処理のいずれかに所属する。 そのブロックも、それを含むブロックも、さらにそれを含むブロックも 主処理、エラー処理、終了処理のいずれかに所属する。 ここでいう、主処理とはtry句、エラー処理とはcatch句、終了処理とはfinally句に対応する。 どんな名前がいいかな?
545 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:16:26 ] Java?
546 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:24:08 ] つ 定列化プログラム すまん、センスねーな gotoって昔は使うなっていう風潮があったけど 今はスキルのある人が使うのはいいんじゃない? てきな流れになってなかった? まあ、gotoのジャンプ先は return 直前の後始末にセットしておく以外使い道は分からんが
547 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:36:22 ] 初期化 ループ { if(x) goto 初期化 } こんなときとか
548 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 22:53:04 ] >>547 初めてみたw 今居るプロジェクトで do { startLoop: // 処理 if(){ goto startLoop; } } while(1); ↑のような書き方してる奴が居た マジ吹きそうになったな
549 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 23:04:01 ] continueを教えてやれよ
550 名前:側近中の側近 ◆0351148456 [2008/04/24(木) 23:11:09 ] (っ´▽`)っ VB厨なんじゃないの?continueを知らないってことは
551 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 01:01:06 ] 勉強不足なんだろうな。 他人のコードを見れば分かるレベルの話じゃん
552 名前:デフォルトの名無しさん [2008/04/25(金) 01:03:36 ] え?なんでcontinue使わないといけないんですか? goto startLoop;でもあっていると思うんですが。。
553 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 01:24:54 ] doとwhileでcontinueしたときってwhileの判定ってやるんだっけ? 両方とも滅多に使わないから組み合わせ時の動作が分からない。
554 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 01:25:15 ] あってるよ。どっちも同じ動作だし。 同じ動作でも書き方が違うから「ヘタなコード」というものができるんじゃないのか?
555 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 06:40:02 ] gotoで済むところを わざわざwhile + continueに変えて可読性を落とす馬鹿
556 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 08:23:58 ] 555 :デフォルトの名無しさん [↓] :2008/04/25(金) 06:40:02 gotoで済むところを わざわざwhile + continueに変えて可読性を落とす馬鹿
557 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:20:27 ] >>553 whileの判定はある このスレ読むと goto は使ってもいいんだなと思うな 滅多に使わないけど
558 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 09:27:45 ] >whileの判定はある マジで? うわー勘違いしてた
559 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:04:21 ] gotoは有用だが解ってない奴に使わせると危険
560 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:09:17 ] ふぃなりーはとらいとかきゃっちのなかからりたーんのときでもじっこうされますの?
561 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 11:59:52 ] そのためのfinallyだ。読みはファイナリーだ。
562 名前:デフォルトの名無しさん mailto:sage [2008/04/25(金) 21:07:05 ] フィナリーセブン!
563 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 00:09:33 ] gotoは構造を無視できるから嫌われる
564 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 02:32:26 ] 本物のプログラマは、gotoを恐れずに使う。
565 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 02:57:40 ] 本物? gotoを使わないようにするためだけに変な構造のコードをかくのは確かにヘタだが
566 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 03:45:53 ] continueもbreakも概念的にはgotoと同列
567 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 07:42:39 ] >>565 「本物のプログラマ」をググってみるといいと思うよ
568 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 08:05:02 ] breakもcontinueもreturnも、乱用するとgoto同様に読みにくくなる。 ただ、gotoに比べて前者の3個は、飛ぶ方向と位置があらかじめ決まってる分だけ可読性に少し寄与しているだけ。
569 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:13:19 ] >>566 gotoの真の力は計り知れない。 continueやbreakなどとはその設計段階からして、まったく異なる思想の元に創生されたものだ。 迂闊にgotoの封印を解いてしまうと管理局の統制が利かなくなり世界を崩壊に導く恐れがある。
570 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 10:21:31 ] 特にC/C++のgotoは、ループの外から中に飛び込めるからなあ。 switchのラベルもそうだが。
571 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:24:36 ] おまえらgotoでこんなに揉めるなんて 継続とか使ったらどうなっちゃうの
572 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:27:34 ] すまん継続って何だろう? 継承じゃない?
573 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:29:00 ] まあ、>>523 の言う通りってこった。 テンプレートとかジェネリクスでは、ここまで盛り上がれまい。
574 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:37:49 ] >>572 プログラマが制御できる大域ジャンプのようなもの setjmpの強力な奴と思えばいい schemeとかrubyに実装されてる
575 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 11:46:11 ] >>574 ありがと scheme、rubyはノータッチだorz
576 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 12:07:32 ] >>575 無知の言い訳ワロス 俺も知らなかったけど
577 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:29:52 ] >>575 ノータッチとか言う以前に gotoの話してたのに継承のtypoなわけないだろ常考
578 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 13:32:03 ] >>577 昔は、継承は「90年代のgoto問題」とか言われてたよ。
579 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 14:26:18 ] continuation どころか closure さえ使えないんだから許してやれよ。
580 名前:側近中の側近 ◆0351148456 [2008/04/26(土) 18:19:39 ] (っ´▽`)っ 継承はカプセル化を崩壊させるからな
581 名前:デフォルトの名無しさん [2008/04/26(土) 18:27:02 ] にちゃねるって程度が低いよな。 なんかがっかりするレスが多い。
582 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 18:28:44 ] わざわざ書き込んじゃうあたり、程度が知れるね♪
583 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 18:29:34 ] まとめると、 ・本物のプログラマは goto を恐れないで使う ・賢い本物のプログラマは continuation も使いこなす ・女子供は break や continue だけを恐る恐る使う
584 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 18:38:27 ] continuation = 大域で状態付きのgoto gotoよりたちが悪い
585 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 18:46:49 ] 吉野家コピペに近いものがあるな
586 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 20:27:03 ] gotoは適切に使えばいいと思うが、 gotoを使うことを心がけたコーディングは駄目だな。
587 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 20:37:15 ] if と goto さえあれば生きていける。
588 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 20:37:54 ] そうか、gotoも使えるようにならないと駄目だな。 機会があれば使って、慣れるようにしよう。
589 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 20:38:35 ] 悪習を真似る必要は無いぞ
590 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 20:40:10 ] goto使うと見通しが悪くなる 気がする
591 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 21:18:38 ] 必要な処理が全て下に固まってるってとてつもなく よろしくない?経験の浅い初心者にその処理下みれば全部あっから。 って指示しやすい。
592 名前:デフォルトの名無しさん mailto:sage [2008/04/26(土) 21:51:50 ] それをするなら、必要な処理を全て下に固める事を規約で決めないといけない。 さらに言うとその規約の外で書かれたコードはそうなっている保証がない。 潰しのきかない知識を植え付けるだけだと思う。
593 名前:デフォルトの名無しさん [2008/04/27(日) 01:15:23 ] クロージャーやらsetjmpって構造化無視なのか。 手元の小さな作業は減るけど見通しが悪くなるでよい?
594 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 01:32:38 ] とりあえず、closureとcontinuationについて調べてから発言しようぜ。
595 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 02:25:32 ] 恐ろしい・・・
596 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:28:38 ] >>593 クロージャを使う事で構造化より見通しが良くなるのであれば それは良い事
597 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:30:28 ] だいたい手段と目的を履き違えている奴多すぎだろ 色々な手法は何のために作られてるのか考え直せ
598 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 10:35:11 ] 設計思想が無い 道具の使い方はいくない バカと包丁だじぇ
599 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:43:43 ] ・インデントが半角スペースではなくタブで行われている
600 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:47:14 ] ・しかも、4桁毎のタブを使用している。
601 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 17:53:20 ] エディタでタブみたいにカーソルが動いてくれれば、正直どっちでもいい。 逆に言えば、そうじゃないことの方が多いからタブ使っている俺。
602 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:25:38 ] 普通にtabですが 混在させてる奴は糞
603 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 18:49:53 ] 基本タブで微調整にスペースって感じで混在させてる奴はよくいるな。
604 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:14:37 ] タ ブ スペ4while(式) { タ ブ タ ブ 何らかのコード なんてされると、4タブ派はまずネスト修正しないといけないからな。 単文のネスト以外はTabかスペースに統一して欲しいよ。
605 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:16:40 ] そんなのフォーマッタにかけてしまえばよいじゃん。 ソース内にアートを書くようなのにはjavadocでも教えてやれ。
606 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:25:31 ] >>603 条件演算子でこうやって縦に揃えるときにやる。 [タブ]return isHoge ? Foo [タブ]ここは空白 : Bar;
607 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:25:56 ] タブa = 0; タブbb = 1; タブccc = 2; みたいに揃えるためにスペースを混在させるのはありか?
608 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:27:39 ] そろってないよ
609 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:28:57 ] >>607 IDEの類が勝手にスペースとっちゃうことがあるから、 行頭のインデント以外で、縦に揃えようとするのはやめてほしい。
610 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 19:43:26 ] そうか無しか。残念。 混在は行頭だけにしとく。
611 名前:デフォルトの名無しさん mailto:sage [2008/04/27(日) 20:15:49 ] gnuはインデントがスペース2コで、8以上になるとタブになるって、変態インデントだよな。
612 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 00:24:42 ] >611 あれ、8タブを強制されてる感じがして嫌だわ。
613 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 00:26:52 ] >606 そういうコードはネストを崩される余地がほぼないから 4タブでもちょくちょく書く。
614 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:02:59 ] >>599 ifが追加されるなどインデント変更する作業が面倒そう >>600 set tabstop=4とでもしとけばええがな
615 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 16:20:19 ] 俺はタブは2つ分だよ。
616 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 17:18:44 ] ああ、キチガイか。
617 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:17:03 ] タブ8でコード書いてる俺は?
618 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:20:29 ] インデントはスペース2個! タブは使わない(タブキーは使うけど)
619 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 20:24:23 ] インデントはタブキーでやれ!! スペースでもいいけど。
620 名前:デフォルトの名無しさん mailto:sage [2008/04/28(月) 21:28:48 ] ここを読んでいて、最近はVisualStudioの自動整形任せで、2年くらい自分でインデントしてないことに気付いた。
621 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:10:39 ] そういえばVisualStudio使うと強制的にスペースに変換されてるな。
622 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 00:42:32 ] VisualStudioを使うと強制的にTabになる。 場合によってはTab+スペースになる。 (関数のパラメータの一つ一つについて改行を入れた場合など)
623 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 01:25:43 ] >>621-622 ひんと: オプション設定
624 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 02:05:37 ] >614 まともな環境ならインデントレベルの変更なんて コマンド一発か、選択範囲のインデント変更くらいあると思うが。 無くても矩形コピー → 矩形貼付で出来ちゃうし。
625 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:00:02 ] オレは7カラム目で揃える主義。
626 名前:デフォルトの名無しさん mailto:sage [2008/04/29(火) 23:11:37 ] インデントはtabにしておくと、読む側が好きなインデント量を指定できて便利じゃないか。
627 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 02:06:22 ] Tabキーでスペース四個挿入するオプションの無いエディタは 作者ともども消えてなくなればいいと思う。
628 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 02:50:53 ] インデントって>>626 の言うように、Tabだから良いんじゃないのか???? スペース1つだけ使うときは別として、インデントはTabじゃないの??????????
629 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 04:36:43 ] >>625 のソースの全行の6カラム目に*を入れたい
630 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 09:00:43 ] >629 それ何てCOBOLのコメント
631 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 12:37:05 ] 6カラム目は Fortran の継続行じゃなかったっけ。 (ちなみに、空白以外の文字ならいいんだけど '$' を推奨ってものの本に書いてあったな。) COBOL のコメントは 7カラム目だし。
632 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 12:54:55 ] FORTRANの神カードには行番号と継続の桁の線が太くなってたから何桁目だったか覚えてないや。
633 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 13:01:51 ] 恐れ多いカードだな。
634 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:13:54 ] だからどうして行主導の言語の話しになるのか と
635 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:21:34 ] 行主導じゃない言語のほうが稀だろ。 つーか、COBOLやFORTRANは桁依存性が高いと言うべきじゃね。
636 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:25:36 ] >>635 >行主導じゃない言語のほうが稀だろ。 いまどき、固定書式が要求されるのなんて 古いFORTRANと古いCOBOL、それにRPGくらいしか知らないんだが そんなに多いのか?
637 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:29:26 ] >>636 例えばC/C++はプリプロセッサやコメントが行単位だし、ソース最終行に改行は必要だね。 改行コードを全く必要としない言語ってbrainfuckの類以外に何がある?
638 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:41:24 ] 行主導と固定書式じゃ全然違うだろ。 つーか、行主導とやらの定義を明確にしてくれよ。
639 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 01:16:37 ] 行主導って多次元配列の添え字の数の変わるのが 右からか左からかの違いに使われる言葉だと思っていたな。まあいいや 行主導:parsingの単位が物理的な行である言語 文主導:parsingの単位が文 ってなところでどうかな?
640 名前:デフォルトの名無しさん mailto:sage [2008/05/01(木) 07:34:52 ] >>637 Pascal / Modula-2 あたりは改行コードは不要なはず。 >>639 > 行主導:parsingの単位が物理的な行である言語 おおまかにはそれでいいと思うんだけど... ・コメントは行末までと言う言語が多いからこれをどうみるか? ・プリプロセサの扱いは? ・BASIC なんかの行番号が必要な言語は? 等を決めないと俺俺定義で語る奴ばかりになりそう。
641 名前:デフォルトの名無しさん [2008/05/11(日) 19:24:33 ] 今いる職場でみたツールプログラムは ・全変数の8割がグローバル変数 ・配列などを一切使っていない(それどころか、mallocなどもない) ・変数名がやたら長い ・ほとんどCの標準関数ばかりでWindows APIをまったく使っていない ・メンバ変数やメンバ関数は全部 public にしている 一応作った人って6年くらい働いている人なんだけどね・・・
642 名前:側近中の側近 ◆0351148456 [2008/05/11(日) 19:45:40 ] >>641 (っ´▽`)っ それはCOBOLerだな?!
643 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 19:52:02 ] >>641 >・ほとんどCの標準関数ばかりでWindows APIをまったく使っていない 移植性考えたらこの方がいいと思うが...。 て言うか、やっつけツールなら >>641 のような状況もありだと思う。
644 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 20:04:32 ] ツールプログラムなら変数名がやたら長い点を除けばワリとあるんじゃね? だって他人が読む前提を捨てているプログラムだろ? 漏れだったら別にx1とかchr1とかメチャ省略するし。 それに漏れも出来るならWindowsAPI使わずに済むなら使わない派だし。
645 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 20:16:40 ] ツールなら逆に、全部ローカルでprivateにして、極力他人に触らせないようにするけどなぁ。
646 名前:デフォルトの名無しさん [2008/05/11(日) 21:12:08 ] >>642 いや違うよ。Cをずっとしていたみたい。C++はそんなに経験ないかも。 >>643 >>644 やっつけツールみたいなのは今までも見てきたけど、今回のよりずっと見栄えもいい物ばかりだったからな・・・ 漏れが厳しいのかな・・・ それに今使ってるツールはみんな日常的によく使うし、今後仕様改訂に伴って追加・変更もあるからせっかくならそれなりに書いたほうがいいと思ったのだ。
647 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:25:58 ]
648 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:48:24 ] >それに今使ってるツールはみんな日常的によく使うし、今後仕様改訂に伴って追加・変更もあるからせっかくならそれなりに書いたほうがいいと思ったのだ。 そう思うなら>>646 が自分で書き直せば?って思うが。 やっつけのツールでソースが公開されているのは「不満があるならテメエで直せ」って 意思表示でもあると思うが。 漏れもやっつけ&他人に使って欲しくないならソースを隠す。 やっつけ&責任放棄の時はソースを晒しとく。w
649 名前:デフォルトの名無しさん [2008/05/11(日) 21:52:42 ] >>648 たしかにそうだね。 今度書き直してみるよ
650 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 21:56:33 ] やっつけでもグローバル変数8割はないだろ。 スクリプト言語で、50行のソースとかならともかく。
651 名前:デフォルトの名無しさん [2008/05/11(日) 22:44:42 ] わかりやすいコードを作成するための 6 つの方法 ttp://www.ibm.com/developerworks/jp/linux/library/l-clear-code/index.html ヒント 1: 賢い人にならってコメントを付けること ヒント 2: #define をたくさん使うこと。ただしやたらに使うのは禁物です ヒント 3: わかりにくい変数名を使わないこと ヒント 4: エラー・チェックを行うこと。誰にだって間違いはあります ヒント 5: 「Premature optimization is the root of all evil (早まった最適化は諸悪の根源である)」 - Donald Knuth ヒント 6: あまりにも賢くなりすぎないこと
652 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 22:47:45 ] >やっつけでもグローバル変数8割はないだろ。 >スクリプト言語で、50行のソースとかならともかく。 やっつけなんて精々1・2画面程度のソースなんじゃね? んな、やっつけで500行も書くとは思えんが。
653 名前:デフォルトの名無しさん mailto:sage [2008/05/11(日) 23:15:19 ] そもそも、メンバ変数とか言ってるから C++ の話だと思うんだが、C++ で malloc が どうのこうのと言ってる >>641 が人のコードを批判するのもどうかと思う。
654 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 16:24:18 ] >>653 new/delete はおろか malloc/realloc/free すら使っていない、って事だろう。 態々論点からズレたところを指摘せんでも。
655 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 21:26:22 ] え〜〜っと、本人乙ってことでいいのかな。
656 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:24:06 ] newもmallocもHeapAllocも使わないならどうやってヒープ確保すんの
657 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 22:42:37 ] 配列を使わないのにヒープなんていらないだろ。
658 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:08:15 ] 複数個のデータが必要な時はどうしてるんだ? まさか int n0,n1,n2,n3...; なわけないよな?
659 名前:デフォルトの名無しさん mailto:sage [2008/05/12(月) 23:12:27 ] リンクトリスト
660 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 04:59:09 ] >>659 >>659 >>659
661 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 07:41:24 ] >>658 std::vector
662 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 08:44:20 ] 配列は使わないのにSTLは使うなんて、もう何が何だかw
663 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 11:24:53 ] >662 C++で、速度がそれほど切羽詰まってなきゃ妥当な選択だけど
664 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 11:37:45 ] vector なら配列も使ってないしヒープもいらないと言うのか? vector は配列の一種だし、中でヒープも使ってるはずなんだが。
665 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 11:55:40 ] ユーザコード内で使うのは駄目ってことなんじゃないのかな
666 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 13:06:55 ] ユーザーコードって何だよ
667 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 14:58:52 ] 相手の意図を読むとかググるとかできんのかな。
668 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 16:58:36 ] >>641 で書かれてるヤツがvector使えるとは思えないw
669 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:16:25 ] 初心者です vector使うのはやっぱ高度な難しいんですか? やはりGlobalAllocなどで馴れてからにしたほうがいいですhおうか?
670 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:18:07 ] >>669 やってはいけないことを知ってれば問題ないよ。 追加削除したら参照もイテレータも無効になることを知ってればOK
671 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:31:40 ] >>669 そもそも日本語使うのは高度な難しいんじゃね?
672 名前:デフォルトの名無しさん mailto:sage [2008/05/13(火) 20:33:50 ] 高度な文字コード
673 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 03:48:47 ] 有名なAccelerated C++では配列やポインタよりも先に vectorが出てくるから全然不自然ではない。 >>641 で言われている人がvectorを使っているのかどうかはさておいて。
674 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 11:53:11 ] アクセラC++はstringもchar[]より先なんだよな ""リテラルは出て来るが、stringに入れる為の表記としてだったり その後もしばらくstringとは別物であることしか説明しない 詳細に説明されるのは、後々charと配列の説明が終わった後
675 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 12:58:25 ] 同じ著者のC++Primerもそのスタイルになっとるな
676 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 17:08:47 ] そもそもGlobalAllocを積極的に使う機会ってあるか? グローバルハンドルを使わざるを得ない機会はあるが、 そんときにはvectorで代替できない(アロケータで何とかなる問題でもないはず)。 それ以外のときはそもそもmallocとかnew[]で十分、GlobalAllocを選ぶ理由はない。 もちろん、その中のどれよりもvectorのほうが便利だが。
677 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:05:07 ] new と vector のどっちが便利かはさておいても、malloc のでる幕なんてないと思うが。
678 名前:デフォルトの名無しさん mailto:sage [2008/05/14(水) 23:09:04 ] それは環境依存なので
679 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:11:38 ] C++でnewではなくmalloc使う状況が思いつかん。 newの実装がひどくて、しかたなくmalloc使っているとか?
680 名前:679 mailto:sage [2008/05/15(木) 22:17:32 ] 書き込んだ後に思いついて試してみた。 malloc/freeならコンストラクタ/デストラクタが呼ばれないんだな。 そういうわけで、 ・コンストラクタ/デストラクタの呼び出しを抑えたい ・ベターCとしてC++使っている 環境なら、mallocもありなんだな。
681 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:22:37 ] そういう場合でも new char[x] でOK
682 名前:デフォルトの名無しさん mailto:sage [2008/05/15(木) 22:34:27 ] > ・コンストラクタ/デストラクタの呼び出しを抑えたい そもそもそんな状態になること自体がヘタなコー...
683 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 12:13:29 ] realloc使うときとか?
684 名前:デフォルトの名無しさん mailto:sage [2008/05/16(金) 23:51:59 ] >>680 > malloc/freeならコンストラクタ/デストラクタが呼ばれないんだな。 明示的に operator new ( size_t ) を呼べばコンストラクタは呼ばれないし、インターフェース的にも(例外以外は)malloc() 互換であり、その理由ならば malloc() は不要。
685 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 01:59:01 ] STLが使えない時にreallocしたいときだな
686 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 11:34:08 ] そのときはrealloc()を使えばいいのだから、やはりmalloc()は不要。
687 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 11:20:04 ] #include<stdio.h> #include <windows.h> void main(int argc, char **argf) { argc = main(argc, argf); return EXIT_SUCCESS; }
688 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:25:39 ] コンパイル通らないだろ
689 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:35:06 ] さすがに、void main() で値を返してるから、エラーになっちゃうな。 int main() なら、コンパイルは通るけど、 test.cpp(7) : warning C4717: 'main' : すべてのコントロールのパス、 関数を回帰するとランタイム スタック オーバーフローが発生します。 と言われる @ VC++ 2005 Express
690 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:38:09 ] おきるわな
691 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 23:19:05 ] >>687 so what?
692 名前:デフォルトの名無しさん mailto:sage [2008/06/09(月) 23:27:32 ] だからなにwwwwwww
693 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 11:09:16 ] >>679 operator new 主にデバッグ用。まぁ後はリリースビルド時に 速度を殺しても自動で0クリアしたいと時とか。 昔、ヘタというか、見て驚愕したコード #define LOOP_CANCELER(a) if(a>500000) break; #define LOOP_CANCELER_COUNT(a) a++; int loop = 0; while(1) { LOOP_CANCELER(loop) : LOOP_CANCELER_COUNT(loop); } 無限ループを恐れたらしい。巨大な関数内の、ありとあらゆるwhileにこれが入っていた。 これが原因でより深い闇へ落ちていったのは言うまでもない。
694 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 00:21:28 ] なんで #define LOOP_CANCELER(a) if(a++ > 500000) break; ってしないんだろう...。 まあ、そう言う問題じゃないのは承知の上で。
695 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 08:24:11 ] #define LOOP_CANCELER(a) (void)0; って再定義したんじゃだめだったん?
696 名前:デフォルトの名無しさん mailto:sage [2008/08/06(水) 08:39:37 ] C言語なら俺に聞け(入門篇) Part 33 pc11.2ch.net/test/read.cgi/tech/1217073697/544 217行でインデントが9レベルあったり482行で4レベルだったり……
697 名前:693 mailto:sage [2008/08/07(木) 01:09:32 ] >>694 その辺は彼なりになんかあったのかも。 まぁ、そもそもまともな思考があれば、このマクロが及ぼす弊害は簡単に想像つくわけで。 >>695 多分大丈夫だったと思う。しかしこれは氷山の一角で、 そのLOOP_CANCELERが本当に役に立ってるんじゃないかと信じてしまいたくなるほど 壊滅的なコードだった。ベテランも含め誰もが直接触るのは避け、 山ほどバグを出し、それらは場渡り的に修正され、そのままリリースされた。
698 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 22:26:25 ] void function() { for (int i = 0; i < HOGEMAX; i++) { . . fuga: . . }
699 名前:デフォルトの名無しさん mailto:sage [2008/09/24(水) 22:27:12 ] 途中で投入してしまった。 void function() { ・ ・ goto fuga; ・ ・ }
700 名前:デフォルトの名無しさん mailto:sage [2008/10/23(木) 01:44:39 ] 今仕事でメンテしてるのはコメントが疑問形で書いてあって辛い //このループでXXXがXXXXとなった場合のXXXXをしているのか? か?って言われても…
701 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 00:29:53 ] // はい、やってます。 って、書いとけ。
702 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:00:19 ] しかし、実際本当にわからないのがヘタコードクオリティ
703 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 01:25:41 ] 引き継いだコードがマジックナンバーの嵐だった…
704 名前:デフォルトの名無しさん mailto:sage [2008/10/25(土) 03:59:33 ] 何か問題あるの?
705 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 08:45:35 ] 全ての行にコメント書いてます
706 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 03:07:45 ] for(int i=0;i<max;i++) { HOGE hoge = new HOGE(); }
707 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:23:32 ] >>706 *がないからC#か? だったら問題ないか?
708 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 11:36:09 ] ヘタってのは、セキュアじゃないとか、リークするとかとはまた別の要素なんだな。 なんというか、正しい動作はするんだけど素人臭いというか、そんな感じ。
709 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 19:00:28 ] 無駄なコメント
710 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 19:43:16 ] // これはコメントです
711 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 07:00:28 ] a = 0; // aにゼロを代入する
712 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 00:15:27 ] // 2009/02/08 変更開始 //a = 0; // aにゼロを代入する a = 1; // aにゼロを代入する // 2009/02/08 変更終了
713 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 16:19:32 ] procedure unko{ ittekuru(); }