ヘタなコードの書き方 ..
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でこんなに揉めるなんて
継続とか使ったらどうなっちゃうの
572:デフォルトの名無しさん
08/04/26 11:27:34
すまん継続って何だろう?
継承じゃない?
573:デフォルトの名無しさん
08/04/26 11:29:00
まあ、>>523の言う通りってこった。
テンプレートとかジェネリクスでは、ここまで盛り上がれまい。
574:デフォルトの名無しさん
08/04/26 11:37:49
>>572
プログラマが制御できる大域ジャンプのようなもの
setjmpの強力な奴と思えばいい
schemeとかrubyに実装されてる
575:デフォルトの名無しさん
08/04/26 11:46:11
>>574
ありがと
scheme、rubyはノータッチだorz
576:デフォルトの名無しさん
08/04/26 12:07:32
>>575
無知の言い訳ワロス
俺も知らなかったけど
577:デフォルトの名無しさん
08/04/26 13:29:52
>>575
ノータッチとか言う以前に
gotoの話してたのに継承のtypoなわけないだろ常考
578:デフォルトの名無しさん
08/04/26 13:32:03
>>577
昔は、継承は「90年代のgoto問題」とか言われてたよ。
579:デフォルトの名無しさん
08/04/26 14:26:18
continuation どころか closure さえ使えないんだから許してやれよ。
580:側近中の側近 ◆0351148456
08/04/26 18:19:39
(っ´▽`)っ
継承はカプセル化を崩壊させるからな
581:デフォルトの名無しさん
08/04/26 18:27:02
にちゃねるって程度が低いよな。
なんかがっかりするレスが多い。
582:デフォルトの名無しさん
08/04/26 18:28:44
わざわざ書き込んじゃうあたり、程度が知れるね♪
583:デフォルトの名無しさん
08/04/26 18:29:34
まとめると、
・本物のプログラマは goto を恐れないで使う
・賢い本物のプログラマは continuation も使いこなす
・女子供は break や continue だけを恐る恐る使う
584:デフォルトの名無しさん
08/04/26 18:38:27
continuation = 大域で状態付きのgoto
gotoよりたちが悪い
585:デフォルトの名無しさん
08/04/26 18:46:49
吉野家コピペに近いものがあるな
586:デフォルトの名無しさん
08/04/26 20:27:03
gotoは適切に使えばいいと思うが、
gotoを使うことを心がけたコーディングは駄目だな。
587:デフォルトの名無しさん
08/04/26 20:37:15
if と goto さえあれば生きていける。
588:デフォルトの名無しさん
08/04/26 20:37:54
そうか、gotoも使えるようにならないと駄目だな。
機会があれば使って、慣れるようにしよう。
589:デフォルトの名無しさん
08/04/26 20:38:35
悪習を真似る必要は無いぞ
590:デフォルトの名無しさん
08/04/26 20:40:10
goto使うと見通しが悪くなる
気がする
591:デフォルトの名無しさん
08/04/26 21:18:38
必要な処理が全て下に固まってるってとてつもなく
よろしくない?経験の浅い初心者にその処理下みれば全部あっから。
って指示しやすい。
592:デフォルトの名無しさん
08/04/26 21:51:50
それをするなら、必要な処理を全て下に固める事を規約で決めないといけない。
さらに言うとその規約の外で書かれたコードはそうなっている保証がない。
潰しのきかない知識を植え付けるだけだと思う。
593:デフォルトの名無しさん
08/04/27 01:15:23
クロージャーやらsetjmpって構造化無視なのか。
手元の小さな作業は減るけど見通しが悪くなるでよい?
594:デフォルトの名無しさん
08/04/27 01:32:38
とりあえず、closureとcontinuationについて調べてから発言しようぜ。
595:デフォルトの名無しさん
08/04/27 02:25:32
恐ろしい・・・
596:デフォルトの名無しさん
08/04/27 10:28:38
>>593
クロージャを使う事で構造化より見通しが良くなるのであれば
それは良い事
597:デフォルトの名無しさん
08/04/27 10:30:28
だいたい手段と目的を履き違えている奴多すぎだろ
色々な手法は何のために作られてるのか考え直せ
598:デフォルトの名無しさん
08/04/27 10:35:11
設計思想が無い
道具の使い方はいくない
バカと包丁だじぇ
599:デフォルトの名無しさん
08/04/27 17:43:43
・インデントが半角スペースではなくタブで行われている
600:デフォルトの名無しさん
08/04/27 17:47:14
・しかも、4桁毎のタブを使用している。
601:デフォルトの名無しさん
08/04/27 17:53:20
エディタでタブみたいにカーソルが動いてくれれば、正直どっちでもいい。
逆に言えば、そうじゃないことの方が多いからタブ使っている俺。
602:デフォルトの名無しさん
08/04/27 18:25:38
普通にtabですが
混在させてる奴は糞
603:デフォルトの名無しさん
08/04/27 18:49:53
基本タブで微調整にスペースって感じで混在させてる奴はよくいるな。
604:デフォルトの名無しさん
08/04/27 19:14:37
タ ブ スペ4while(式) {
タ ブ タ ブ 何らかのコード
なんてされると、4タブ派はまずネスト修正しないといけないからな。
単文のネスト以外はTabかスペースに統一して欲しいよ。
605:デフォルトの名無しさん
08/04/27 19:16:40
そんなのフォーマッタにかけてしまえばよいじゃん。
ソース内にアートを書くようなのにはjavadocでも教えてやれ。
606:デフォルトの名無しさん
08/04/27 19:25:31
>>603
条件演算子でこうやって縦に揃えるときにやる。
[タブ]return isHoge ? Foo
[タブ]ここは空白 : Bar;
607:デフォルトの名無しさん
08/04/27 19:25:56
タブa = 0;
タブbb = 1;
タブccc = 2;
みたいに揃えるためにスペースを混在させるのはありか?
608:デフォルトの名無しさん
08/04/27 19:27:39
そろってないよ
609:デフォルトの名無しさん
08/04/27 19:28:57
>>607
IDEの類が勝手にスペースとっちゃうことがあるから、
行頭のインデント以外で、縦に揃えようとするのはやめてほしい。
610:デフォルトの名無しさん
08/04/27 19:43:26
そうか無しか。残念。
混在は行頭だけにしとく。
611:デフォルトの名無しさん
08/04/27 20:15:49
gnuはインデントがスペース2コで、8以上になるとタブになるって、変態インデントだよな。
612:デフォルトの名無しさん
08/04/28 00:24:42
>611
あれ、8タブを強制されてる感じがして嫌だわ。
613:デフォルトの名無しさん
08/04/28 00:26:52
>606
そういうコードはネストを崩される余地がほぼないから
4タブでもちょくちょく書く。
614:デフォルトの名無しさん
08/04/28 16:02:59
>>599
ifが追加されるなどインデント変更する作業が面倒そう
>>600
set tabstop=4とでもしとけばええがな
615:デフォルトの名無しさん
08/04/28 16:20:19
俺はタブは2つ分だよ。
616:デフォルトの名無しさん
08/04/28 17:18:44
ああ、キチガイか。
617:デフォルトの名無しさん
08/04/28 20:17:03
タブ8でコード書いてる俺は?
618:デフォルトの名無しさん
08/04/28 20:20:29
インデントはスペース2個!
タブは使わない(タブキーは使うけど)
619:デフォルトの名無しさん
08/04/28 20:24:23
インデントはタブキーでやれ!!
スペースでもいいけど。
620:デフォルトの名無しさん
08/04/28 21:28:48
ここを読んでいて、最近はVisualStudioの自動整形任せで、2年くらい自分でインデントしてないことに気付いた。
621:デフォルトの名無しさん
08/04/29 00:10:39
そういえばVisualStudio使うと強制的にスペースに変換されてるな。
622:デフォルトの名無しさん
08/04/29 00:42:32
VisualStudioを使うと強制的にTabになる。
場合によってはTab+スペースになる。
(関数のパラメータの一つ一つについて改行を入れた場合など)
623:デフォルトの名無しさん
08/04/29 01:25:43
>>621-622
ひんと: オプション設定
624:デフォルトの名無しさん
08/04/29 02:05:37
>614
まともな環境ならインデントレベルの変更なんて
コマンド一発か、選択範囲のインデント変更くらいあると思うが。
無くても矩形コピー → 矩形貼付で出来ちゃうし。
625:デフォルトの名無しさん
08/04/29 23:00:02
オレは7カラム目で揃える主義。
626:デフォルトの名無しさん
08/04/29 23:11:37
インデントはtabにしておくと、読む側が好きなインデント量を指定できて便利じゃないか。
627:デフォルトの名無しさん
08/04/30 02:06:22
Tabキーでスペース四個挿入するオプションの無いエディタは
作者ともども消えてなくなればいいと思う。
628:デフォルトの名無しさん
08/04/30 02:50:53
インデントって>>626の言うように、Tabだから良いんじゃないのか????
スペース1つだけ使うときは別として、インデントはTabじゃないの??????????
629:デフォルトの名無しさん
08/04/30 04:36:43
>>625のソースの全行の6カラム目に*を入れたい
630:デフォルトの名無しさん
08/04/30 09:00:43
>629
それ何てCOBOLのコメント
631:デフォルトの名無しさん
08/04/30 12:37:05
6カラム目は Fortran の継続行じゃなかったっけ。
(ちなみに、空白以外の文字ならいいんだけど '$'
を推奨ってものの本に書いてあったな。)
COBOL のコメントは 7カラム目だし。
632:デフォルトの名無しさん
08/04/30 12:54:55
FORTRANの神カードには行番号と継続の桁の線が太くなってたから何桁目だったか覚えてないや。
633:デフォルトの名無しさん
08/04/30 13:01:51
恐れ多いカードだな。
634:デフォルトの名無しさん
08/04/30 14:13:54
だからどうして行主導の言語の話しになるのか と
635:デフォルトの名無しさん
08/04/30 14:21:34
行主導じゃない言語のほうが稀だろ。
つーか、COBOLやFORTRANは桁依存性が高いと言うべきじゃね。
636:デフォルトの名無しさん
08/04/30 14:25:36
>>635
>行主導じゃない言語のほうが稀だろ。
いまどき、固定書式が要求されるのなんて
古いFORTRANと古いCOBOL、それにRPGくらいしか知らないんだが
そんなに多いのか?
637:デフォルトの名無しさん
08/04/30 14:29:26
>>636
例えばC/C++はプリプロセッサやコメントが行単位だし、ソース最終行に改行は必要だね。
改行コードを全く必要としない言語ってbrainfuckの類以外に何がある?
638:デフォルトの名無しさん
08/04/30 14:41:24
行主導と固定書式じゃ全然違うだろ。
つーか、行主導とやらの定義を明確にしてくれよ。
639:デフォルトの名無しさん
08/05/01 01:16:37
行主導って多次元配列の添え字の数の変わるのが
右からか左からかの違いに使われる言葉だと思っていたな。まあいいや
行主導:parsingの単位が物理的な行である言語
文主導:parsingの単位が文
ってなところでどうかな?
640:デフォルトの名無しさん
08/05/01 07:34:52
>>637
Pascal / Modula-2 あたりは改行コードは不要なはず。
>>639
> 行主導:parsingの単位が物理的な行である言語
おおまかにはそれでいいと思うんだけど...
・コメントは行末までと言う言語が多いからこれをどうみるか?
・プリプロセサの扱いは?
・BASIC なんかの行番号が必要な言語は?
等を決めないと俺俺定義で語る奴ばかりになりそう。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5391日前に更新/166 KB
担当:undef