gotoを恐れず使う兵共 ..
554:デフォルトの名無しさん
08/02/13 22:47:37
例えば
>>494
> > 「2回」ループする意図
> ADSLで瞬間的に切断される場合、数秒後に再度アクセスしたら接続される場合があるので。
のあたり、実際に切断された場合の回復処理で正常にアクセスできたことを
切断時間などを変えながら複数の状況でテストしたのかい?
切断された後、一旦回復してすぐまた切断される状況は?
555:デフォルトの名無しさん
08/02/13 22:51:54
>>469って、「多重continue、ヤベッーw」なワナビー風味だね
556:デフォルトの名無しさん
08/02/13 22:58:51
>>554
再表示で接続できることは経験的に知っているし、
規定回数全部で接続できなかった場合でもエラーで中断するし、
中断した場合も呼び出し元からやり直すだけだし。
回復して切断したらって話だが、
REPEAT; sleep(0.1); UNTIL !IE.busy AND IE.readystate = 4
これを実行した後には、接続できたかできなかったかのどちらかしかない。
もちろん不完全な取得を完了とした場合、その先で実行できないってだけだが、
実行できなかった場合も呼び出し元で再チャレンジするし。
557:デフォルトの名無しさん
08/02/13 23:00:25
>>556
つまりテストしてないわけね。よくわかった。
558:デフォルトの名無しさん
08/02/13 23:07:59
>>557
自分で切断はしてないけど切断があったことはログでチェックしてるよ。
559:デフォルトの名無しさん
08/02/13 23:09:48
>>558 切断時間はちゃんとカバーされてるのか?
560:デフォルトの名無しさん
08/02/13 23:12:55
おまえら、テストしたかどうか以前に>>469は一見して糞。以上おわり。
561:デフォルトの名無しさん
08/02/13 23:14:31
>>559
2回続けて失敗する現象はなかった。
昨日だったか2ch鯖にアクセスできなくなってたが、その場合そもそもここまで処理が回ってこないし。
>>560が手本を見せてくれるそうです。
562:デフォルトの名無しさん
08/02/13 23:18:13
>>556
結局わけわからん部分は「呼び出し元で再チャレンジするから」なわけね。
だったら2回ループ回さなきゃいいのに。中途半端なことするから可読性が落ちる。
563:デフォルトの名無しさん
08/02/13 23:24:55
>>562
前の処理がせっかくうまくいってるのにそれを無駄にすることはないだろ。
接続エラーになったからって前の処理をやり直したら、そっちまで接続エラーになるかもしれないだろ。
これは普通にブラウザ使ってたら分かる話だ。
試行回数とインターバルは経験的に、感覚的にだ。
564:デフォルトの名無しさん
08/02/13 23:27:09
>>563
つまり自分が使っていた環境のことしか考えていないし、
テストも自分の普段の環境から出ていないってことね。
なるほどね。
565:デフォルトの名無しさん
08/02/13 23:30:13
>>542
・インライン化の恩恵を受けられる。
・人手で最適化されたコードを吐いてくれる可能性がある。
・ポインタの型によって(intptr_t)pの値が最初から
ワードの倍数になっていることを保証できる場合がある。
566:デフォルトの名無しさん
08/02/13 23:44:24
>>564
待ち時間は秒数で指定してあるし。
IE使ってる時点で使用環境は固定されてるし。
567:デフォルトの名無しさん
08/02/13 23:45:36
しかしつまらんスレだな
568:デフォルトの名無しさん
08/02/13 23:46:10
もういいから
gotoの話じゃないならよそでやれ
569:デフォルトの名無しさん
08/02/14 00:10:38
direct threaded code
570:デフォルトの名無しさん
08/02/14 01:24:26
gotoを一行足りと書かなくても、
容易にクラッシュしてデバッグすらできない環境があって・・・。
助けてくれ orz.
571:デフォルトの名無しさん
08/02/14 01:25:27
>>570
それははたして環境のせいなのか?
572:デフォルトの名無しさん
08/02/14 02:50:12
異常系のテストは、まずは、そういう状況をわざわざ作り出して確認するもんだ。
573:デフォルトの名無しさん
08/02/14 06:49:41
>>566
> IE使ってる時点で使用環境は固定されてるし。
回線まで固定されるわけじゃなかろう
574:デフォルトの名無しさん
08/02/14 07:27:53
>>568
このスレはgotoを語るスレではなくて
finallyや多重breakを語るスレなのでは。
575:デフォルトの名無しさん
08/02/14 07:31:57
>>563
> 試行回数とインターバルは経験的に、感覚的にだ。
ひでえ根拠だなwww
うちに配属になった新人がこんなコード書いたら
即刻今のコードを完デリさせて最初から書きなおしだ。
576:デフォルトの名無しさん
08/02/14 08:23:43
インマルサット・インテルサットに積む電話交換機屋からブラウザアプリ屋まで
入り乱れての乱戦になっておりますw
577:デフォルトの名無しさん
08/02/14 09:01:44
キャプテンも忘れないであげてください
578:デフォルトの名無しさん
08/02/14 16:13:06
「テスト済み」なんて堂々と言うからだ。
テストっていうのがどんな物かわかってたら簡単に言えないもんだ。
そういう意味では「ポインタは理解してる」に似てるな。
と、釣りっぽくまとめてみる也。
579:デフォルトの名無しさん
08/02/14 18:26:21
ポインタのややこしいのは、ポインタじゃなくて宣言の方だからな。
580:デフォルトの名無しさん
08/02/14 18:41:46
一応鯖に負荷のかかる土日流しっぱなしにして想定した全部のパターンでうまくいくのは確認してるし
自動でかかる連続投稿規制とアクセス規制と、さらに管理者からのアクセス規制を受けるまでやって、
そーゆー規制食らった場合にも適切に処理できるのは確認済み。
んでえらそうに語ってくれる人がどういう方法でどこまでのテストを要求してるのか知らんが、
サーバーまで自分で作ってるわけじゃないって事を分かっているのかいないのか・・・。
自分でできる範囲ってのは回線を切断したり接続したりだ。
ちなみに、ほとんどの場合は回線の異常じゃなくて、2ch鯖がただシカトしてただけだった。
自分のプロバイダまでのpingは30msで失敗しないけど2ch鯖は120msくらいかかってそのうち1回くらい失敗しまくり。
あと、エラー判定が実は正常なのを異常と判断する場合があるのは最初から分かってる。
完璧に自動で判断することができないんだからしょーがない。
581:デフォルトの名無しさん
08/02/14 18:57:51
>>565
あぁ・・・そりゃ勝てなくて当たり前かw
トンクスw
582:デフォルトの名無しさん
08/02/14 19:58:15
後出しの多いやつだな・・・
583:デフォルトの名無しさん
08/02/14 20:02:05
単体テストと運用時のつなぐ相手のテストとの違いを
子供に理解させるのは無理だろう。
584:デフォルトの名無しさん
08/02/14 20:27:38
ほうほう。
単体テストってのは1行1行テストすることを言うんですかそうですか。
585:デフォルトの名無しさん
08/02/14 20:28:28
な。
無理だろw
586:デフォルトの名無しさん
08/02/14 20:30:44
あんな短いコードをあれ以上どう分割しろと
587:デフォルトの名無しさん
08/02/14 20:37:15
「単体テスト」でググレカス
588:デフォルトの名無しさん
08/02/14 20:40:00
>>580
結局は自分の環境でしかテストしてないと。
しかも普通に使っていただけで積極的に
様々な状況を設定したわけでもなし。
そういうのはテストとは言わないんだよ。
589:デフォルトの名無しさん
08/02/14 20:52:16
自分で設定しなくても実際にすべての場合で実行して結果を出してるんだからテストされてるだろ。
単体テストしろとかすべての環境でテストしろとかお前ら馬鹿かと。
たかだか数行のコードテストするために何十個もパソコン用意しろって?
590:デフォルトの名無しさん
08/02/14 20:53:36
>>584
ワロタ
591:デフォルトの名無しさん
08/02/14 21:04:11
だから一度「単体テスト」でググってから物言えカス
592:デフォルトの名無しさん
08/02/14 21:19:19
単体テストもせずに「テスト済み」かよ…こりゃダメだ。
593:デフォルトの名無しさん
08/02/14 21:21:29
新たな爆弾発言が出ました。
>>589
> 実際にすべての場合で実行して結果を出してるんだから
すべての場合だってさ・・・意味わかって言ってんのかね。んなわきゃないか。
594:デフォルトの名無しさん
08/02/14 21:22:28
レオン最高
マチルダかわいい
595:デフォルトの名無しさん
08/02/14 21:23:49
>>586は>>587が自分に言ってる事もわかってないに100ガパス。
596:デフォルトの名無しさん
08/02/14 21:37:26
IEを単体でテストできると思ってる馬鹿が多いな
597:デフォルトの名無しさん
08/02/14 21:40:16
ちなみに
+offsetが抜けてデータ構造が変わっていたやつは単体テストで出てきそうなもんだが、
実際には総合テストしないと出てこなかったな。
スレリンク(prog板)
598:デフォルトの名無しさん
08/02/14 21:44:38
>>596
単体テスト用のサーバ立ち上げて、
サーバ側でわざと切断したりレスポンスを変えたり、
外部仕様のカバレッジや実行パスのカバレッジが得られるような
パターンでレスポンスさせるもんじゃないの?
599:デフォルトの名無しさん
08/02/14 21:44:40
単体テストにIEは関係ないだろ・・・
600:デフォルトの名無しさん
08/02/14 21:48:41
>>596
テストする対象はIEじゃなくて糞スクリプトなんですが。
601:デフォルトの名無しさん
08/02/14 21:50:36
つまりIEと同じメソッドを持つダミーのオブジェクトでテストしろってことね。
602:デフォルトの名無しさん
08/02/14 21:51:05
>>598
そのテスト環境は既に結合テストの範疇だな。
サーバーつないだら単体テストにならないだろ?
結論:「テスト済み」なんて簡単に言うなってこった。
603:デフォルトの名無しさん
08/02/14 21:53:00
>>602
いや、結合テストは実稼働のサーバとの接続でやるものでしょ。
実サービスではなく糞スクリプトのテストのためのレスポンスをする
サーバにつなげるのなら単体テストの範疇と思われ。
まあ、スタブを使うようなもんだ。
604:デフォルトの名無しさん
08/02/14 21:53:51
>>602
> 結論:「テスト済み」なんて簡単に言うなってこった。
同意。
605:デフォルトの名無しさん
08/02/14 21:54:48
それにしてもマチルダかわいい。
昔、うちに監禁してた少女は死んじゃったから代わりが欲しいな・・・(冗談)
それはそうと、ぼろいビルの屋上でスナイプの練習してるけど、
周りはもっと高層なビルがたくさん・・・
ライフルが丸見えです。
僕も屋上セックスしてたら隣のビルの専門学校から丸見えでばればれだった。
606:デフォルトの名無しさん
08/02/14 21:56:55
>>603
ああ、そういう意味なら納得。
つまりそのサーバーはテスト用に設定した動作をするってことね。
607:デフォルトの名無しさん
08/02/14 22:23:14
49日連続稼動しないとバグが発覚しない某アレの例もあるからねぇ・・・
608:デフォルトの名無しさん
08/02/14 22:32:18
>>400付近の遠いレスだけど、おまえらそもそもデストラクタロギングが
どんなのかしってるのか。
class TRACE {
TRACE(char *funcnamne, ...) { cout << log... <<endl; }
~TRACE() { cout << log.. <<endl; }
}
とかよういしといて、関数に下のように書くだけだぞ。tryもfinallyも
いらない。スコープぬけるときにデストラクタが呼ばれて、
かってにロギングしてくれるから。
void func {
TRACE trace("func", ...);
...実体...
}
609:デフォルトの名無しさん
08/02/14 22:36:14
>>608
クロージャがエスケープした時にはどうすんの?
finallyならクロージャがエスケープしようが例外が発生しようが
ちゃんとロギングできるわけだが。
610:デフォルトの名無しさん
08/02/14 22:39:45
>>608
それは言語依存でしょ。
フルGCな言語や処理系だとスコープ抜けた直後にデストラクタが叩かれる保証はない。
611:デフォルトの名無しさん
08/02/14 22:43:45
>>609
てか、そもそもC++にクロージャなんてものあったけか
612:デフォルトの名無しさん
08/02/14 22:45:06
>>611
ないけど、このスレはC++限定じゃないでしょ?
613:デフォルトの名無しさん
08/02/14 22:47:06
じゃぁtryもfinallyも前提に出来ないだろ、すべてコード上にログを
書くしかない。ならgotoまんせーだな、ファンクショントレースには。
614:デフォルトの名無しさん
08/02/14 22:49:20
>>613
C++限定じゃないがC限定でもない。
JavaでもPythonでもJavaScriptでもModule-3でもアリじゃないの?
615:デフォルトの名無しさん
08/02/14 22:50:15
CとC++のみが漢の言語
616:デフォルトの名無しさん
08/02/14 22:55:27
>>614
わかった。じゃぁまずは、「デストラクタロギングさん、馬鹿にしてすいません。
tryとfinallyを使ったロギングなんてクソです」といえwww
617:デフォルトの名無しさん
08/02/14 22:56:32
そういえばC言語のswitchはbreakで抜けるブロックだったな。
他の言語ではifの拡張だから普通にbreakでループが抜けれるから
>>469みたいなselect breakはおかしく見えちゃうんだな。
618:デフォルトの名無しさん
08/02/14 22:56:33
デストラクタでロギングできる言語よりも
finallyでロギングできる言語のほうが多いだろうな
そもそもfinallyに比べてデストラクタでロギングする
メリットが見えないのだが
619:デフォルトの名無しさん
08/02/14 23:00:09
>>616 ワケワカランwww
620:デフォルトの名無しさん
08/02/14 23:34:48
C++厨がファビョりました
621:デフォルトの名無しさん
08/02/15 00:55:51
>>618
>そもそもfinallyに比べてデストラクタでロギングする
>メリットが見えないのだが
おまえバカだろ?
622:デフォルトの名無しさん
08/02/15 01:16:59
C++にfinallyが無い理由を考えろ
623:デフォルトの名無しさん
08/02/15 01:18:43
finallyロギングは使うたびにfinallyブロックごとコピペする必要がある。
デストラクタロギングなら変数宣言だけコピペすればよいので、
finallyロギングよりコピペ量が少なくて済む。
その点ではC#/VB.NETのusingも次点でまあ使えると俺は思う。
ロギング以外にも言えることだけど。
624:デフォルトの名無しさん
08/02/15 01:40:34
aspect 最強説
625:デフォルトの名無しさん
08/02/15 01:41:27
粘着アスペルガー最狂
626:デフォルトの名無しさん
08/02/15 04:38:51
うちのご近所さんたちが次から次にご近所さんを殺しまくったのは、
多分年金を全部懐に入れてて、いざ受け取ろうとしたら一円も受け取れなかったから、
「ばれたら仕方がない」って殺しまくったんだろうな。
627:デフォルトの名無しさん
08/02/15 06:41:34
>>623
その程度の利点かよ・・・
finallyだってマクロ一発じゃん・・・アフォらし・・・
628:デフォルトの名無しさん
08/02/15 07:23:28
>>613
なんだそりゃギャハwwwwwwww
オマエ、もうちょっと色々な言語、できれば現代的な言語を勉強しろよwww
629:デフォルトの名無しさん
08/02/15 08:31:18
Aspect指向なんてどうでもいい。
CLOSのbefore-afterさえあれば十分。
630:デフォルトの名無しさん
08/02/15 08:50:21
おまえら朝っぱらから元気だな。
で、俺も>>623以外のデストラクタロギングのメリットを知りたい。
デストラクタロギングはどうも間接的すぎて気持ち悪い。
つーか、そのうちオブジェクト解放のタイミングが変わったら
とたんに使えなくなるような。
トリッキーではないが正道でもない方法に見える。
631:デフォルトの名無しさん
08/02/15 13:28:19
スクリプト厨の次はデストラクタ厨かよ
勘弁してくれ
632:デフォルトの名無しさん
08/02/15 15:51:00
急激に誰もいなくなった。
決算期前の需要で皆忙しいのかな。
633:デフォルトの名無しさん
08/02/15 16:56:03
>>627
マクロが使えるなんていい環境ですね。
634:デフォルトの名無しさん
08/02/15 17:36:29
とりあえず、仕様の表明の不十分なコード片を書くのはやめてもらいたい。
読まされるほうはたまったものではない。
635:デフォルトの名無しさん
08/02/15 17:49:12
>>634
読まなければ、いいじゃねーかw
636:デフォルトの名無しさん
08/02/15 17:59:15
たしかにw
637:デフォルトの名無しさん
08/02/15 18:02:53
>>529
このコーディングがC言語が生まれて10年後くらいに発見されたとかwikiに書いてあるけど、
C言語作るときにこの書き方を想定して作ったからC言語ではswitchをbreakで抜ける仕様になってるって分かる人いるかな。
638:デフォルトの名無しさん
08/02/15 18:05:50
>>637
全く意味がわからないな。
switch を break で抜けられる全部の言語で >>529 が書けるなら信じてあげるよ。
639:デフォルトの名無しさん
08/02/15 18:16:29
>>638
>>637の言う
> switchをbreakで抜ける仕様
って、fall throughのことで、
URLリンク(www.catb.org)
breakが無いと、次のcaseが現れても抜けない仕様、という
ほうが正確かな。
複数のcaseをうまく利用することができる、という特性を生かす趣旨が
ある仕様ということはわかるけど、ループと組み合わせるという技は
発見された、としてもいいんじゃないかと思うけど。
640:デフォルトの名無しさん
08/02/15 19:00:57
>>633
君のところじゃboostも使えないのかい?そりゃ可哀想に。
641:デフォルトの名無しさん
08/02/15 19:46:19
むしろ開発者の一存で、boostが使えることが少ない
642:デフォルトの名無しさん
08/02/15 19:49:36
デストラクタでログ取ると、ローカル変数のトレースを取れないんだよね。
643:デフォルトの名無しさん
08/02/15 20:23:45
>>642
トレースしたいローカル変数より後にロギング用の変数を宣言するのはダメ?
リリース版でログを取るのでなければ、boost::formatとか使わなくても
printfベースの実装で十分だと思うし。
644:デフォルトの名無しさん
08/02/15 20:41:48
>>643
トレースの対象がオブジェクト(またはその属性)の場合は?
645:デフォルトの名無しさん
08/02/15 20:45:03
昔、
goto aho:
...
{
int baka;
...
aho:
...(bakaを使う)
}
ってやったら、bakaを確保せずにいきなりahoに飛ぶコードを吐かれた(MS-Cかな?)。
それ以来gotoは完全封印
646:638
08/02/15 21:24:01
>>639
fall through だけじゃダメだと思う。
「case は switch 直下に無くても文法的に正しい」 って仕様が含まれている必要がある。
C は case 〜 をそれ以外の単なるラベルと同列に扱うという仕様になっているから、
「>>529 のように switch 直下ではなく while の中に case を書いても正しく動く」
ということが後になって発見(正確には”確認”)されたんじゃないかと。
ところで、ふと java の仕様見たら
URLリンク(www.y-adagio.com)
思いっきり >>529 が書いてあるし。
647:デフォルトの名無しさん
08/02/15 21:35:04
>>640
え、C++だったの?
627でfinallyって言っているからC++はないと思っていたんだけど。
648:デフォルトの名無しさん
08/02/15 21:52:40
>>644
テンプレートで超がんがる。
DebugLogger d("%d %d\n", &var, std::make_pair(obj, &A::func));
649:デフォルトの名無しさん
08/02/16 10:08:37
>>645
そんな入れ子の外から飛び込むのは、どんな言語の場合でも
自殺行為に近いだろ。 入れ子の外で定義が終わってれば
別だがね。
650:デフォルトの名無しさん
08/02/16 12:03:37
Doで始まるループなんだけど最初の1回だけ途中までは飛ばしたいときってあるよね。
多分そういうときに使ってるんだと思うけど、
普通はなんとかする。
651:デフォルトの名無しさん
08/02/16 12:29:19
goto使いたがる厨房は局所的な制御ばかり見て全体的な構造の見直しをしない、と、燃料注入w
652:デフォルトの名無しさん
08/02/16 12:31:14
C言語の仕様としては>>645みたいなのはどうなってるのか、詳しい人教えてよ
653:デフォルトの名無しさん
08/02/16 12:35:43
少なくとも変数の場所は確保されてるべき。
(最適化でレジスタに割り当てられると見た目じゃわかんないけど)
goto foo;
{
int bar = 44;
foo:
printf("%d\n", bar);
}
で 44 が表示されるべきだったかどうだったか調べてみる...
654:デフォルトの名無しさん
08/02/16 12:49:41
647はfinallyの処理系依存実装を見たことないのかと
655:デフォルトの名無しさん
08/02/16 13:40:44
>>652
同じ関数内のループに飛び込んでるだけだろ
656:デフォルトの名無しさん
08/02/16 15:39:42
>>652
普通の実装ならブロックローカルな変数も関数呼び出した時点で
スタックに領域確保するんじゃねーの?
657:デフォルトの名無しさん
08/02/16 15:51:47
>>651
gotoは「局所的な制御」にしか使わないから。
そして「構造」は「常に全体が対象」だ。
燃料としては不足だ。
658:デフォルトの名無しさん
08/02/16 16:03:24
>>657
> gotoは「局所的な制御」にしか使わないから。
> そして「構造」は「常に全体が対象」だ。
もちろん>>651はそれが前提で書いていると思うが?
全体を見ずに局所だけを見ているからgotoを使いたがる
というのが>>651の趣旨だと思うが。
659:657
08/02/16 17:02:23
>>658 んじゃ。
全体を見て局所も見ていればgotoを使いたがらない。
という命題は正しいのかい?
660:デフォルトの名無しさん
08/02/16 17:15:16
>>659
それは言語の設計思想によるんじゃないかな。
goto前提な言語なら自然とgoto使うことになるし、
goto原則使わないのが前提な言語を使っていて、
かつ、全体の構造を考える習慣がついていれば、
gotoが必要っぽい状況になったら自然と全体の
構造を疑う方向に目が向くと思うよ。
661:デフォルトの名無しさん
08/02/16 17:57:34
gotoを使いたくないだけの理由で構造を変えるのは、本末転倒にならないように気をつけないとな。
662:デフォルトの名無しさん
08/02/16 18:21:23
gotoが必要になるのは全体の構造がおかしい兆候なのではと疑うのと、
gotoを使わないだけの理由で全体の構造を変えることとでは
天と地ほどの差があるけどな。
663:デフォルトの名無しさん
08/02/16 19:07:13
紙一重だろw
構造を見直したい程gotoが気になるなら、まず
設計に対する姿勢から疑わないと。
664:デフォルトの名無しさん
08/02/16 19:09:49
かわいそうな>>663には見直すことと疑うことの違いがわからないらしい。
665:デフォルトの名無しさん
08/02/16 19:13:47
初心者向けの指標としては有りだろう。
666:デフォルトの名無しさん
08/02/16 19:14:42
>>664 無駄だって、相手はgotoを使いたいという結論が先にある人なんだから。
667:デフォルトの名無しさん
08/02/16 19:16:31
>>664は見直したら必ず変更しなくちゃ行けないと思ってるらしい。
668:デフォルトの名無しさん
08/02/16 19:17:27
わかりやすい自作自演をみた。
669:デフォルトの名無しさん
08/02/16 19:32:20
>>665
> 初心者向けの指標としては有りだろう。
gotoを使いたがるのは初心者が多いという意味で賛成だ。
670:デフォルトの名無しさん
08/02/16 19:34:40
>>667
そんな君の発言「紙一重」wwwwwwwwwwwww
671:デフォルトの名無しさん
08/02/16 19:39:57
疑うことと構造を変えることを紙一重と言っちゃってるからねえ
かなり苦しいんじゃないの?
672:デフォルトの名無しさん
08/02/16 19:46:22
燃料に引火しちゃったようで、ナイーブなgoto厨さんwwwwwwwwwwwwwww
673:665
08/02/16 19:56:31
>>669
そういう意味での賛成は遠慮させていただく。
「どうしてもgotoが必要な場面になったら、構造を見直してみよう」
のようなアドバイスは、初心者向けにはいいかもしれない。
終端条件やデータ構造を見直したら、もっといい方法がみつかるかもしれない。
けれど、そのgotoが適切だと思うなら、見直す必要もない。
gotoはあくまでもきっかけとして、である。
クロージャとかlambdaが欲しいな、と思いながらgotoを書く事もある。
goto(と飛び先のラベル)の場所が適切なら、問題ない。
674:665
08/02/16 19:57:15
自演醜ス・・・
675:デフォルトの名無しさん
08/02/16 19:58:19
なんでgotoについて語るのに構造のことまで持ち出すんだかが
全然わかんない。論争根源の論文の
URLリンク(www.cs.utexas.edu)
と同様なネガティヴキャンペーンにしか見えないぞ。
676:デフォルトの名無しさん
08/02/16 20:00:06
問題ないと言ってgoto乱発する馬鹿は
他人のgotoまみれコードを保守した経験がない
ビギナーさん
677:デフォルトの名無しさん
08/02/16 20:06:45
>>676 ぐちならマ板行でな。
678:デフォルトの名無しさん
08/02/16 20:12:36
自演認定したがる奴が自演常習者
679:デフォルトの名無しさん
08/02/16 20:15:42
↓次はsageで同意、と。
680:デフォルトの名無しさん
08/02/16 20:15:59
まさか「gotoを使う人間は使いたいから使う」などと思っている人はいないよね?
gotoつかう人は「goto使ったほうが良い」と判断しているから使うんだけど。
gotoを使わずに簡潔に書けるならば、好き好んで使ったりはしないよ。
681:デフォルトの名無しさん
08/02/16 20:16:45
ちぃ、はずしたか。
682:デフォルトの名無しさん
08/02/16 20:20:09
>>680
> gotoつかう人は「goto使ったほうが良い」と判断しているから使うんだけど。
その判断が狭すぎるという話じゃなかったのか?
683:デフォルトの名無しさん
08/02/16 20:35:45
goto厨は視野狭窄ということがプログラミングだけでなく議論においてもそうだということが証明されましたな
684:デフォルトの名無しさん
08/02/16 20:43:02
存在しない相手に対して勝利宣言か・・・
685:680
08/02/16 20:48:32
>>680
ああそうさ。必要も無いのにgoto使うというのはたしかに判断が狭いということだ。
これは開発担当のスキルの不足を反映しているのに過ぎない。
この問題の根源は開発担当に対するスキル管理の不足/欠如だよ。
悪いのはgotoやgotoを使ったプログラムやgoto使った人間では無いことを確認したいわけよ。
だけどgotoの使用判断は開発担当の職掌さ。
どのようなロジックにおいてもgotoを使わないほうが優れているという証明が出来ない限り、
goto禁止ルール自体は不当なルールだと言いたいね。
686:680
08/02/16 20:49:45
>>682
だた。失礼
687:デフォルトの名無しさん
08/02/16 20:51:54
プログラミング言語を作るときには、
徹底的にgotoを使わなくて済むようにしてほしいね。
多重breakをできるようにしたり、try-catch-finallyにデストラクタを用意したり。
688:デフォルトの名無しさん
08/02/16 20:53:44
それはJavaだ
689:デフォルトの名無しさん
08/02/16 20:54:14
美しいgoto文だって書けるのに。
汚いgoto文を見ただけで、「goto禁止」は、まりにも短絡的すぎ。
for〜continue〜break文にせよ、do〜while文にせよ、if文にせよ、try〜catchにせよ、
ネストしまくりでワケワカラン汚いコードを書くヤツは、そこらへんにウヨウヨいる。
いったいどうやったら、構造化言語をここまで汚く書けるのか、もう信じられんほど。
なのになぜ、goto「だけ」がこれほどまでに差別されなければならないのか。
・・・ま、そこらへを書くと、またキチガイが湧くんでホドホドにしとくが。
美しく書けばgotoは害では無い。これは確か。
690:デフォルトの名無しさん
08/02/16 20:56:25
>>685
とりあえず、モチツケ。
無条件goto禁止、については合理的な理由の説明は無かったはずだ。
691:デフォルトの名無しさん
08/02/16 20:56:46
それはわかるけど、現実は汚いgotoを書く奴が9割9分。
goto禁止したところで、そのうち9割くらいはフラグ付きwhileとか結局スパゲティを書く気がするけど。
692:デフォルトの名無しさん
08/02/16 21:02:41
>>689
gotoには「最後の手段」の側面もあるからね。
gotoとラベルの置き場所の自由さっぷりは両刃の剣なわけで。
693:デフォルトの名無しさん
08/02/16 21:04:39
で、自由奔放にgotoを使いまくってるコードを最後にみたのは何時なんだ?
なんかもう脳内事例で語ってるようにしか見えないんだが。
694:デフォルトの名無しさん
08/02/16 21:06:34
例えば、Linux kernel ではエラー処理に飛ぶためのgotoをいっぱい使ってるけど
全然読みづらくない。こういうgotoは全く問題にならないし、
Cで綺麗にエラー処理を書こうとしたらああならざるを得ないと思うけどな。
>>691
人格攻撃は生産的じゃない。もっと実になる議論をしようや。
695:デフォルトの名無しさん
08/02/16 21:08:16
g○ヒo きたないgoto
696:デフォルトの名無しさん
08/02/16 21:14:12
肯定派
多重ループからの抜け出し、エラー処理、リソースの開放で定型的に使うならありだろ。
gotoを避けるというのを関数分割のタイミングにするのは馬鹿らしいし。
大体goto使ったが為のスパゲッティコードなんて大昔の非構造化BASIC以来見たことないぞ。
否定派
goto駄目。絶対。goto使う奴はコードが汚く低能!
697:デフォルトの名無しさん
08/02/16 21:24:22
>>696を読んでいるとgoto厨の視野の狭さがよくわかるという罠www
698:デフォルトの名無しさん
08/02/16 21:26:41
Linux kernelのソースクオリティを高いなんていう香具師の言うことは、
その程度の扱いを受けて当然だな。
699:デフォルトの名無しさん
08/02/16 21:28:11
構造を見直してもっといい設計にすれば使わずにすむgotoがあるという話と
gotoを自由奔放に使いまくるという話の間にはずいぶんと開きがあることに
>>693が気付く時は来るのだろうか。。。(遠い目
700:デフォルトの名無しさん
08/02/16 21:34:55
そもそもgoto絶対禁止なんて主張してる香具師、このスレにはいないと思うが(藁
701:デフォルトの名無しさん
08/02/16 21:35:50
%sのソースクオリティを高いなんていう香具師の言うことは、
その程度の扱いを受けて当然だな。
702:デフォルトの名無しさん
08/02/16 21:37:07
絶対禁止はないよな。
ただ現存する用法すべてに盲目的にケチつける奴がいるだけでw
703:デフォルトの名無しさん
08/02/16 21:39:47
>>702 そんな香具師いるか?
つーか、そもそも現存する用法すべてのリスト、このスレに挙がってるのか?
704:デフォルトの名無しさん
08/02/16 21:46:24
setjump, longjump だって綺麗に書きさえすればいい。
705:デフォルトの名無しさん
08/02/16 21:48:28
poor man's continuationか。
まあ使えばいいんじゃない?
706:デフォルトの名無しさん
08/02/16 21:50:22
goto厨は、なんかもう脳内事例で語ってるようにしか見えないんだが。
707:デフォルトの名無しさん
08/02/16 21:53:43
>>698
まぁまともな会社で、まともな品質のプログラムがかけるプログラマでも
Linuxのソースクオリティで書けるプログラマなんて少ないけどな。
708:デフォルトの名無しさん
08/02/16 21:54:10
>>704
ナイ、ナイ
709:デフォルトの名無しさん
08/02/16 21:56:40
時代は変わったな。
Linuxカーネルの可読性の低さはBSDハッカーの格好の標的だったのに。
今じゃLinuxカーネルが高品質と言われるようになったか。。。(遠い目
710:デフォルトの名無しさん
08/02/16 21:59:19
具体例には例外なく難癖つけるくせに
そう指摘されるといや、そんなことないよとごまかす嫌goto厨。
もう年相応の趣味を持てずただリアルでの孤独を癒す為に宗教論争スレに常駐してるだけみたいだね。
711:デフォルトの名無しさん
08/02/16 22:00:11
>>708
Cのマクロで例外処理を実装するような使い方はきれいなsetjmpの使い方だと思う。
712:デフォルトの名無しさん
08/02/16 22:00:19
>>710 goto厨は、なんかもう脳内事例で語ってるようにしか見えないんだが。
713:デフォルトの名無しさん
08/02/16 22:01:45
>>705
なるほど、poor man's continuationね。確かにそうかも。
714:デフォルトの名無しさん
08/02/16 22:05:48
まぁ継続なんて、使わんよ。
715:デフォルトの名無しさん
08/02/16 22:07:12
>>711
Cで例外つっても、単にジャンプすればいいだけじゃなくて、それ以外にも
C++でいうデストラクタの処理とか色々必要になるわけで。setjmpはつかわないわ。
716:デフォルトの名無しさん
08/02/16 22:07:50
Linuxカーネルでのgotoの使い方の話なのに、Linuxカーネルのコードの
クオリティの高さに話を逸らしてるお馬鹿さんがいますね
717:デフォルトの名無しさん
08/02/16 22:26:19
Linuxカーネルの可読性の低さの話なのに
無関係だということにしたい人がいますね
718:デフォルトの名無しさん
08/02/16 22:27:27
>>715
どうせマクロなんだからfinally実装しちゃえばいいじゃない。
NSAutoreleasePoolみたいに「暇なとき始末してね」と予約しておいて、
早めに開放したい資源(ファイルディスクリプタとか)を利用した後や、
イベントループのように定期的に戻ってくる場所で開放する手もある。
719:デフォルトの名無しさん
08/02/16 22:33:20
>>718
そんな難しいことできるわけないだろ
お前実装してみろよ
720:デフォルトの名無しさん
08/02/16 22:33:49
だいたいgotoダメって行ってるやつは、
3年目くらいで、やっとできるとまわりから認められ、
ちょっと自信が付いてきたやつ。
後輩に教える機会も増えて、得意になって、よく分からんくせに
中途半端な知識でものを語ってるんだろ。
gotoの話なんて、もう十何年も繰り返されてるのに。
721:デフォルトの名無しさん
08/02/16 22:35:04
もう十何年も繰り返されていてもまだgotoにしがみついてる厨房がいるねえ
722:デフォルトの名無しさん
08/02/16 22:37:11
3年目の先輩に頭ごなしに教えられて反発してるビギナー君の登場です
723:デフォルトの名無しさん
08/02/16 22:40:58
これまでの傾向
-嫌goto厨の主張はいつも抽象論の域をでない
-抽象論でgotoを否定するだけで、「おえらいさんが言ってただろ?だから従え」
という傲慢な主張しかない
-goto肯定派の具体的な例に関しては、「構造的に考えれば、とか、構造を再度
検討しなおせば」とか、これまた抽象論でしか返さない。
要するに、嫌goto厨の主張なぞその辺の学者のタワゴトにしかすぎず、
なんら実務面の利点を示しているわけではない。
724:デフォルトの名無しさん
08/02/16 22:41:48
スパゲッティコードは絶滅したと思っている人必見。>>469
こんなコードを書く香具師がgotoを使ったらどんな恐しいことになることか。
725:デフォルトの名無しさん
08/02/16 22:43:00
>>723
goto厨の提示したソース、どうにも実務的なのはないのだが。
あるというのならアンカーで示してくれ。
726:デフォルトの名無しさん
08/02/16 22:46:13
これまでの傾向
-goto厨の主張はいつも抽象論の域をでない
-抽象論でgotoを肯定するだけで、「おえらいさんが言ってただろ?だから従え」
という傲慢な主張しかない
-goto否定派の具体的な例に関しては、「実用的ではない、とか、
gotoでも害がなければ」とか、これまた抽象論でしか返さない。
要するに、goto厨の主張なぞその辺のワナビーのタワゴトにしかすぎず、
なんら実務面の利点を示しているわけではない。
727:デフォルトの名無しさん
08/02/16 22:48:49
>>723にも>>726にも禿同
ようするに目糞鼻糞
728:デフォルトの名無しさん
08/02/16 22:50:36
GOTO 1
729:デフォルトの名無しさん
08/02/16 22:59:31
goto厨ってなんだよ。
goto使ったらダメとにかくダメって言ういかれぽんちに、
んなわけねーだろって言ってるだけだろ。
730:デフォルトの名無しさん
08/02/16 23:02:24
>>729
せいかい^^
731:デフォルトの名無しさん
08/02/16 23:31:19
ごとーさんがお怒りですよ
732:デフォルトの名無しさん
08/02/16 23:35:00
>>731
だれ?
733:GOTO
08/02/16 23:56:15
俺
734:デフォルトの名無しさん
08/02/17 00:18:43
見やすかったらどっちでもいいよ
735:デフォルトの名無しさん
08/02/17 03:32:45
>>719 でけた。TRY〜END_TRYの中からreturn出来ないけど。
typedef struct ex_handler_rec_ ex_handler_rec_;
struct ex_handler_rec_ {
ex_handler_rec_ *volatile prev_;
jmp_buf jbuf_;
const char *volatile ex_type_;
void *volatile ex_data_;
};
ex_handler_rec_ *volatile current_handler_ = NULL;
#define EX_ABBREV(x) x
#define TRY { \
ex_handler_rec_ EX_ABBREV(ex_handler_); \
int EX_ABBREV(need_rethrow_) = 0; \
if (0) BREAK_TRY; /* mandate finally clause */ \
EX_ABBREV(ex_handler_).prev_ = current_handler_; \
current_handler_ = &EX_ABBREV(ex_handler_); \
if (setjmp(EX_ABBREV(ex_handler_).jbuf_) == 0) {
#define BREAK_TRY goto EX_ABBREV(break_entry_)
#define RETHROW goto EX_ABBREV(rethrow_entry_)
#define CATCH(extype) \
} else if (!extype || !strcmp(extype, EX_ABBREV(ex_handler_).ex_type_)) { \
void *EX_ABBREV(ex_data) = EX_ABBREV(ex_handler_).ex_data_;
#define CATCH_ALL \
} else if (1) { \
void *EX_ABBREV(ex_data) = EX_ABBREV(ex_handler_).ex_data_;
736:デフォルトの名無しさん
08/02/17 03:33:37
#define FINALLY \
} else { \
if (0) goto EX_ABBREV(rethrow_entry_); /* supress warning */ \
EX_ABBREV(rethrow_entry_): \
EX_ABBREV(need_rethrow_) = 1; \
} \
EX_ABBREV(break_entry_):; \
if (current_handler_ == &EX_ABBREV(ex_handler_)) /* no exception */ \
current_handler_ = EX_ABBREV(ex_handler_).prev_; \
{
#define END_TRY } \
if (EX_ABBREV(need_rethrow_)) \
throw_exception(EX_ABBREV(ex_handler_).ex_type_, EX_ABBREV(ex_handler_).ex_data_); \
}
void throw_exception(const char *ex_type, void *ex_data) {
ex_handler_rec_ *handler = current_handler_;
current_handler_ = handler->prev_;
handler->ex_type_ = ex_type;
handler->ex_data_ = ex_data;
printf("throw_exception %s\n", ex_type);
longjmp(handler->jbuf_, 1);
}
737:デフォルトの名無しさん
08/02/17 03:40:13
こういう風に使う。EX_ABBREVマクロを再定義することでTRYのネストができる。
TRY {
#undef EX_ABBREV
#define EX_ABBREV(x) a_##x
TRY {
if (cond)
BREAK_TRY;
throw_exception("hoge", cond2 ? "abc" : NULL);
} CATCH("fuga") {
if (a_ex_data) /* throw_exceptionの第二引数はEX_ABBREV(ex_data)に入る */
printf("%s fuga\n", (char *)a_ex_data);
else
RETHROW;
} FINALLY {
printf("inner finally\n");
} END_TRY;
#undef EX_ABBREV
#define EX_ABBREV(x) x
} CATCH("fuga") {
printf("fuga %s\n", ex_data);
} FINALLY {
printf("outer finally\n");
} END_TRY;
738:デフォルトの名無しさん
08/02/17 03:46:42
きめぇぇぇぇ
739:デフォルトの名無しさん
08/02/17 04:21:39
具体例なんて、普及しているオープンソースのコードを引っ張ってきて
grep goto すりゃ見つかるだろ。
740:デフォルトの名無しさん
08/02/17 04:25:13
return 時に実行してくれない finallyに何の意味がある?
あと、for,whileなどのループ内では、このマクロは使えないね。
(BREAK_TRY のあと、ループ脱出条件を再度判定してbreak文を実行しなきゃならない:二度手間)
741:デフォルトの名無しさん
08/02/17 04:47:21
>>725
2chは行数制限があるから実用されているコードを貼るのは無理だね。
アンカーではなくポインタは示すので、あとは自分で調べて。
# apache が実務的なコードでないという奴はいないよな?
$ grep -r -n goto httpd-2.2.8/server
httpd-2.2.8/server/vhost.c:717: goto bad;
httpd-2.2.8/server/vhost.c:747: goto bad;
httpd-2.2.8/server/vhost.c:754: goto bad;
httpd-2.2.8/server/vhost.c:904: goto found;
httpd-2.2.8/server/vhost.c:916: goto found;
httpd-2.2.8/server/mpm/netware/mpm_netware.c:421: goto got_listener;
httpd-2.2.8/server/mpm/winnt/child.c:954: goto shutdown;
httpd-2.2.8/server/mpm/winnt/mpm_winnt.c:871: goto die_now;
httpd-2.2.8/server/mpm/experimental/event/event.c:1140: goto worker_pop;
httpd-2.2.8/server/mpm/worker/worker.c:882: goto worker_pop;
httpd-2.2.8/server/mpm/prefork/prefork.c:614: goto got_fd;
httpd-2.2.8/server/mpm/beos/beos.c:560: goto got_a_black_spot;
httpd-2.2.8/server/mpm/beos/beos.c:562: goto got_fd;
httpd-2.2.8/server/util_xml.c:58: goto read_error;
httpd-2.2.8/server/util_xml.c:79: goto read_error;
httpd-2.2.8/server/util_xml.c:88: goto read_error;
httpd-2.2.8/server/util_xml.c:93: goto parser_error;
742:デフォルトの名無しさん
08/02/17 06:54:58
>>741
おいおい、今さら提示しても遅いって。>>723に
> -goto肯定派の具体的な例に関しては、「構造的に考えれば、とか、構造を再度
とか
> なんら実務面の利点を示しているわけではない。
とか書いた時点で、じゃあgotoの実用的かつ正しい使い方というのは
どんな具体例があったんだよって話なんだから。
743:デフォルトの名無しさん
08/02/17 06:55:01
goto肯定派曰く「何も考えずにgotoを使う奴などいない」
goto否定派曰く「全てのgotoが駄目だという奴などいない」
であれば、肯定派否定派など互いにレッテルを貼っているだけで不毛な言い合いだな。
「どういう場合にgotoを使うのか、使わないのか」という具体的な議論にこそ意味があると思うが。
744:デフォルトの名無しさん
08/02/17 06:59:38
>>742
linuxカーネルの話は723よりも前に出ている。
ま、くだらない貶しあいには興味がないので具体例で。
vhost.cの最初の3つはこういう構造。
static void fix_hostname(request_rec *r) {
...
if (rv != APR_SUCCESS || scope_id) { goto bad; }
...
if (r->hostname[0] != '[') {
for (dst = host; *dst; dst++) {
if (apr_islower(*dst)) { ... }
else if (*dst == '.') { ...; goto bad; }
else ...
}
}
...
return;
bad:
...
return;
}
745:デフォルトの名無しさん
08/02/17 07:03:07
自分は>>744のgotoの使い方は特に問題がないと思う。見やすい。
gotoを使わずにより良いコードを書ける人は代案をよろしく。
「744のように端折られると詳細がわからないから書けない」という言い訳はなしな。
「本物」のコードへのポインタは>>741にある。必要なら本物を見てくれ。
746:デフォルトの名無しさん
08/02/17 07:05:30
それから、一つだけ。
抽象的な言い合いの間は散々吠えておいて、
こういう流れにされると何もいえなくなる人へ。
「お前はgotoを使うな」
747:デフォルトの名無しさん
08/02/17 07:22:04
vhost.cの下2つ(L904, L916)はこの関数。
static void check_hostalias(request_rec *r) {
処理
for (ループ条件) {
処理 // この部分に、条件を満たしたらcontinueというコードがある
if (判定条件) goto found;
処理 // この部分に、条件を満たしたらcontinueというコードがある
if (判定条件) goto found;
}
return;
found:
r->server = s; // この一文のみ
}
これはごく単純なgotoの例。多重ループでも何でもないが、使わない人フラグを立ててbreak?
r->server=s; return;を二箇所に書くという書き方も、二箇所程度ならありかもね。
748:デフォルトの名無しさん
08/02/17 07:24:39
>>744
bad:
...
return;
な部分をマクロにしちゃえばgotoなんて使う必要ないんじゃ?
749:デフォルトの名無しさん
08/02/17 07:27:08
mpm_netware.cでの使われ方
for (ループ条件) {
処理
do {
処理
if (条件) goto got_listener;
処理
} while (ループ条件);
continue;
got_listener:
処理
}
750:デフォルトの名無しさん
08/02/17 07:32:07
>>749
goto got_listenerが一箇所なら
if (条件) {処理; break;}で済む問題だな。
複数箇所なら処理をstatic関数にすればいい。
そもそも「処理」ってくくれるぐらいまとまってるんだろ?
751:デフォルトの名無しさん
08/02/17 07:33:27
ちなみにこうやって具体的なコード片で議論しても
全体の構造うんぬんの話の検証にはならない。
というか、むしろ局所的な制御しか考えてないと
goto慎重派に言われても仕方ないことになるが。
752:デフォルトの名無しさん
08/02/17 07:37:26
このパターンは条件がどんどん後付けされるのでは?
過去何度かあったろ。いいかげん気付け。
753:デフォルトの名無しさん
08/02/17 07:41:45
今度のパターンは条件を後付けする必要ありません。
次から次へのgrep gotoした結果がタレ流されるパターンです。
1つの例にレスがついたらその議論を先にするのが礼儀というものだが
このスレのgoto厨は無視してひたすらgrepを続けます。
それがgotoクオリティ。
754:デフォルトの名無しさん
08/02/17 07:41:58
>>750
>そもそも「処理」ってくくれるぐらいまとまってるんだろ?
いや。got_listenerの後の処理は長い。
do whileで条件を満たせなかった場合はcontinueするという意図のコード。
>>751
そうか。
>>752
ならばコードを読め。>>741参照。
755:デフォルトの名無しさん
08/02/17 07:49:46
>>748
マクロは意図するところが十分に明確で、かつ処理が短い場合は良いアイデア。
今回の実際のコードではreturnを入れて3文なので悪くはないかも。
(r->statusに代入、ログ吐き、return)
ただしマクロの濫用もコードの可読性を落とすので避けるべき。
vhost.cはマクロについては単純なものしか使っていないので、ポリシーの違いだろうね。
756:デフォルトの名無しさん
08/02/17 07:52:51
正解は753でしたw
757:デフォルトの名無しさん
08/02/17 07:54:54
バカが浮き彫り
758:デフォルトの名無しさん
08/02/17 07:55:28
>>754
いや、俺が言ってる「まとまってる」のは長さじゃなくて、
使う変数の依存関係が閉じた傾向にあるという意味。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5167日前に更新/243 KB
担当:undef