gotoを恐れず使う兵共がfinallyや多重breakを語るスレat TECH
gotoを恐れず使う兵共がfinallyや多重breakを語るスレ - 暇つぶし2ch560:デフォルトの名無しさん
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
いや、俺が言ってる「まとまってる」のは長さじゃなくて、
使う変数の依存関係が閉じた傾向にあるという意味。


759:デフォルトの名無しさん
08/02/17 07:58:17
goto肯定派は実用的なコードから
「ここはこうgotoを使えばもっと綺麗になるのに」
という例を出すつもりはないのかね。

いつでもgoto慎重派にコードを書かせるのは
フェアじゃないと思うのだが?

760:デフォルトの名無しさん
08/02/17 08:04:27
今、>>759 が良い事を言った!
さあ「gotoを恐れずに使う兵共」の腕の見せ所だ!

761:デフォルトの名無しさん
08/02/17 08:23:27
>>758
そうか。閉じた傾向とか何ともいえないのでソースを読んで。

>>759
それこそ全然フェアじゃない。
・「Cで書かれた実用的なプログラムでgotoを一切使っていないもの」が一つも出されていない。
・「ここはこう」の「ここ」を見つけるために、相手にそのプログラム全体を全て読めと?

相手にコードを書かせようと思うなら、題材くらい自分で出せ。


762:デフォルトの名無しさん
08/02/17 08:26:54
ていうか、プログラマとして非常にガッカリなのは、

情報として>>741が出されて、それを題材にしているにも関わらず、
実際にhttpdのソースをダウンロードして自分でソースを追ってみた人が、
ここで議論している人の中に誰もいなそうってところだな。

コードリーディングしない人には、コードを語る資格も能力もないよ。

763:デフォルトの名無しさん
08/02/17 08:40:57
具体論になると机上の空論と違って盛り上がらないねえ

764:デフォルトの名無しさん
08/02/17 08:43:08
>>762>>748>>750は無視ということか。

grep するだけなら楽でいいもんな。プ

765:デフォルトの名無しさん
08/02/17 08:46:32
>>764
750は明らかに749しか読んでいないと思われ。

実際のコードに当たったらこんな発言が疑問形で出るわけがない。

>そもそも「処理」ってくくれるぐらいまとまってるんだろ?

そこに気付かない>>764自身も、他人を煽るだけで自分はコードを読んでいない。


766:デフォルトの名無しさん
08/02/17 08:47:34
強調するが、ここが重要ね。

  そこに気付かない>>764自身も、他人を煽るだけで自分はコードを読んでいない。


767:デフォルトの名無しさん
08/02/17 08:48:47
そういう>>765は手あたり次第grepしただけ。
そうじゃないと言うのなら、
「ここはこうgotoを使えばもっと綺麗になるのに」
という例があるはずだから、それを提示しろ。

できないなら、コード読まない厨認定な。

768:デフォルトの名無しさん
08/02/17 08:49:28
煽ったり議論したりする暇はあるんだから、ついでにちょっとコードも読めばいいのにね。

と思うよ俺は。


769:デフォルトの名無しさん
08/02/17 08:50:04
>>763
一方的に「コード読め」「改善策を出せ」と言うばかりの香具師がいるからな

770:デフォルトの名無しさん
08/02/17 08:50:15
悪魔の証明を知らない人w

771:デフォルトの名無しさん
08/02/17 08:50:37
>>768 オマエガナー wwwwwwwwwwwwwwwwwwwwwwwwww

772:デフォルトの名無しさん
08/02/17 08:52:10
>>770
そうそう。grep厨はコードの断片を見せるだけで
議論は永遠に続くことになるんだよな。アフォらし。

773:デフォルトの名無しさん
08/02/17 09:02:40
強調するが、ここが重要ね。

  そこに気付かない>>766自身も、他人を煽るだけで自分はコードを読んでいない。



774:デフォルトの名無しさん
08/02/17 09:08:42
こういうスレを読んでいると感じるけど
2chって「馬鹿しか得るものがない」場所だよね。

何の知識もない教えて君が相手を煽りながらタダで一方的に情報を得る。
教える側は何故か相手に罵倒されながら一方的に情報を提供して自分は何一つ得るものがない。

なので普通の人は嫌になってすぐに去り
2chに残るのは自己犠牲精神に満ち溢れた聖人と馬鹿だけ。

775:デフォルトの名無しさん
08/02/17 09:24:50
>>774
> 何の知識もない教えて君が相手を煽りながらタダで一方的に情報を得る。

goto厨のことだね。
goto慎重派はちゃんと改善例を提示しているのに
goto厨は文句を言うばかりで何の改善例も提示しない。

776:デフォルトの名無しさん
08/02/17 09:33:40
>>774
たかがgrepしただけでそこまで上から目線で言える根性が気に入った。

>>775
goto肯定派もコード出してるよ。>>469とか。目が腐りそうな糞コードだけど。
ちなみに>>469>>485という形でgotoを使わずに可読性が上がったね。

777:デフォルトの名無しさん
08/02/17 09:35:56
485=774=grepした人=744以降でコード断片を出した人=普通の人なので去ります

778:デフォルトの名無しさん
08/02/17 09:38:20
と言いつつキリ番ゲットした>>777、オメ。

779:デフォルトの名無しさん
08/02/17 09:56:30
777が去った今このスレの運命は776の手腕にかかっている

780:653
08/02/17 10:11:45
6.8
自動記憶域期間をもつオブジェクトの初期化子、(略)は、
文の場合と同じく実行中に宣言に到達するたびにこれを評価し、
値をそのオブジェクトに格納する。

とあるので、gotoで宣言(と初期化)をまたぎこしていると、
初期化はされないとすべきのようです。

また、C99では「可変修飾型をもつオブジェクトの宣言を飛び越しては
ならない」という制限が加わってますね。なるほど。

781:デフォルトの名無しさん
08/02/17 10:37:43
>>776
goto否定派もコード出してるよ。>>267とか。目が腐りそうな糞コードだけど。
ちなみに>>267>>263という形でgotoを使って可読性が上がったね。


782:デフォルトの名無しさん
08/02/17 11:07:56
一人で頑張ってる嫌goto厨。
後輩に得意になって言っちゃったの?
gotoは使うなって。

783:デフォルトの名無しさん
08/02/17 11:12:38
異議あり!代案なーし!
異議あり!代案なーし!
異議あり!代案なーし!


784:デフォルトの名無しさん
08/02/17 11:16:33
>>263>>379で否定されたがね。

  if (A_init() != 0) goto FAILED;
  if (B_init() != 0) 80+0; FAILED:
  if (C_init() != 0) goto FAILED;
  if (D_init() != 0) goto FAlLED;

FAlLED:

しかしまいったね。
・・


785:デフォルトの名無しさん
08/02/17 11:17:33
アホなレス乞食ががんばっていますね

786:デフォルトの名無しさん
08/02/17 11:18:12
>>783
代案?
すべての法律がダメだけどそれを国会議員200人ぽっちで作れるわけないだろ。
社会保険庁ですら数万人いるのに。


787:735
08/02/17 11:18:51
>>735-736はバグってた。
CATCH節の中でthrow_exceptionするとFINALLYが走らない。
こりゃ結構恥ずかしい。インデントも崩れてるし。

788:デフォルトの名無しさん
08/02/17 11:19:23
ほお。

あなたに悪意を持つプログラマが goto を 80+0 と書いて
嫌がらせをするかもしれないから goto を使うべきではない

と。

ヴァァァァァァァァァァァ
ァァァァァァァァァァァ
ァァァァァァァァァァァァァァァァァァァァァァ
ァァァァァァァァァァァカ
じゃねーの?wwwwwwwwwwwwwwwwwwwww

789:デフォルトの名無しさん
08/02/17 11:20:41
どうでもいいけどダイクストラが言ってから今年で40周年か

見事な釣り師だな

790:デフォルトの名無しさん
08/02/17 11:23:18
>>788
森田さんこんなところにいたんですか。

ちなみに80+0と書き換えた森田さんは日常的に2ch語を上司に向かって話す極めつけの2chネラで、
バカジャネーノってAA使いまくりな人。

生まれは九州は福岡のとある会社の社長の息子。


791:デフォルトの名無しさん
08/02/17 11:23:28
「gotoを使うな」の釣り糸一本で
40年間、たぶん何百万人という単位のプログラマを釣りあげてる
恐るべしダイクストラ


792:デフォルトの名無しさん
08/02/17 11:25:34
>>791
大工さんはWhileをgotoで書くなと言っただけじゃね?

goto使いだってwhile使えるところでgotoとか使わないだろ。


793:デフォルトの名無しさん
08/02/17 11:28:53
sage不可能な良スレ

794:デフォルトの名無しさん
08/02/17 11:30:33
>>790
『福岡人はgoto禁止』でいいんじゃね?

795:デフォルトの名無しさん
08/02/17 11:31:49
違うか。森田さんは80+0って書いただけでgotoは書いてないもんな。
『福岡人と仕事するときはgoto禁止』?
いや『福岡人は面接で落とせ』?

796:デフォルトの名無しさん
08/02/17 11:32:40
福岡禁止

797:デフォルトの名無しさん
08/02/17 13:05:02
80+0なんてキーワードハイライトがあれば容易に見抜けないか?
あと、0に斜線が入ったフォント使うとか(0とoのような個別の事例にしか使えないけど)。

798:デフォルトの名無しさん
08/02/17 13:26:42
>>797
いやそれがね、うちの会社、ウィルスバスターが更新しないように、インストーラーに手を加えた上でウィルス感染させやがるんですよ。
イントラネット管理者の統括してる本人がやるから信用しちゃうでしょ。
福岡に本社のある東京一部上場企業なんだけど。

だからエディタにキーワード追加くらい簡単にやってのけるよ。


799:デフォルトの名無しさん
08/02/17 13:39:04
もはや798が質の悪い吊りだと見抜く方が容易

800:デフォルトの名無しさん
08/02/17 13:41:59
>>797
つうか字形が違いすぎてしばらく話の流れが全く理解できなかったよ

801:デフォルトの名無しさん
08/02/17 14:10:20
じゃあ次、コンパイラで使われていないラベルに対して警告を出すようにする。

802:デフォルトの名無しさん
08/02/17 14:58:28
>>798
電子計算機損壊等業務妨害 で告訴しろ。
(告訴状作って会社の法務部に送りつけるだけでも効果あるぞ)

803:デフォルトの名無しさん
08/02/17 15:07:57
>>802
人事部に電話したら、「会社の方針でお前を監視してるんだから逆らうな」って言われたから。
人事部長と直接話したいって言ったけど無視された。
会社クビにされるときに人事部長を名乗る人が来たけど、なんと創価学会の池田先生に瓜二つ。

804:デフォルトの名無しさん
08/02/17 15:16:56
>>803
こちらへどうぞ
スレリンク(prog板)

805:デフォルトの名無しさん
08/02/17 15:26:19
>>803
「他人にいたずらされている」という妄想を抱いて、「なら反撃で、いたずら
し返さなければ」とイタズラして、会社側から疑いをかけられて監視されて、
あげくのはてにイタズラしていたことがバレてクビになった。

としか、文章からは読み取れない。

806:デフォルトの名無しさん
08/02/17 15:58:23
むしろメンヘル逝きをお勧めしたい。

807:デフォルトの名無しさん
08/02/17 16:30:11
結局大工は釣りだとかいう観念論しかできないんだねw

808:デフォルトの名無しさん
08/02/17 17:20:45
いくら上げても技術要素0%のレスで火は起こせないか

809:645
08/02/17 20:42:55
気になったので、gccでやってみた

void bar(int);
int func(int arg)
{
if(arg == 0)
goto foo;

{
int i;
i = arg*2;
foo:
bar(i);
}

}


810:645
08/02/17 20:43:39
.file "gototest.cpp"
.text
.align 2
.globl __Z4funci
.def __Z4funci; .scl 2; .type 32; .endef
__Z4funci:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
cmpl $0, 8(%ebp)
jne L2
jmp L3
L2:
movl 8(%ebp), %eax
addl %eax, %eax
movl %eax, -4(%ebp)
L3:
movl -4(%ebp), %eax
movl %eax, (%esp)
call __Z3bari
leave
ret
.def __Z3bari; .scl 2; .type 32; .endef

こうなる。
やはりiは確保されません。

811:デフォルトの名無しさん
08/02/17 20:48:02
>>810
goto使うなっての以上に、ブロックで変数定義するなってのもある。


しかし、オブジェクトはその場所で作るしかないんだな。


812:デフォルトの名無しさん
08/02/17 21:33:13
だからレジスタに割り当てられてるんじゃないの?

813:デフォルトの名無しさん
08/02/17 21:44:22
>>812
たった4つの32ビットレジスタで計算しないといけないのにそんな無駄なことできないでしょ。
少なくとも何かをするとしたらレジスタを使う。
やるとしても小さいループのループカウンタくらいか。


814:デフォルトの名無しさん
08/02/17 21:47:27
goto fooすりゃi=arg*2が実行されないのは当然ダロ
何を期待してんのかわからn

815:デフォルトの名無しさん
08/02/17 21:58:11
>>813
内側のブロックで宣言できないとしたら、
外側のブロックで宣言するだけ。
実態としては何も変わらない。

816:645
08/02/17 22:02:54
>>814
ああ、テキトーに作った例だから、実際の動作は気にしないでくれ。
問題は、ブロックの中で定義した変数の領域が確保されていないのに、関数呼び出しに使われてしまうという事実ね。
多分、foo: の後にi = i+argなんてやってもダメだと思う。

817:デフォルトの名無しさん
08/02/17 22:03:51
>>816
ヒント: jne L2 が実行された場合は L2 のどこで「領域が確保」されていますか?


818:645
08/02/17 22:04:03
809のiの定義の後でiに代入してるのはコンパイラにiの定義をスルーさせないように、それらしい仕事をさせたかったから。

819:645
08/02/17 22:04:41
>>817
ああ、別にされてないね。


820:デフォルトの名無しさん
08/02/17 22:26:56
データフロー解析ぐらいは最近のコンパイラなら当たり前だよ?
ガチガチにソースコードに対応するようなコードを吐いて欲しいなら
-O0 を付けるとか...してもそこまでガチガチなコードが出るかどうか。

821:デフォルトの名無しさん
08/02/17 22:28:40
>>820
そういう問題じゃない。出ているコードは綺麗にソースに対応している

822:デフォルトの名無しさん
08/02/17 22:46:57
スタックフレームが
>subl $8, %esp
で8バイト確保されていて
iが
>-4(%ebp)
なら、関数の先頭で「確保」されてるんじゃね?

823:デフォルトの名無しさん
08/02/17 22:48:59
>>822
正解

824:デフォルトの名無しさん
08/02/18 02:57:19
>>811
>goto使うなっての以上に、ブロックで変数定義するなってのもある。

いやこれはするだろ。
あれ、みんなしない派?

825:デフォルトの名無しさん
08/02/18 03:21:11
俺は、近くで定義したい派。
ブロック内で変数定義することはある。
ただ、外の変数と名前がかぶらないほうがいいかなぁ~、くらいは気を使う。

826:デフォルトの名無しさん
08/02/18 08:18:56
普通は最小スコープ(内側のスコープ)で定義するのが常識

827:デフォルトの名無しさん
08/02/18 09:06:07
それ厳密に適用するととんでもないことに

828:デフォルトの名無しさん
08/02/18 09:25:19
手続き的にやろうとするから、変数を外のスコープにひっぱり出すとかが
必要になる。関数的に、なんでも再帰あちこちでreturnな書き方をすれば
それでうまくいく。

829:デフォルトの名無しさん
08/02/18 12:26:48
>なんでも再帰あちこちでreturn
吊り?

830:デフォルトの名無しさん
08/02/20 16:00:57
>>813
そんな特定のアーキテクチャに依存した話を突然持ち出されてもねえ、、、

831:デフォルトの名無しさん
08/02/20 16:07:36
>>829
> >なんでも再帰あちこちでreturn
> 吊り?

釣りでもなんでもない。ifやswitchが文でなく式なら、

return if (hoge) true else false;

みたいに書けるのに(3項演算子は可読性が低いから却下)、
そうでないから、

if (hoge) return true; else return false;

というように書かざるをえない、ってだけ。

832:デフォルトの名無しさん
08/02/20 17:15:50
3項演算子に対する嫌悪感って goto のそれに似たものがあるな

833:デフォルトの名無しさん
08/02/20 17:18:18
3項演算子とgotoじゃ全然違うだろ・・・これだからgoto厨は・・・

834:デフォルトの名無しさん
08/02/20 18:46:16
3項演算子はネストしない限りif文よりも可読性高い場合もあるだろ
特に>>831のような単純な分岐の場合は。どうせ見た目で毛嫌いして
るだけだろうけど。

835:デフォルトの名無しさん
08/02/20 18:48:46
>>834
ネストしたって適切なカッコさえつければ問題ないだろ。
特に>>831の場合には積極的に3項演算子を使うべき箇所と思われ。

836:デフォルトの名無しさん
08/02/20 18:56:34
それは再帰とは呼ばない。
ということだけは覚えてほしい

837:デフォルトの名無しさん
08/02/20 18:59:35
if 文のみで書こうとすると異常にネスティングが増えるケースについて
3項演算子をif文とともに使って、ネスティングを削減すると、コードがすっきりするので好きだ。

838:デフォルトの名無しさん
08/02/20 19:16:21
例えばループで書くと

foo() {
 cond = true
 while (cond) {
  ・・・
   ・・・
    if (...) {
     cond = false
    }
   ・・・
  ・・・
 }
}

みたいな構造で、condのようなスコープの広い変数が
必要になるのが、再帰で処理するように書き直せば、

foo() {
 ・・・
  ・・・
   if (!...) {
    foo()
   }
  ・・・
 ・・・
}

で済む、かもしれない、ってこと。

839:デフォルトの名無しさん
08/02/20 19:19:27
>>836
再帰かどうかが、returnがif文の中か3項演算子の外かで左右されるとでも?

840:デフォルトの名無しさん
08/02/20 19:33:38
>>838
でっていう

841:デフォルトの名無しさん
08/02/20 19:48:45
>>838
いや、皆が問題にしてるのはそういうことではなく
while (cond) {
  int i;
  ....
}
みたいなスタック操作の無駄のことと思われ。

842:デフォルトの名無しさん
08/02/20 21:19:37
末尾再帰でもないのに、それは・・・

843:デフォルトの名無しさん
08/02/20 22:22:30
>>838
foo() {
 cond = true;
 while (cond) {
  s1;s2;
    if (...) {cond = false}
  s3;s4;
 }
}
これは、condが2回目のループでfalseになるとすると、
s1,s2,s3,s4,s1,s2,s3,s4の順で実行される。
で、
foo() {
 s1;s2;
 if (!...) {foo();}
 s3;s4;
}
これは、2回目のループで(!...)がfalseになるとすると、
s1,s2,s1,s2,s3,s4,s3,s4で実行されるから順番が変わる。そこでs3;s4をifの前に持ってくるわけだ。
すると、
foo() {
_loop:
 s1;s2;s3;s4
 if(...) goto _loop;
}

みんな末尾再帰でgoto使う?


844:デフォルトの名無しさん
08/02/20 22:24:12
末尾再帰をgotoにするのはコンパイラのお仕事。

845:デフォルトの名無しさん
08/02/21 02:28:28
再帰使うならgotoはいらん。
(再帰を中断するときには使うかもしれん)

846:デフォルトの名無しさん
08/02/21 05:40:03
つかそれはdo{}while(..);

847:デフォルトの名無しさん
08/02/21 07:36:46
>>843が全然末尾再帰になっていない件について

848:goto使わなければそれがいい派
08/02/21 10:34:02
>>751
まあ、そういうコードが含まれているプログラムの中には
脆弱性だのバグだのいっぱい含まれているものだ。

 セキュリティについて、潔癖で有名なDJBですら、結構gotoを
多くつかう。 まったく使わないで終わらせた作品としては
は、比較的私家版パッチの突っ込みが少ない publicfile くらい。
後は山のようにgoto文があってDJBは嫌いだという人間もいる。

849:デフォルトの名無しさん
08/02/21 10:37:28
>>841
{} がつくと何でも変数スコープを狭く取りたがるつか、
同じ変数を使いまわしてもバグにならないというか、
単たる手抜きか。

850:デフォルトの名無しさん
08/02/21 14:08:08
pascalみたいに手続きの最初で全部まとめて宣言しろ

851:デフォルトの名無しさん
08/02/21 15:58:33
>>841
それも違うだろ。それくらい最適化でどうにでもできる。

852:デフォルトの名無しさん
08/02/21 20:22:54
>>845
ハァ?再帰からgotoで抜けるだぁ?
これだからgoto厨は…

853:デフォルトの名無しさん
08/02/21 21:49:55
再帰からgotoどころかlongjmpだってしちゃうぜ!

854:デフォルトの名無しさん
08/02/21 21:59:56
よーし、俺はexitだ。

855:デフォルトの名無しさん
08/02/21 22:41:57
いいこと思いついた。
お前ら俺のプログラムのケツにストリームデータ流し込んで実行してみろ。


856:デフォルトの名無しさん
08/02/21 22:50:35
>>855
えっ!お前のケツにすとりーむでーtlk;ghklj;

857:デフォルトの名無しさん
08/02/22 07:15:04
>>851
そんな最適化をされたらデストラクタロギングが使えなくなるじゃないか!!

858:デフォルトの名無しさん
08/02/22 13:10:22
>>857
コンストラクタ・デストラクタが呼ばれなくなるような最適化なんて行われるわけないだろ。
少なくともC++では。

859:デフォルトの名無しさん
08/02/22 19:14:27
いずれ呼ばれるにしても、呼ばれるタイミングは変わるかもよ?

860:デフォルトの名無しさん
08/02/22 22:05:58
>>859
どこの規格無視コンパイラだ?

861:デフォルトの名無しさん
08/02/22 23:47:10
gotoを使う想定でロジックを組むなら、それを分かりやすく図示する方法を発明してから
にしてほしい。そうじゃないとレビューする気にもなれない。
ここで出たようなgotoを使った書き直しの例なら、gotoを使ってないロジックを例えば
NSチャートとかで書いた方が、とてもとても分かりやすくて人にも説明し安いだろう。

チームメイトにロジックを説明するようにお願いてフローチャートをもってこられたら、
とりあえずバケツもって廊下に立っててくれるようにお願いしちゃうな。
システムが使われなくなるまでその人が死なずに内容も忘れずに保守するってのが保証さ
れてたとしても、仕事ではそんなロジックは受け入れ難いな。

だいたい現実的にgotoを使った方が良い場合ってのが、想定しづらい。
リソースだのコードサイズだののためのためにgotoを使うってのは、やらないと用件が
満たせないからって理由で、設計とかコーディングとかのさらに後に最適化フェーズを
設けてそこでやるんなら認めなくもないが、元からgotoを使うのが正しい場合なんての
を考慮しながらロジックを考えるような人とは一緒に仕事はできないなぁと思う。

なんでそんな書き方になってるか説明するための資料も作んないといけないし、仕事が
増えるばっかりだ。段階的抽象化とか物事を整理するとかに興味がないかできない人な
んだなとしか思えない。

誰かが事故にあってもリカバリがきくような状態を維持しようと思ったら、少しくらい
冗長になっても、なるべくわかりやすい設計&実装にしたいって思うのは普通だと思う
んだがなぁ。


862:デフォルトの名無しさん
08/02/22 23:56:49
わたしはソース読み力がありません。

まで読んだ。

863:デフォルトの名無しさん
08/02/23 06:15:25
>>862>>861を読む力がありません

まで読んだ。

864:デフォルトの名無しさん
08/02/23 06:38:46
resource *hoge(int arg) /*失敗でNULL、成功でリソース(p4)を返す*/
{
 resorce *p1 = NULL,*p2 = NULL,*p3 = NULL, *p4 = NULL;

 p1 = GetResource1(arg); /* GetResoruce*は失敗した時にNULLを返す */
 if(!p1) goto failed;
 処理1
 p2 = GetResource2(p1);
 if(!p2) goto failed;
 処理2
 p3 = GetResource3(p1,p2);
 if(!p3) goto failed;
 処理3
 p4 = GetResource4(p3);
 if(!p4) goto failed;
 処理4

 FreeResource(p3);
 FreeResource(p2);
 FreeResource(p1);
 return p4;
failed:
 if(p4) FreeResource4(p4);
 if(p3) FreeResource3(p3);
 if(p2) FreeResource2(p2);
 if(p1) FreeResource1(p1);
 return NULL;
}

これgoto使わないとどう書く?もちろんスマートポインタ、GC、例外は使用不可。

865:デフォルトの名無しさん
08/02/23 06:43:29
>>864
もうそれ飽きた。いいかげん空気読め、アフォ。

866:デフォルトの名無しさん
08/02/23 06:45:43
各GetResourceの前にifつけてやって、
処理4

867:デフォルトの名無しさん
08/02/23 06:52:11
p1 = GetResource1(arg);
if(p1) {
 処理1
 p2 = GetResource2(p1);
 if(p2) {
  処理2
  p3 = GetResource3(p1,p2);
  if(p3) {
   処理3
   p4 = GetResource4(p3);
   if(p4) {
    処理4
   }
  }
 }
}
if (p3) FreeResource(p3);
if (p2) FreeResource(p2);
if (p1) FreeResource(p1);
return p4;


868:デフォルトの名無しさん
08/02/23 06:58:18
俺の感覚だと、読んだだけで「ああ失敗なんだな」って分かる>>864のが好きなんだよね。
あとネストが深くならないのが。

869:デフォルトの名無しさん
08/02/23 07:02:22
>>868
処理そのものがネスト構造になっているんだから、
コードもネストしたほうが実態がわかっていいんじゃねーの?

870:デフォルトの名無しさん
08/02/23 07:03:52
>>863
なにがそんなに悔しいの?

871:デフォルトの名無しさん
08/02/23 07:05:33
↓いつものgdgdな展開へ・・・

872:デフォルトの名無しさん
08/02/23 07:05:36
>>869
なるほどねー。

>>870
いや別に。リソース確保でネストさせるのが嫌いだってだけで。

873:デフォルトの名無しさん
08/02/23 07:07:28
自演シッパイ、オツwwww

874:デフォルトの名無しさん
08/02/23 07:08:19
gdgdだな

875:デフォルトの名無しさん
08/02/23 07:08:50
>>872
リソース確保の条件がネストしているのだから、
コードもネストしたほうが実態がわかっていいんじゃねーの?

876:デフォルトの名無しさん
08/02/23 07:09:53
アンカー打ち間違える奴は、gotoでもラベル打ち間違えるに決まってる件について。

877:デフォルトの名無しさん
08/02/23 07:10:19
>>875
なるほどねー。

878:デフォルトの名無しさん
08/02/23 07:11:50
>>876
>>870>>863>>869に読み間違えてたわwww

879:デフォルトの名無しさん
08/02/23 07:12:06
処理1~3にもよるだろう。
短いならいいけど、長ければネストしたくないって人もいるだろう。
あと、エラーならその場で関数から抜けたいタイプのひともいるし、
あれだけじゃなんとも。

880:デフォルトの名無しさん
08/02/23 07:12:17
あ、上の>>869>>868ねwwwww

881:デフォルトの名無しさん
08/02/23 07:13:09
わざとだろwwww

882:デフォルトの名無しさん
08/02/23 07:14:03
>>881
>>878>>880はねwwww読み間違えてたのはホント。

883:デフォルトの名無しさん
08/02/23 07:14:41
gdgdだーwww

884:デフォルトの名無しさん
08/02/23 07:15:37
>>879
ネストしたくなきゃ、
if (p1 && p2 && ...) {
とすればいいだけなんじゃ?

885:デフォルトの名無しさん
08/02/23 07:19:58
>>879
たった3つの解放だけなんだから、解放をマクロにしちゃって
goto failedのかわりにFreeAll; return NULL;しちゃってもいいな。

いずれにせよ、このネタはもうイトフユだろ。

886:デフォルトの名無しさん
08/02/23 07:47:58
ネストするなとか、あいかわらず後出しジャンケンなんだね、goto厨は…
まあその後出しジャンケンも>>885で残念賞なわけだがw

887:デフォルトの名無しさん
08/02/23 07:52:42
↑と、ここまでいつものgdgdな展開ですた。

888:デフォルトの名無しさん
08/02/23 08:06:03
嫌goto厨は「異議あり対案なし」であることが証明されました。

889:デフォルトの名無しさん
08/02/23 08:25:52
>>882
リアルでアンカー読み違える香具師がgotoを使うのは

キ チ ガ イ に 刃 物

890:デフォルトの名無しさん
08/02/23 08:27:06
>>888
gotoを使わない対案ならこの短い間に3つも出ましたが何か?

891:デフォルトの名無しさん
08/02/23 08:31:07
「出る」と「出す」の違いくらいわかってもいいとおもうぞ。

892:デフォルトの名無しさん
08/02/23 08:47:16
>>891
おいおい、>>888の主語は「嫌goto厨は」なんだから、
gotoを使わない対案が出ていればそれで十分に反証になるだろw

893:デフォルトの名無しさん
08/02/23 09:25:38
自分の他人の区別さえつかないのか、かわいそうに。

894:デフォルトの名無しさん
08/02/23 09:32:55
他人が書こうが誰が書こうがgotoを使わない対案であることに何の変わりもないが?

895:デフォルトの名無しさん
08/02/23 09:37:31
嫌goto厨は「異議あり対案なし」であることが証明されました。

896:デフォルトの名無しさん
08/02/23 09:58:53
>>895
gotoを使わない対案ならこの短い間に3つも出ましたが何か?

897:デフォルトの名無しさん
08/02/23 10:01:08
それがなにか?

898:デフォルトの名無しさん
08/02/23 10:06:18
いいよ~gdgdいいよ~

899:デフォルトの名無しさん
08/02/23 10:09:56
864のgotoは不要ということで。

900:デフォルトの名無しさん
08/02/23 10:39:25
俺の感覚だと、見た瞬間に 864>>>867 なんだがなあ。

えーとさ。FAILEDっていうラベルの存在自体が

「物凄くソースコードの見通しを良くする、これ以上無い最高のコメント」

だと思うんだよ。

901:デフォルトの名無しさん
08/02/23 10:51:29
>>900=>>864 オツw

902:デフォルトの名無しさん
08/02/23 10:55:29
>>901
goto派が一人しかいないと思ってるなら、
君はたった一人のgoto厨に向かって何を必死に反論しているのかしら?w


903:デフォルトの名無しさん
08/02/23 10:59:26
goto派が一人しかいないなんて話、どこの脳内議論から降ってきたのだろうか・・・
脳ミソがスパゲッティになってるんじゃないの?

904:デフォルトの名無しさん
08/02/23 11:00:48
ラベルに適切な英語名を振れない低学歴が吠えてるだけ

905:デフォルトの名無しさん
08/02/23 11:02:13
1000までgdgd

906:デフォルトの名無しさん
08/02/23 11:05:46
>>900
FAILEDなんてラベル、>>864にはないんだけど・・・
ラベルも扱えない香具師がgotoを使うのは

キ チ ガ イ に 刃 物

907:デフォルトの名無しさん
08/02/23 11:06:50
すげぇ、TYPOも許容しないほどの厳格な議論なのかと思ったら
ただの罵り合いじゃん。

908:デフォルトの名無しさん
08/02/23 11:08:20
gotoを適切に使うことで見通しよく書けているコードなど
オープンソースソフトウェアを少し読めばいくらでも見つかるし
まともなプログラマならばgotoを使うべきコードパターンというのを
イディオムとして持っている



業務の中で頭の固い奴を説き伏せてまで良いコードを書こうとは
思わないので仕事では適当にwhileやifをネストさせてその場限りの
コードをぐちゃぐちゃに書く。保守性など知らない
とりあえず「見た目上構造化」しておけばよいのだからそれ以上
考えても無駄無駄無駄。所詮は仕事

909:デフォルトの名無しさん
08/02/23 11:11:14
>>908
ifをネストさせない対案も複数出ているが?

さあ、今度はどんな条件を後出しするのかなwwwwwww

910:デフォルトの名無しさん
08/02/23 11:11:36
という思想で書き散らかされたプログラムに
腐れUMLと自動生成された糞doc、スパイスとして捏造されたテスト報告書をくっつければ

ほら高品質ソフトウェアの出来上がりでござい

911:デフォルトの名無しさん
08/02/23 11:14:22
if (p1 && p2 && ...) {
馬鹿馬鹿しく肥大化した分岐条件

goto failedのかわりにFreeAll; return NULL;
馬鹿が思いつきで定義する糞マクロ

イイヨイイヨー

912:デフォルトの名無しさん
08/02/23 11:26:33
>>861
>誰かが事故にあってもリカバリがきくような状態を維持しようと思ったら、少しくらい
>冗長になっても、なるべくわかりやすい設計&実装にしたいって思うのは普通だと思う
>んだがなぁ。
設計については正しい。
だが
実装については正しくない。

そしてここは実装について話すスレだよ。

913:デフォルトの名無しさん
08/02/23 11:30:38
goto厨のオナニースレなんだから、まともな論理は通用しないよ > goto自重派

914:デフォルトの名無しさん
08/02/23 11:31:51
>>908
その場かぎりのgotoでグチャグチャになってる>>864にどんな保守性を期待してるのやら。
他人のコードレビュー受けたことないでしょ、君は。

915:デフォルトの名無しさん
08/02/23 11:33:01
>>908
> まともなプログラマならばgotoを使うべきコードパターンというのを
> イディオムとして持っている

それが他人に読まれた時にどんな混乱をもたらすか
考えたこともないのがgoto厨クオリティ

916:デフォルトの名無しさん
08/02/23 11:36:59
whileやifがネストしただけで混乱するようなプログラミング初心者がgotoを使うのは

キ チ ガ イ に 刃 物

917:デフォルトの名無しさん
08/02/23 11:38:50
>>876
> 876 名前:デフォルトの名無しさん [sage]: 2008/02/23(土) 07:09:53
> アンカー打ち間違える奴は、gotoでもラベル打ち間違えるに決まってる件について。

> 900 名前:デフォルトの名無しさん [sage]: 2008/02/23(土) 10:39:25
> えーとさ。FAILEDっていうラベルの存在自体が

まさにご名答。先見の明がありますな。
どこぞの後出しジャンケンと大違い。

918:デフォルトの名無しさん
08/02/23 11:49:14
だめだここはれべるがひくい

919:デフォルトの名無しさん
08/02/23 11:50:45
864 finally使え

920:デフォルトの名無しさん
08/02/23 11:53:47
>>919 正解ですな。
finallyはスマートポインタ、GC、例外ではないからねえw

921:デフォルトの名無しさん
08/02/23 12:03:48
大域脱出と例外処理には使うかな。
使わなくても書けるけど、特に宗教が無ければ使うよね普通。

922:デフォルトの名無しさん
08/02/23 12:06:04
>>864
p1からp3まで格納するオブジェクトをつくって、
デストラクタでp1からp3を解放しろ。

ところで
> failed:
> if (p4) FreeResource4(p4);
これは何の冗談だ?p4はNULLなはずだが?

923:デフォルトの名無しさん
08/02/23 12:07:23
>>921 特に宗教が無ければそういうのを「例外処理」とは呼ばないよね普通。

924:デフォルトの名無しさん
08/02/23 12:07:24
あさってのほうこうをむいているぞきみは

925:デフォルトの名無しさん
08/02/23 12:11:13
>>283
そうやって評論家ばかり集まって何も生み出さないから日本は駄目なんだよ


926:デフォルトの名無しさん
08/02/23 12:11:33
>>922
ほんと、>>867のように書いてみれば、failed:に来た場合p4はNULLだということに気付くはずなのに、
ツギハギだらけの思考で書いたんだろうな、>>864は。

927:デフォルトの名無しさん
08/02/23 12:11:39
誤爆

928:デフォルトの名無しさん
08/02/23 12:13:43
誤爆だが、このスレの実情を的確に表現した名文だ。

929:デフォルトの名無しさん
08/02/23 12:18:21
goto乱用厨が出すコード例はほとんどgoto慎重派によって対案が出されている。
なのにgoto乱用厨は次から次へとほとんど同じようなコードを出してくる。
>>864のパターンはこのスレだけでも何度も出てきている。
いくら対案を出しても、
「オプソ探せばいくらでも例はあるモン、goto使ったほうがいいモン」
と言って駄々をこねる。

結論: goto乱用厨=ゆとり脳。

930:デフォルトの名無しさん
08/02/23 12:23:10
その対案は改善でなく改悪だという意見が何度も出ていますが?

931:デフォルトの名無しさん
08/02/23 12:26:34
tesu

932:デフォルトの名無しさん
08/02/23 12:28:14
>>930
アンカー打ちまちがえたりラベル打ちまちがえたりする
オッチョコチョイさんからねwww

933:デフォルトの名無しさん
08/02/23 12:28:46
p4 = GetResource4(p3);
のあとlこ
if (p4) FreeResource(p4);
が書かれていない件


934:デフォルトの名無しさん
08/02/23 12:31:05
>>933
へえお前はfreeしたポインタを返すのか。なかなか凄いな

935:デフォルトの名無しさん
08/02/23 12:32:28
ここで結局932のような攻撃しかこないのが駄目
内容のある議論の入口にすら立てない

936:デフォルトの名無しさん
08/02/23 12:35:20
相手の技量もわからず内容のある議論ができるわけもなし
933みたいな素人が知ったかぶりで自説を語るのが2ch

937:デフォルトの名無しさん
08/02/23 12:36:08
ところで
> failed:
> if (p4) FreeResource4(p4);
これは何の冗談だ?p4はNULLなはずだが?


938:デフォルトの名無しさん
08/02/23 12:36:27
まぁ、そんなスレもそろそろ終盤。
うめ。

939:デフォルトの名無しさん
08/02/23 12:36:52
恥ずかしい間違いを指摘されても別人のふりで再登場だしな
実際このスレもせいぜい4,5人の素人が回してるだけだろ

940:デフォルトの名無しさん
08/02/23 12:36:52
>>934
それがgoto厨クオリティ

941:デフォルトの名無しさん
08/02/23 12:39:03
goto 禁止 とか適当なキーワードでぐぐれば
このスレを読む1%の労力でこのスレを読む100倍の内容が得られる

942:デフォルトの名無しさん
08/02/23 12:39:11
>>930
finallyについては?
デストラクタについては?

さあ、finallyやデストラクタを使った方法が改悪だというレスへのアンカー示してみろよ。

943:デフォルトの名無しさん
08/02/23 12:40:19
>>942
例外やスマートポインタやGC禁止って言ってるところで
finallyだのデストラクタだの、なぞなぞはお前のガキ相手にやってろ

944:デフォルトの名無しさん
08/02/23 12:41:37
>>930
余計なif (p4) FreeResource(p4);が消えた点だけでも
>>867>>864よりも優れているが?

945:デフォルトの名無しさん
08/02/23 12:42:34
>>943
あのー、finallyは例外でもスマートポインタでもGCでもないんですがwww
君、プログラミング言語に関する知識が決定的に不足してるんじゃない?

946:デフォルトの名無しさん
08/02/23 12:44:24
>>944
ありうる状態や制御の流れについての理解を促すというのも
構造化プログラミングの利点の1つだな。
簡単にgotoに逃げちまうと>>864のようなお粗末なコードになる。

947:デフォルトの名無しさん
08/02/23 12:44:47
>>945
例外処理機構を備えていなくてfinallyだけ持っている言語を挙げよ

948:デフォルトの名無しさん
08/02/23 12:46:26
>>943
アンカー示せないわけね。
まあ示してもどうせまた打ち間違えるだろうけど。

949:デフォルトの名無しさん
08/02/23 12:46:35
945は947に対して逃げて次は別人のふり

950:デフォルトの名無しさん
08/02/23 12:47:20
>>947
単に現代的な言語なら例外もfinallyも持ってるというだけの話だろ。
何をマヌケな事をぬかしているのやら…

951:デフォルトの名無しさん
08/02/23 12:48:12
>>949 他人がみな自分と同じ行動を取るとは限らないのだよ、おマヌケさんw

952:デフォルトの名無しさん
08/02/23 12:48:53
throwしなければ例外「は」使っていないからfinallyはいいじゃん

とかね。
finallyやデストラクタと言った奴は軽いネタだったと思うんだが
ネタがネタとして扱われない議論厨の厨っぷりに呆然

953:デフォルトの名無しさん
08/02/23 12:54:20
>>952
finallyと例外機構は実装としてほとんど独立なんだけど…
実際、finally句が実行されるのは例外の時だけじゃないし。
try…catchとの類似で混同してる人が多いけど。

gotoたまに使う派として恥かしいんでROMやめてレスしてみた。

954:デフォルトの名無しさん
08/02/23 12:55:17
>>951
そんなのはどうでもいいよ。
問題なのは945(か他の誰かでもいいけどさ)が
947 に正面から答えられるかどうかだけ。

だいたい、945がちゃんと知識を持って書いてるなら、
そういう言語をすぐに答えれば逆に俺が大恥を書くことになる。

実は何の知識も無いくせに知ったかぶりで煽ってるから
すぐにケツをまくって格好悪く逃るハメになるのさ。

955:デフォルトの名無しさん
08/02/23 12:55:59
しかし、マジレスが浮かばれないスレなので、それも燃料にされてしまう悲しさ・・・
↓具体化してください、どーぞ。

956:デフォルトの名無しさん
08/02/23 12:58:28
次スレ
スレリンク(tech板)


957:デフォルトの名無しさん
08/02/23 12:58:42
↑具が大きい

958:デフォルトの名無しさん
08/02/23 13:00:03
>>954
まあ落ち着いて>>950でも読んでみたら?

959:デフォルトの名無しさん
08/02/23 13:00:38
もう技術的な話は出尽くしていて後は
2chリロードするしか生きがいのないクズどもが
goto使う・使わない人間の人間性叩きしかやってないし
次はマ板でやれよ。

960:デフォルトの名無しさん
08/02/23 13:01:57
いろんな文法の変更を試している人がいるから、その中のひとつとして考えてみる

961:デフォルトの名無しさん
08/02/23 13:02:39
tesu

962:デフォルトの名無しさん
08/02/23 13:03:11
gotoは何も悪くない。
悪いのはラベルだ。

963:デフォルトの名無しさん
08/02/23 13:03:22
>>958
「例外もfinallyも持っている言語で>>864のようなコードを書くこと」

について議論してたの?

964:デフォルトの名無しさん
08/02/23 13:03:59
技術的な話はあめぞうが生まれる前から出尽くしているような気が。

965:デフォルトの名無しさん
08/02/23 13:04:03
次スレ
スレリンク(tech板)


966:デフォルトの名無しさん
08/02/23 13:06:59
>>963
わざわざ具体的な例を挙げて「使用不可」と断りを入れてるぐらいだから、
そこに挙げられていないものはデフォルト使用可なんじゃねーの?

いいかげんにしないとまた「条件後付け」と指摘されるぞw

967:デフォルトの名無しさん
08/02/23 13:08:31
まあこのスレの大半の奴はgoto行番号でプログラムを書いた経験なんてないだろ?
構造化以前を実体験として知らない年代の人がgoto議論なんてするもんじゃないよ。
それは別にレベルの高い低いじゃなくて、時代が違うというだけ。

968:デフォルトの名無しさん
08/02/23 13:11:34
代入を恐れず使う兵共が継続やモナドを語るスレきぼんぬ

969:デフォルトの名無しさん
08/02/23 13:12:46
>>966
わざわざ例外だのGCだのと言うぐらいだから、
少なくともC限定の話だとは思えないよな。

970:デフォルトの名無しさん
08/02/23 13:15:05
while文を恐れず使う兵共が再帰やgotoを語るスレきぼんぬ。

971:デフォルトの名無しさん
08/02/23 13:15:25
forやwhileも十分見通しが悪い再帰で書け

972:デフォルトの名無しさん
08/02/23 13:15:53
安易に破壊的代入を使う奴は素人

973:デフォルトの名無しさん
08/02/23 13:16:25
忘れられたデストラクタたん、かわいそス

974:デフォルトの名無しさん
08/02/23 13:16:37
ここはひとつmapで。

975:デフォルトの名無しさん
08/02/23 13:18:20
急にム板らしくなってきた

976:デフォルトの名無しさん
08/02/23 13:25:26
tes

977:デフォルトの名無しさん
08/02/23 13:26:34
goto hell;

978:デフォルトの名無しさん
08/02/23 13:28:16
hell:
goto heaven;

979:デフォルトの名無しさん
08/02/23 13:29:55
>>963
スレタイ読め。
このスレは、finallyや多重breakを語るスレだ。
finallyを対案に使って何が悪い?

980:デフォルトの名無しさん
08/02/23 13:32:28
てs

981:デフォルトの名無しさん
08/02/23 13:34:50
g-gg-g-gg-g-gg-gg--

982:デフォルトの名無しさん
08/02/23 13:40:48
>>979 それは正論だがもう遅い。皆帰ってしまったよ。

983:デフォルトの名無しさん
08/02/23 13:42:09
goto jail

984:デフォルトの名無しさん
08/02/23 13:44:18
goto mental_hospital;

985:デフォルトの名無しさん
08/02/23 13:45:59
それは元ネタがわからん

986:デフォルトの名無しさん
08/02/23 14:16:01
ってst

987:デフォルトの名無しさん
08/02/23 14:18:12
>>967
あるよ。
でも「構造化以前に開発経験のある者」に限定するなら、レスの98%位が不合格だ。
今現在もコードを書いている人間が語るから面白いのさ。

988:デフォルトの名無しさん
08/02/23 14:22:40
俺も行番号でgotoとか書いていたし、現在でもコードを書いているが、
このスレの99%のレスは落第だと思うな。

989:デフォルトの名無しさん
08/02/23 14:24:30
生め

990:デフォルトの名無しさん
08/02/23 14:25:42
関数って考えがなかったからな
サブルーチンはgotoかgosubでしか実装できなかったろ

991:デフォルトの名無しさん
08/02/23 14:31:29
>>990
でもNEXT J, Iとかはあったな。うめ。

992:デフォルトの名無しさん
08/02/23 14:34:04
gosubは理解するのに時間かかったな・・・

993:デフォルトの名無しさん
08/02/23 14:34:04
test

994: ◆.CzKQna1OU
08/02/23 14:34:33
te

995:デフォルトの名無しさん
08/02/23 14:34:59
俺は次すれでもthrowしまくるぜ

996: ◆84g/KG3Nug
08/02/23 14:35:11
st

997:デフォルトの名無しさん
08/02/23 14:35:17
DEF FUNみたいのもあったな。方言か?うめ

998:デフォルトの名無しさん
08/02/23 14:35:41
next

999:デフォルトの名無しさん
08/02/23 14:36:01
.

1000:デフォルトの名無しさん
08/02/23 14:36:20
goto 1

1001:1001
Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch