ヘタなコードの書き方 ..
353:デフォルトの名無しさん
08/04/19 23:14:51
>>350
> 正直、極一部のヴァカの為にヘンテコなルールを導入する組織もどーかと思うが。
じゃあもっといい方法があるのか?
---
> 仕事でやっている連中はレベルが低すぎるから糞ルールを導入せざる得ない。
> とハッキリ言えばいいのになぁ。
>>256, >>329 に書いてあるのに理解できてない >>352 に言われても...。
354:デフォルトの名無しさん
08/04/19 23:15:01
スレの主旨や話題にケチつける気はないんだが(これは>>348に対する皮肉でもあるがw)
どーも感心するほどの話が出てこないなぁとオモタ。
自分は現役離れてフリーターやりながら作品作ってる身分なので偉そうなことは言えないが、
「会社の超下手糞なスタッフが読んでもわかるように」、みたいな今の日本特有?の
IT土方的環境を前提にしたら話がおかしくならんか?
ヘタなコードか上手いコードか、ってのは
仕事、趣味、オープンソース、個人グループ、などに関わらず議論できることであって、
何でもすぐ自分の立場だけで考えようとするのはアホだしプログラマとしても才能無いぞ。
クソルール作ってる連中と大して変わらんしな。
355:デフォルトの名無しさん
08/04/19 23:15:54
逆にオープンソースのように、ちゃんとみんなでソースをチェックしてやれば
そんな些細なミスなんて問題じゃなくなるってことじゃねえか?
ソースレビューすればすぐ見つかるようなことだろ。
356:デフォルトの名無しさん
08/04/19 23:26:57
> 何でもすぐ自分の立場だけで考えようとするのはアホだしプログラマとしても才能無いぞ。
自己紹介乙。(w
>>348 にも書いたが、できたら今後コテ付けてくれ、スルーするから。
357:354
08/04/19 23:29:03
何か勘違いしてるようだが346は俺じゃないよ。
358:デフォルトの名無しさん
08/04/19 23:29:17
>>355
まあ、それはそうだが、無駄な手間が増えるってことだからな
359:デフォルトの名無しさん
08/04/19 23:41:59
>>357
それはすまんかったが、どちらにせよ「仕事以外の話」と言うならわかるように
書いてくれと言うだけのこと。
> 仕事、趣味、オープンソース、個人グループ、などに関わらず議論できること
> であって、
とてもそんな議論ができるとは思えないから。
# 少なくとも「趣味」が入ったら何でもアリだろ?
# 七行プログラムみたいのが上手いコードと言い張る奴もいるだろうし。
360:デフォルトの名無しさん
08/04/19 23:53:33
>とてもそんな議論ができるとは思えないから。
そう?>>7とか>>39とか>>124とかがまさにそういう議論(というより意見か)
だと思うんだけど。
># 少なくとも「趣味」が入ったら何でもアリだろ?
># 七行プログラムみたいのが上手いコードと言い張る奴もいるだろうし。
短いプログラムとしてなら上手いだろうし、可読性の点では最悪だろう。
それは趣味プログラマだからどうこうっていう話じゃなくね?
361:デフォルトの名無しさん
08/04/20 00:38:37
>>124 は「メモリきちきちの環境」とかだとむしろ推奨とか言い出す奴がいても
おかしくないと思う。
> 短いプログラムとしてなら上手いだろうし、可読性の点では最悪だろう。
{} にしたって、文法上不要なところは省くと短いプログラムとしては上手いだ
ろうし、(未熟なプログラマに対する) 配慮と言う意味ではは劣るだろ?
それを、トータルでどっちが上手いと言う議論をしても、短いプログラムと未熟
なプログラマに対する配慮の重要度が「仕事、趣味、オープンソース、個人グ
ループ、など」では違うから、結論なんかでないと思うよ。
362:デフォルトの名無しさん
08/04/20 00:49:34
>>361
!?
それは逆アセンブルした結果をみて言っているのか?
363:デフォルトの名無しさん
08/04/20 00:56:42
>>124 と関連するが、自動変数のスコープを限定するためだけの {} はあり? なし?
364:デフォルトの名無しさん
08/04/20 00:58:53
>>362
お前は何を言ってるの?
365:デフォルトの名無しさん
08/04/20 00:58:54
>>361
コンパイラの最適化時の賢さにもよるだろうけど、ローカル変数なら
別に使いまわしても使いまわさなくても吐くバイナリは同じだと・・・・
思ってるんだけど違う?w
>結論なんかでないと思うよ
いやそれでいいと思うんだけどなぁ。
ifステートメントとかの{}は、誰かも言ってたけど会社のコーディングルールで
決まってれば従えばいいし、一貫させることの方が重要だから
俺としては”さっさと終わっていい話題”だと思った。w
「このコードダメだよね?」「このコードうまいよねー?」みたいな話は
1.美的感覚を元にして話す
から面白いんであって、ここはム板なんだし
2.愚痴っぽいネガな理由持ち出してコーディング規則を語る
のは聞くに耐えんなぁ、と思っただけ。
音楽を聴くとき、あんたはアーティストがいかに不遇な環境で頑張ったかで良し悪しを決めるのかい?
先ほど書いた通りスレ主旨や流れにケチつけるのもアレだから、このくらいにしときまw
366:デフォルトの名無しさん
08/04/20 01:00:48
変数使いまわして意味があったのはインタープリタのBASICだけだと思ってたけど
367:デフォルトの名無しさん
08/04/20 01:26:49
>>365
> いやそれでいいと思うんだけどなぁ。
だったらスルーしとけばいいんじゃないかな。
> 1.美的感覚を元にして話す
その美的感覚は人によっていろいろ違う。
君には、「愚痴っぽいネガな理由」としか思えなくても、他の人には
美的要素として重要なことだってあるんだし。
> 音楽を聴くとき、あんたはアーティストがいかに不遇な環境で頑
> 張ったかで良し悪しを決めるのかい?
仕事ならそう言うこともあるだろうね。
368:デフォルトの名無しさん
08/04/20 01:56:39
>>348=>>356=>>359=>>367??さっきから何様なの?
>その美的感覚は人によっていろいろ違う。
>君には、「愚痴っぽいネガな理由」としか思えなくても
>仕事ならそう言うこともあるだろうね。
なんていうか・・・色々と社会勉強してきてください;;;;
(ヒント:相対主義)
369:デフォルトの名無しさん
08/04/20 03:02:08
くだらん事で必死だな
370:デフォルトの名無しさん
08/04/20 03:58:45
上手なコード
ヘタなコード
fool proof なコード
のそれぞれに語る価値はあろうが、スレタイを前提とすると、このスレで"上手なコード"を語る意味はない。
であるからして"ヘタなコードだけどfool proofだから書かねばならぬ"というのを攻撃するのもスレ違いに思う。
"上手ヘタに関わらずfool proofであるべき"などと主張したい奴は別のスレを立てろ。
371:デフォルトの名無しさん
08/04/20 06:52:53
仕事でヘタコードを強要させられている愚痴ならともかく
仕事でヘタコードを制定しているアフォが自己肯定する為にこのスレで我侭言っている
だけだもんなぁ。
一番議論を邪魔しているのが自分だと気づけっての。
372:デフォルトの名無しさん
08/04/20 08:52:23
>>368-371
> だったらスルーしとけばいいんじゃないかな。
> だったらスルーしとけばいいんじゃないかな。
> だったらスルーしとけばいいんじゃないかな。
373:デフォルトの名無しさん
08/04/20 10:54:09
なんでそんな3回も連呼するほど必死なん?
374:デフォルトの名無しさん
08/04/20 12:35:18
むしろ下手なコードを奨励し、下手なコードを書く技術を向上させるための
議論をするスレだろ。
どうやったら上手に下手コードを実現するか。
さぁ議論再開。
375:デフォルトの名無しさん
08/04/20 12:37:36
おいおいw
376:デフォルトの名無しさん
08/04/20 13:02:55
>>373
今時必死か。
下手なレスの書き方を披露してるのか? (w
377:デフォルトの名無しさん
08/04/20 13:51:03
ケンカはやめて(><)
378:デフォルトの名無しさん
08/04/20 14:55:50
こういうのもヘタっぽい
if (b > c)
a = b;
else
a = c;
379:デフォルトの名無しさん
08/04/20 15:20:35
結局「{}は仕事で絶対必要」クンが暴れているスレになったな。
380:デフォルトの名無しさん
08/04/20 15:35:00
>>379とりあえず、職業プログラマにならないでね。
まわりの迷惑だからwww
381:デフォルトの名無しさん
08/04/20 16:37:29
とりあえず漏れの会社は>>380の居るヘタコード強要会社ではないので安心だ。
382:デフォルトの名無しさん
08/04/20 16:39:27
おれも>>381がいるトンチキ会社じゃなくてほっとしたよ。
383:デフォルトの名無しさん
08/04/20 16:40:49
たぶん漏れの会社も>>380の居るヘタコード強要会社ではないみたいなので安心だ。
384:デフォルトの名無しさん
08/04/20 16:47:11
囲わないと後から文を付け加えたときに囲い忘れるかもしれないなんて、
「条件式で誤って代入演算子を書いてしまう」以上にありえないことだと思う。
それと違って、囲うかどうかはどっちでもいいと俺は思うしコンパイラも警告出すことでもないけどね。
ところで、1文だけのとき、普段は省略するけど、if - elseでは気持ち悪いから両方を囲っているんだ。
if (...)
{
/*複数文の処理*/
hage;
piyo;
}
else
{
hoge; //1文だけの処理
}
そうしていたら、それで最近、常に囲うほうで統一すればいいような気がしてきた。
385:デフォルトの名無しさん
08/04/20 17:04:49
囲い忘れたらインデントがずれるしね大体
386:デフォルトの名無しさん
08/04/20 17:22:34
>>384
> 囲わないと後から文を付け加えたときに囲い忘れるかもしれないなんて、
> 「条件式で誤って代入演算子を書いてしまう」以上にありえないことだと思う。
だよね〜。
と、俺も思っていたが、実際にあるから怖い。
>>381 みたいな自信過剰の奴は時にとんでもないポカミスをするから、そう言う
奴をはじく意味でも彼等の言う「ヘタコード強要」は必須。
387:デフォルトの名無しさん
08/04/20 17:28:53
1.1行で書ける/書くのが自然な時は囲まない
2.それ以外は囲む
これでやってる。でも1.の場合があまり無いから結果的に殆ど囲まないなぁ。
388:387
08/04/20 17:29:47
1行ってのはifも含めてって事ね。
if(a) hogehoge;
389:デフォルトの名無しさん
08/04/20 18:00:56
>>386
1行のifを中括弧で括るのがヘタコードだなんて誰も言ってないようなw
390:デフォルトの名無しさん
08/04/20 18:07:45
>>388
大量に羅列する時などは一行に書いてしまうが、その時は {} で囲む。
正直、単発で一行にするのは勘弁して欲しい。
インデントがあれば、キーワードを見ずとも制御構造があることがわかるという利点がある。
また、デバッガで追いかける時に面倒くさいことになることがある。
391:387
08/04/20 18:28:17
>>390
うん、だから1.はあんまり使わない。
それと>>387で全く逆の事言ってた。殆ど「囲む」の間違いね。
392:デフォルトの名無しさん
08/04/20 18:33:19
前にも書いたと思うが、うちも>387と同様。
慣れた奴は書かなくてもいいと思うかもしれないが、
それを真似して慣れてない奴が間違うのが困るんだ。
393:デフォルトの名無しさん
08/04/20 18:45:44
>>392
「間違えるから成長する」という考え方は?
394:デフォルトの名無しさん
08/04/20 18:48:01
>>393
間違えて成長する奴なら、間違えなくても成長する。
間違えても成長しない奴は、いつまで経っても間違える。
395:デフォルトの名無しさん
08/04/20 18:48:19
>>392
無いカスだから間違える
これ全世界共通の常識
396:デフォルトの名無しさん
08/04/20 18:54:55
意味不明ww
397:デフォルトの名無しさん
08/04/20 18:57:04
括弧で括ろうが括るまいとプログラムの変更箇所に対してテストしてれば
どっちでも問題ないと思うが「括弧で囲まないと困る」ってのはなんだかな?って感じだ。
「慣れてない奴が間違える」はコーディングルール以前に
品質を維持するルールが存在しないアフォ組織に思えるが。
398:デフォルトの名無しさん
08/04/20 18:57:24
そんなところで間違って貰っては困る
399:デフォルトの名無しさん
08/04/20 18:57:41
if (a != 0)
a--; b = a;
みたいなのは紛れもなく糞
400:デフォルトの名無しさん
08/04/20 19:01:09
糞と言うか見辛いだろうが、そこで修正間違えるヤツはかなりマとしての適正を欠いているとオモ
401:デフォルトの名無しさん
08/04/20 19:03:55
>>399
こんなの見た日には、メーリングリストで晒し者したい気分
402:デフォルトの名無しさん
08/04/20 19:05:25
if (a != 0)
a--; b = a;
if (c != 0)
c--, b = a;
どうぞ
403:デフォルトの名無しさん
08/04/20 19:07:20
一応、こういうコード書いた奴を少し問い詰めたくなる罠
もしかしたら凄い理由があるのかも知れないし。
404:デフォルトの名無しさん
08/04/20 22:37:58
成長しない見本 (w
>>397=>>258
同じ事を何回も書くんじゃねぇ。
405:デフォルトの名無しさん
08/04/20 22:51:58
なにが言いたいのか解らんが日本語が不自由な人なんだろうか?
406:デフォルトの名無しさん
08/04/20 22:54:56
たぶん、漏れのレスが絶対正義と信じて疑わない人なんだろ
成長しない人間にありがちな思考だ。
407:デフォルトの名無しさん
08/04/20 22:59:20
>>378にもご意見くださいな
408:デフォルトの名無しさん
08/04/20 23:00:05
プログラミングが好きでもないのに仕事で中途半端に高い立場になってしまって
毎日ム板でストレス発散してんのさきっと。
だから趣味グラマ=実力皆無、非営利のコード=無意味と決め付けてるのもうなずける。
自分が会社の外で勉強する気が無い(向上心がない)から他人もそうだと思い込んでるのだろう。
そらウンコルールも作りたくなるわw
409:デフォルトの名無しさん
08/04/20 23:02:00
>>378
a = max(b, c);
a = b > c ? b : c;
の方がいいってこと?
どれでもいい気がしなくもないけどmax使った方が判り易いか。
410:デフォルトの名無しさん
08/04/20 23:08:52
>>409
そうそう。元のコードだと最低でも3行に目を通さないといけないからヘタな書き方だと思うわけ。
この場合はa = max(b, c);が素直だと思う。実際のa, b, cはもっと長い変数名なんだから。
411:デフォルトの名無しさん
08/04/20 23:14:00
しかし二つしか比較してないのにmaxってのもなぁ
412:デフォルトの名無しさん
08/04/20 23:17:25
え?こういうの書かない?
a = max(a, 0);
413:デフォルトの名無しさん
08/04/20 23:24:14
#define max(a, b) (a > b ? a : b)
414:デフォルトの名無しさん
08/04/20 23:29:11
普通、static int max(int a, int b) {return a > b ? a : b;}じゃないのか?
415:デフォルトの名無しさん
08/04/20 23:31:06
C++だとテンプレート版max()があったような。
416:デフォルトの名無しさん
08/04/20 23:32:58
俺は統一されてるのが好きだけど{}囲ってるけど、どっちもでいいな。
強要されるのはごめんだが。
ところでこいつを見てくれ、どう思う?
if(isA){
if(isB)
if(isC)
hoge1();
else
if(isD)
hoge2();
}
417:デフォルトの名無しさん
08/04/20 23:33:37
.NETにはEnumerable.Max<T>()が……
418:デフォルトの名無しさん
08/04/20 23:35:18
>>416
構文解釈しにくいなあ
elseはどこにかかっているんだろう
でも俺は{}でくくるのを強制されるのはゴメンだね。
419:デフォルトの名無しさん
08/04/20 23:35:38
>>416
レビュアーにケンカ売ってるのかな? とか
420:デフォルトの名無しさん
08/04/20 23:36:20
>>416
プログラミング作法かなんかで見たような気がする
421:デフォルトの名無しさん
08/04/20 23:40:56
>>416
そのインデントからすると単なるバグ。正しくはこう
if (isA)
if (isB) {
if (isC)
hoge1();
} else
if (isD)
hoge2();
422:デフォルトの名無しさん
08/04/20 23:43:58
いや、実はインデントをミスしただけかもしれない
423:デフォルトの名無しさん
08/04/20 23:45:31
>>416
Cだとelseって一番近いifにかかるよな?インデント間違ってないか?
424:デフォルトの名無しさん
08/04/20 23:54:10
>>423
スレタイを読め
425:デフォルトの名無しさん
08/04/20 23:59:21
>>424
と思った、ということじゃないのかな?
426:デフォルトの名無しさん
08/04/21 00:04:24
>>424
お前さんのツッコミの意図がわからん。
427:デフォルトの名無しさん
08/04/21 00:17:17
このスレも末期ですね
428:デフォルトの名無しさん
08/04/21 00:19:52
スレ違いだけど、おれの場合はグローバル変数を使い始めたら
糞コード生産開始の合図だわ。。
429:デフォルトの名無しさん
08/04/21 00:40:03
グローバル変数にはメリットもあるだろ。
430:デフォルトの名無しさん
08/04/21 00:45:58
perlでクライアントの2chブラウザ作ったけど見たい人いますか?
4時間ほどで作りました
431:デフォルトの名無しさん
08/04/21 00:48:17
日本語でおk
432:デフォルトの名無しさん
08/04/21 00:48:28
別にいいです
433:デフォルトの名無しさん
08/04/21 00:50:03
Pythonのお勉強 Part 25
スレリンク(tech板)
604 名前: デフォルトの名無しさん Mail: 投稿日: 2008/04/20(日) 20:46:14
perlで2chブラウザ4時間で作った〜
ボク厨房!Pythonスレで自慢してみたのに、
誰も食いつかなかったからこっちに来てみたよ!><
434:デフォルトの名無しさん
08/04/21 01:12:30
なんか流れを見てみると、自動インデント機能を使ってない人多いのかね?
(ちゃんと文法まで解釈するやつね)
>>416とかみたいなのは打ち込んでいるうちにおかしいってわかるから、
入力の手間を省くためというよりは、文法チェックのつもりで使ってる。
だから、そういう機能がない環境のやつほど
{}使いたがらせるんじゃないかと予想しているんだけど、関係あるかな?
かく言う自分はEmacsメインで{}強制はバカっぽく見える派。
435:デフォルトの名無しさん
08/04/21 01:17:56
一応確認するけど
ヘタだなと思ったコードを貼るのがこのスレの趣旨だよね?
まさかと思うけど>>374がこのスレの趣旨じゃないよね?
436:デフォルトの名無しさん
08/04/21 01:29:19
>>1を読め
437:デフォルトの名無しさん
08/04/21 01:57:32
>>435
374はネタだろ?
今までの流れからすると前者でおk
438:デフォルトの名無しさん
08/04/21 03:05:22
前者ならマ板だろ。
>>374で桶。
ここは技術板だ。
439:デフォルトの名無しさん
08/04/21 03:32:12
なんか、最近、技術って言葉を聞くとむなしくなる
440:デフォルトの名無しさん
08/04/21 07:19:20
俺は直感で書くとこうかなあ。
少し BASIC っぽい?
if(式) 文; else 文;
if(式) 文;
else {
}
if(式) {
} else 文;
if(式) {
} else {
}
441:デフォルトの名無しさん
08/04/21 07:34:19
それ珍しいなw
1つめはおいといて、個人的には
ifを囲うならelseも囲った方が、短くても同じ条件で分岐したものだと
認識しやすいと思う。
あと
} else {も、(賛否ありそうだけど)
}
else {
....
にした方が、行の最初に来るから認識しやすいかも?
442:デフォルトの名無しさん
08/04/21 08:30:17
あとネタ半分だけど
VC使っててあらゆるインデントを消すツワモノが居たなw
「どうせ一緒なんだから消してもいいじゃんw」
とのことだった。その人は今はCOBOLerだが。
443:デフォルトの名無しさん
08/04/21 09:57:28
変数名で悩まされるのはホント勘弁して欲しい。
int dynamic_static;
ってなんなんだよ・・・
一体何に使ってるのか気になってしょうがねえ。
444:デフォルトの名無しさん
08/04/21 10:03:47
>>443
そいつ、おちゃめだな
445:デフォルトの名無しさん
08/04/21 10:21:24
変数は大抵ローマ字で書いてる
int kao;
int me;
int hana;
みたいに
446:デフォルトの名無しさん
08/04/21 11:10:33
FILE* fairu;
_Bool raito_huragu;
とか?
447:デフォルトの名無しさん
08/04/21 11:12:37
int koreha_daijina_switch,tugini_daijina_switch;
float fudo_swith,syosuten;
死ねと思った
448:デフォルトの名無しさん
08/04/21 11:14:52
>>447
ネタでなくそんなコーディングがあるとは、いやはや
449:デフォルトの名無しさん
08/04/21 11:17:17
>>448
新人研修中で、実習させて提出されたコードの大半がこれ。
で極めつけが
課題.c 作成ファイル.doc <-Makefile
とかで渡してきやがった
文字コードがUTF-8(MAC)だし意味不明死ねと思った
450:デフォルトの名無しさん
08/04/21 11:29:01
>>449
新人研修とはよかったじゃないですか
今後業務で同じことをしないよう指導できるいいチャンスじゃないかな、しかも効率よく
教官の腕が試されてると思って頑張ってくらはい
451:デフォルトの名無しさん
08/04/21 12:27:15
>441
}
else {
は個人的には使わないなあ。
}
だけの一行ってのは、俺にはどうも
if〜elseまで含めた、全体の終わりに見えてしまう。
452:デフォルトの名無しさん
08/04/21 20:06:52
if(cond)
{ //...
//...
} else
{ //...
//...
}
453:デフォルトの名無しさん
08/04/21 21:05:58
>>452
それ見たことある
454:デフォルトの名無しさん
08/04/21 21:10:12
上のほうの#ifdefと同じで環境依存だけどVC8で
#ifdef _DEBUG
if( FALSE ) 〜;
#endif
上のthen行が実行されしまうんだ。
if( FALSE ) {
〜;
}
と、括弧でくくればちゃんと機能するんだけどな。
#ifdefとifの組み合わせでバグる処理系って実は多いのか?
455:デフォルトの名無しさん
08/04/21 22:22:22
関数を分けすぎるってのはどうなんだ?
俺2行以上でかつ同じことを二回書くことになったら
関数に分けるって考えかたしてるんだけども
これだと分割しすぎるような気がしてきた
456:デフォルトの名無しさん
08/04/21 22:26:05
>>455
関数化って処理ブロックの名前付けという働きもあるから
適切に名前が付いてるならいいんじゃないかな。
457:デフォルトの名無しさん
08/04/21 22:27:52
グローバル変数にすべきものってなんだ?
勝手に書き換えられると困るからなるべくグローバル変数にしないで、引数で渡すようにしてるんだが
458:デフォルトの名無しさん
08/04/21 22:40:33
何階層もの関数を引数で渡していくのとグローバル変数使用とではどっちが見やすいだろうか。
グローバル変数といっても〜.cファイルの中だけで使うようにして他の〜.cでは使わないようにすれば
C++で言うところのメンバ変数みたいな感じで良いと思うんだが。
459:デフォルトの名無しさん
08/04/21 23:35:03
それならstaticってつけるべ
460:デフォルトの名無しさん
08/04/22 00:14:48
括弧の有無で問題が生じるなら。
それは括弧の有無自体が問題なのではなく、
関数の粒度が問題であると思うのだが。
461:デフォルトの名無しさん
08/04/22 01:33:27
>>458
グローバル変数じゃないじゃん
広義のグローバル変数にはあてはまる?
462:デフォルトの名無しさん
08/04/22 01:37:47
staticってつけたいけど、エラー時に変数ダンプしたい時にexternできなくなるからつけない・・・
ちゃんとつけてそのファイル内にダンプ処理書けばいいんだけなんだがめんどくさくって
463:デフォルトの名無しさん
08/04/22 01:38:53
クラスにしておけばいいのに。
464:デフォルトの名無しさん
08/04/22 06:57:20
*変数名が意味しそうな内容と実際に格納される内容が全く関係ない。あるいは単なる一時記憶になってる
465:デフォルトの名無しさん
08/04/22 07:56:51
明解な変数名を付けて、名称通りの用途に使っておきながら、いつの間にかまるで違う用途に使っているとか、なかなかハイレベルなトラップだぜ。
レビュー前にコードを斜め読みして大混乱。
466:デフォルトの名無しさん
08/04/22 08:21:10
>>462
アクセサつければ?
467:デフォルトの名無しさん
08/04/22 08:50:43
Linuxならそんな問題起きないのにな。
ほんとWindowsは駄目だな。
468:デフォルトの名無しさん
08/04/22 09:35:42
おいおい、Windozeプログラマがキれちゃうぞ(笑)
469:デフォルトの名無しさん
08/04/22 12:07:33
>>465
プログラミング作法に似たようなのあったね。
コードを直したときにコメントを直すのを忘れて、コードとコメントが合ってない、とか。
470:デフォルトの名無しさん
08/04/22 17:50:29
俺は分岐する際、エラー処理を固めるためにネスト深くしてるんだが不味いかな?
returnは必ず一箇所で行うようにしてたらそうなってしまったんだが
こんな感じ↓
if( ) {
if( ) {
if( ){
if( ){
//処理
}else{
// エラー処理;
}
}else{
// エラー処理;
}
}else{
// エラー処理;
}
} else {
//エラー処理
}
471:デフォルトの名無しさん
08/04/22 18:04:08
Cではそうしていたけれど、他に移ったら例外処理があるから
そんなネストは要らなくなったし、returnを1ヶ所に拘る必要も失せた。
すれ違いすまん。
472:デフォルトの名無しさん
08/04/22 19:21:14
>>471
Cでも呼び元でエラー処理すれば同じことじゃね
473:デフォルトの名無しさん
08/04/22 19:25:02
if文でネスト深くなるのは、いいけど例外で深くなると見栄えも悪いな
まあ、別に悪くないけどさ
try{
try{
try{
try{
// 処理
} catch( ) {
;
}
} catch( ) {
;
}
} catch( ) {
;
}
} catch( ) {
;
}
474:デフォルトの名無しさん
08/04/22 19:27:09
try{
// 処理
} catch( ) {
;
} catch( ) {
;
} catch( ) {
;
} catch( ) {
;
}
これでいいだろ?
475:デフォルトの名無しさん
08/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:デフォルトの名無しさん
08/04/22 21:02:41
ヘタ
477:デフォルトの名無しさん
08/04/22 21:08:17
ちくしょう、傷付くじゃないか。
ちなみにどう直したらいい?
ケチ付けようとかいう気持ちはなく、ただ純粋に参考にしたい。
478:デフォルトの名無しさん
08/04/22 21:10:08
俺ならエラー時、returnの手前にgotoする
まぁあくまで俺個人の意見
479:デフォルトの名無しさん
08/04/22 21:18:06
なるほど。そしてその指摘で気がついたが
別にすべての判定もエラー処理もする必要なかったから
else ifでも良かったかも。
480:デフォルトの名無しさん
08/04/22 21:30:23
むかーしはこんなんもあったよな。
if (a=0)
{
a = 5;
}
else
{
a = 6;
}
481:デフォルトの名無しさん
08/04/22 21:39:35
>>478
そこまでしてreturnしない理由て何?
482:デフォルトの名無しさん
08/04/22 21:47:07
>>481
ソース見たとき、一つのサブルーチンの中に複数returnがあるより、
ERRORみたいなラベルにgotoしてるほうが個人的にすごく見やすかったもんで
483:デフォルトの名無しさん
08/04/22 22:08:16
俺もreturnは一箇所で纏めるな
int iResult = FALSE;
if( ) {
if( ) {
if( ) {
iResult = TRUE;
} else {
}
}
return iResult;
ってな感じ
484:デフォルトの名無しさん
08/04/22 22:11:04
途中で送ってしまったorz
int iResult = FALSE;
if( ) {
if( ) {
if( ) {
iResult = TRUE;
}
}
}
return iResult;
それぞれの分岐のelseにはエラーメッセージの設定や後始末を入れる
ただ、ネストがあまりにも多い場合や 後始末処理が重複する場合のみ
先頭で return 返すかな
以前いた現場のコーディング規約に goto は原則OKだったんだけど、gotoアンチだった俺が
使ってみたらやばい便利だったw
485:デフォルトの名無しさん
08/04/22 22:21:21
なんでBOOLって4バイトもあるん?
486:デフォルトの名無しさん
08/04/22 22:27:55
#define BOOL int
とかなんとかあったような気がする。(Win32SDKの話だが。)
C++のブーリアン型のboolとは別。
487:デフォルトの名無しさん
08/04/22 22:40:11
理由になってないよ
488:デフォルトの名無しさん
08/04/22 22:49:07
8bitとかの方が節約できるのに、ってことか?
アホかお前
489:デフォルトの名無しさん
08/04/22 22:55:09
return を複数書いてて、それにケチをつけられたら「これはガード節ってテクニックです! ケントベック読んだことないんですか!?」とか
言い返してやればいいよ。
490:デフォルトの名無しさん
08/04/22 23:00:35
単純にintの方が速いからじゃね
どうせ1bitを正確に表現する型はないわけだし
491:デフォルトの名無しさん
08/04/22 23:07:50
intをcharにしてメモリを節約しても、油断してるとあちこちでintに変換するコードが入るから、
コード領域では、節約した分はすぐふっとぶね。
492:デフォルトの名無しさん
08/04/22 23:31:28
>>458
> C++で言うところのメンバ変数みたいな感じで良いと思うんだが。
メンバ変数でも、ひとつのクラスにたくさんあって、メンバ関数もたくさんあるって状態で、
それを好き勝手にいじってたら、グローバル変数と同じだよ。
イベントドリブンのシステムで初心者に作らせると、たいがいそうなるね。
493:デフォルトの名無しさん
08/04/22 23:33:59
つーか、BOOLは真偽値(だけ)を現す型じゃないんだってば。
494:デフォルトの名無しさん
08/04/23 01:59:25
真と偽とエラー値の3通りの値を返す可能性がある、
返り値がBOOL型のWin32 APIがあるらしい。
どうせAPIの互換性なんか気にもしてないんだろうから(偏見)、
とっとと直せばいいのに。
495:デフォルトの名無しさん
08/04/23 02:34:07
GetMessageがBOOL返すけど、何の為にBOOLなのかわからん。
intでいんじゃね? defineする必要なくね?
---MSDN引用
WM_QUIT 以外のメッセージを取得した場合、0 以外の値が返ります。
WM_QUIT メッセージを取得した場合、0 が返ります。
エラーが発生した場合、-1 が返ります。
---引用終わり
496:デフォルトの名無しさん
08/04/23 03:31:07
INTやらBYTEとかと同じだろ。そんなこと言い出したら
Win32APIの型全部無駄だし。
一応BOOLは、「TRUEかFALSEのどちらかになりますよー」という
返り値が2値であろうと予想がつくという意味がある。
だからこそGetMessageはINTか何かにしてくれないと誤解を招くがww
497:デフォルトの名無しさん
08/04/23 09:41:29
XXXcheckなメソッドを複数呼ぶまとまりの
メソッド名とか何かいい名前ないですかねぇ
登録前のチェック群メソッド名
498:デフォルトの名無しさん
08/04/23 10:44:07
CheckPhase
499:デフォルトの名無しさん
08/04/23 11:57:47
Checkers
500:497
08/04/23 14:35:57
>499
素でそれ使ってましたw
それでbool返せば他の人が isMethodみたいに
イメージできるかなぁと思った次第です
まぁちゃんとメソッドヘッダにreturn説明書いてますけれどね
501:デフォルトの名無しさん
08/04/23 19:14:45
状況にもよるだろうが、Checkを確認するの意味で使っているとしたら、
CheckXXXになるケースが多いのではないだろうか。Checkerなら、XXCheckerでも分かるが……
502:デフォルトの名無しさん
08/04/23 21:41:09
gotoつかうやつは知識が無い奴。
上級者はfor(;;)やwhile(1){}を使う。
ヒント:break,continue
分かるかなぁ?www
503:デフォルトの名無しさん
08/04/23 22:07:37
>>502
・・・
504:デフォルトの名無しさん
08/04/23 22:19:14
大学の時に教授にgoto文を使っちゃだめって言われたけど、
なんで?
505:デフォルトの名無しさん
08/04/23 22:25:18
無限ループよりはdo{...break}while(false);のほうが安心出来る
506:デフォルトの名無しさん
08/04/23 22:46:00
>>502
それを使うのが上級者かどうかは置いといて、それを知ってるぐらいで上級者って言って欲しくない。
507:デフォルトの名無しさん
08/04/23 22:46:44
>>504
それは
Wikipedia項目リンク
という昔の学者が(ry
508:デフォルトの名無しさん
08/04/23 22:50:45
場合によって使い分けれるのが一番だな
509:デフォルトの名無しさん
08/04/23 22:57:50
だが、gotoがない言語でも普通に開発できるんだから無理に使う必要ないケースが多い。
510:デフォルトの名無しさん
08/04/23 23:10:47
>>502
for(;;){break;}を使ったコードがgotoを使ったコードよりどういう点で優れているのか
説明してくれ。
for(;;){break;}の何が良いのかさっぱり分からないんだ。
511:デフォルトの名無しさん
08/04/23 23:22:00
無限ループからbreakで脱出する利点はわかる。処理Aが終わらないと条件Aの判断ができないとき、
処理A;
while (条件A) {
処理B;
処理A;
}
みたいな冗長なコードを書かずにすむ。
while (1) {
処理A;
if (条件A) break;
処理B;
}
でもgotoとは関係ないよね。
512:>>502 じゃないけど
08/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
08/04/23 23:35:49
>if (条件A) break;
...だめだろw
>でもgotoとは関係ないよね
たぶん、こゆこと
goto skip;
do{
処理B;
skip:
処理A;
}while(条件A);
514:510
08/04/24 00:00:02
>>511 >>513 なるほど。たまに利用したいケースはあるかも知れない。
>>512
ん〜、タグ名のマチガイかぁ。
それって、変数 x に代入すべきところを y に入れちゃったってのと同レベルのマチガイでしょ。
なんでその問題解決に、無限ループしてカッコ閉じを探すスタイルを使うのかが分からない。
タグ名で意味づけできる&無条件で移動するという意図が明確なんだから、
まだ goto 使うほうがマシな気がするんだよねぇ。
> 一番の難点は goto を許すと、ループを goto で作ったりするアホが
> でてくる可能性があると言うことだと思う。
これは激しく同意。
515:デフォルトの名無しさん
08/04/24 00:08:43
>>513
う〜ん。そのgotoはキモイw 悪い例として書いてくれているんだろう。
というのは、俺が>>511の書き方をするのは、長さのわからないストリームを読むときにほぼ限られるから。
処理Aでストリームを読んで、処理Bでそのデータをゴニョゴニョするのに、順番が逆になっていると、実にキモイ。
516:デフォルトの名無しさん
08/04/24 00:13:40
> それって、変数 x に代入すべきところを y に入れちゃったってのと
> 同レベルのマチガイでしょ。
自分はそう言う間違いを絶対にしないと言うなら、goto 文使っても問
題ないよ。
517:デフォルトの名無しさん
08/04/24 00:57:42
10行くらいの関数だったら多少のgotoは気にならない。
でも数十行以上の関数だったら勘弁してほしい。
518:デフォルトの名無しさん
08/04/24 00:59:59
>>513
511の方が普通だな。本当に普通だ。
何かが起こったらbreakする普通の無限ループに過ぎないわけだがw
javaの名前付きブロックで置換できないようなgotoの使い方は
多分、考え直した方が良いな。
名前付きブロック、デストラクタ、例外、関数リテラル
とかがあれば、gotoは要らなくなってくる。
全部無いプレーンCには明らかにgotoが必要だろ。
519:デフォルトの名無しさん
08/04/24 01:04:55
>>518
>>513が>>511に突っ込んでいるのは、多分、条件が逆ってことだろ。
520:デフォルトの名無しさん
08/04/24 01:35:44
>>519
あー、あー、やっと理解できた。
502が想定して叩いてるgoto使い、
を想像したコード例を書いたのか。
521:デフォルトの名無しさん
08/04/24 01:47:06
>520
本当に理解できてるのかw
>条件が逆ってこと
だNE!
522:デフォルトの名無しさん
08/04/24 02:07:00
>>条件が逆ってこと
>だNE!
その下の変なコード例挙げた意図を曲解したってことだよ。
523:デフォルトの名無しさん
08/04/24 02:56:54
goto議論はアホでも参加できるからすぐ荒れるね
524:502
08/04/24 04:29:22
ネタ投下したまま忘れてた。ゴメン
525:デフォルトの名無しさん
08/04/24 04:36:38
>>524
よぉ、キチガイ
526:デフォルトの名無しさん
08/04/24 05:03:40
goto文の代わりにwhile文を使うメリットを教えて進ぜよう。
それは宇宙の真理をコードで表現することである。
本質的に全ての制御はループで記述できるという宇宙の真理が存在する。
むしろ、我々が「ループではない」と思っているものは一回だけループするという特殊なループに過ぎない。
このことを表現することが出来るのである。
527:510
08/04/24 08:04:17
>>526
う〜んなるほどありがとう
528:デフォルトの名無しさん
08/04/24 08:20:18
つまり、whileさえあればifも必要ないってことですな。
529:デフォルトの名無しさん
08/04/24 08:53:35
>501
RegistCheck, InsertCheckとかで
XXXXCheckを束ねて boolをreturnしてるけど
まぁ一般的なんですね
530:デフォルトの名無しさん
08/04/24 09:26:58
for(i=0;i<x;i++){
for(j=0;j<y;j++){
goto LABEL;
}
}
531:デフォルトの名無しさん
08/04/24 10:28:12
コードについて話すなら。
構造化定理
ぐらいは知っておいてくれ。
532:デフォルトの名無しさん
08/04/24 12:32:51
ぐぐってみた。
「構造化定理は、
全てのアルゴリズムは、
順次、選択、繰り返しの3つの基本制御構造を組み合わせて作ることができる
という定理ですが」
・・・・・w
533:デフォルトの名無しさん
08/04/24 15:14:51
532 :デフォルトの名無しさん [↓] :2008/04/24(木) 12:32:51
ぐぐってみた。
「構造化定理は、
全てのアルゴリズムは、
順次、選択、繰り返しの3つの基本制御構造を組み合わせて作ることができる
という定理ですが」
・・・・・w
534:側近中の側近 ◆0351148456
08/04/24 21:22:43
>>470
>>475
>>278
(っ´▽`)っ
この議論はコードコンプリートに取り上げられている。
さあ読むんだ。コードコンプリートを。
535:側近中の側近 ◆0351148456
08/04/24 21:25:45
>>472
(っ´▽`)っ
リソースを確保してるのがローカル変数だったらどうする?
int Func(void)
void *p;
p = malloc(1024);
(処理)
free(p);
return;
}
536:デフォルトの名無しさん
08/04/24 21:28:49
alloca
537:側近中の側近 ◆0351148456
08/04/24 21:31:23
>>491
(っ´▽`)っ
それどころかめちゃくちゃ遅くなる場合がある。
たとえばchar型をループカウンタに使った場合。
ループ1回まわる度に、int型にキャストされるから。
単なるキャストと思われがちだが、
キャストというのは記憶領域を新たに確保しなければならない
結構高価な処理なのです。
538:側近中の側近 ◆0351148456
08/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
08/04/24 21:54:22
コードの標準化、改善がなされているプロジェクト
(っ´▽`)っ(っ´▽`)っ(っ´▽`)っ(っ´▽`)っ ←みんなニコニコ
コードの標準化も改善も全くなされていないプロジェクト
(っ´ω`)っ(っ`Д´)っ(っ;д;)っ(っ ゚▽ ゚)っ ←欝病、キレる人、泣く人、狂う人
540:デフォルトの名無しさん
08/04/24 21:57:20
>>538
Cだとそうなって仕方ないけど、
finallyやデストラクタなど後始末をまとめる機能のある言語なら困らない。
541:側近中の側近 ◆0351148456
08/04/24 21:59:13
>>540
(っ´▽`)っ
大賛成!Cだと困る。だからCは困る☆
542:デフォルトの名無しさん
08/04/24 22:03:57
まぁエラー時の共通処理を関数化したりマクロ化すればいいんだけど
それでも面倒だよね
543:側近中の側近 ◆0351148456
08/04/24 22:04:11
(っ´▽`)っ
こういうことだね。
int Func(void)
{
try
{
(主処理)
}
catch(Exception e)
{
(例外処理)
}
Finally
{
(終了処理)
}
}
上司 「(っ´▽`)っ 終了処理Aを入れて☆」
部下 「(っ´▽`)っ は〜い☆Finally句に入れるだけでOK!」
544:側近中の側近 ◆0351148456
08/04/24 22:13:46
(っ´▽`)っ
構造化プログラミングとは、順次、選択、繰り返しで構成されるプログラミングだね。
主処理、エラー処理、終了処理で構成するプログラミングにも名前を付けよう☆
主処理、エラー処理、終了処理を1ブロックとし、
そのブロックも主処理、エラー処理、終了処理のいずれかに所属する。
そのブロックも、それを含むブロックも、さらにそれを含むブロックも
主処理、エラー処理、終了処理のいずれかに所属する。
ここでいう、主処理とはtry句、エラー処理とはcatch句、終了処理とはfinally句に対応する。
どんな名前がいいかな?
545:デフォルトの名無しさん
08/04/24 22:16:26
Java?
546:デフォルトの名無しさん
08/04/24 22:24:08
つ 定列化プログラム
すまん、センスねーな
gotoって昔は使うなっていう風潮があったけど
今はスキルのある人が使うのはいいんじゃない? てきな流れになってなかった?
まあ、gotoのジャンプ先は return 直前の後始末にセットしておく以外使い道は分からんが
547:デフォルトの名無しさん
08/04/24 22:36:22
初期化
ループ {
if(x) goto 初期化
}
こんなときとか
548:デフォルトの名無しさん
08/04/24 22:53:04
>>547
初めてみたw
今居るプロジェクトで
do {
startLoop:
// 処理
if(){
goto startLoop;
}
} while(1);
↑のような書き方してる奴が居た
マジ吹きそうになったな
549:デフォルトの名無しさん
08/04/24 23:04:01
continueを教えてやれよ
550:側近中の側近 ◆0351148456
08/04/24 23:11:09
(っ´▽`)っ
VB厨なんじゃないの?continueを知らないってことは
551:デフォルトの名無しさん
08/04/25 01:01:06
勉強不足なんだろうな。
他人のコードを見れば分かるレベルの話じゃん
552:デフォルトの名無しさん
08/04/25 01:03:36
え?なんでcontinue使わないといけないんですか?
goto startLoop;でもあっていると思うんですが。。
553:デフォルトの名無しさん
08/04/25 01:24:54
doとwhileでcontinueしたときってwhileの判定ってやるんだっけ?
両方とも滅多に使わないから組み合わせ時の動作が分からない。
554:デフォルトの名無しさん
08/04/25 01:25:15
あってるよ。どっちも同じ動作だし。
同じ動作でも書き方が違うから「ヘタなコード」というものができるんじゃないのか?
555:デフォルトの名無しさん
08/04/25 06:40:02
gotoで済むところを
わざわざwhile + continueに変えて可読性を落とす馬鹿
556:デフォルトの名無しさん
08/04/25 08:23:58
555 :デフォルトの名無しさん [↓] :2008/04/25(金) 06:40:02
gotoで済むところを
わざわざwhile + continueに変えて可読性を落とす馬鹿
557:デフォルトの名無しさん
08/04/25 09:20:27
>>553
whileの判定はある
このスレ読むと goto は使ってもいいんだなと思うな
滅多に使わないけど
558:デフォルトの名無しさん
08/04/25 09:27:45
>whileの判定はある
マジで?
うわー勘違いしてた
559:デフォルトの名無しさん
08/04/25 11:04:21
gotoは有用だが解ってない奴に使わせると危険
560:デフォルトの名無しさん
08/04/25 11:09:17
ふぃなりーはとらいとかきゃっちのなかからりたーんのときでもじっこうされますの?
561:デフォルトの名無しさん
08/04/25 11:59:52
そのためのfinallyだ。読みはファイナリーだ。
562:デフォルトの名無しさん
08/04/25 21:07:05
フィナリーセブン!
563:デフォルトの名無しさん
08/04/26 00:09:33
gotoは構造を無視できるから嫌われる
564:デフォルトの名無しさん
08/04/26 02:32:26
本物のプログラマは、gotoを恐れずに使う。
565:デフォルトの名無しさん
08/04/26 02:57:40
本物?
gotoを使わないようにするためだけに変な構造のコードをかくのは確かにヘタだが
566:デフォルトの名無しさん
08/04/26 03:45:53
continueもbreakも概念的にはgotoと同列
567:デフォルトの名無しさん
08/04/26 07:42:39
>>565
「本物のプログラマ」をググってみるといいと思うよ
568:デフォルトの名無しさん
08/04/26 08:05:02
breakもcontinueもreturnも、乱用するとgoto同様に読みにくくなる。
ただ、gotoに比べて前者の3個は、飛ぶ方向と位置があらかじめ決まってる分だけ可読性に少し寄与しているだけ。
569:デフォルトの名無しさん
08/04/26 10:13:19
>>566
gotoの真の力は計り知れない。
continueやbreakなどとはその設計段階からして、まったく異なる思想の元に創生されたものだ。
迂闊にgotoの封印を解いてしまうと管理局の統制が利かなくなり世界を崩壊に導く恐れがある。
570:デフォルトの名無しさん
08/04/26 10:21:31
特にC/C++のgotoは、ループの外から中に飛び込めるからなあ。
switchのラベルもそうだが。
571:デフォルトの名無しさん
08/04/26 11:24:36
おまえらgotoでこんなに揉めるなんて
継続とか使ったらどうなっちゃうの
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5390日前に更新/166 KB
担当:undef