パスワードを忘れた? アカウント作成
11918380 story
プログラミング

C言語の開発者によるgoto文の使い方を対象とした実証研究の結果、「goto文は無害だと考えられる」 106

ストーリー by headless
無害 部門より
 Edsger Dijkstragoto196850goto使Dijkstragoto使/.
 
/.Empirical Study On How C Devs Use Goto In Practice Says "Not Harmful"
200C11goto使Dijkstra使goto
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 原因と結果が逆 (スコア:5, すばらしい洞察)

    by Anonymous Coward on 2015年02月15日 13時13分 (#2761357)

    1968年の論文を踏まえて無軌道にgotoを使わなくてもいいように言語仕様が設計されたりプログラマーが使用を自重するようになったんだろ。

    • Re:原因と結果が逆 (スコア:2, すばらしい洞察)

      by Anonymous Coward on 2015年02月15日 13時42分 (#2761378)

      今となっては goto 文を使う人は、そうした方が見通しいい場合に限り使っているという印象
      case break の方が危ういね

      #一般のブロック抜けgotoが欲しい

      親コメント
      • by annoymouse coward (11178) on 2015年02月15日 18時12分 (#2761521) 日記

        > #goto

        C return 使






        C++

                  std::vector<int> a = {3,5,7,13,17};
                  std::for_each(a.begin(), a.end(),
                            [](auto x){
                                      if (x>10)
        return;
                                      std::cout << x << std::endl;
                            });

        return 


        goto使C++
        親コメント

        • 使

           std::vector<int> a = {3, 5, 7, 13, 17};
          for (int x : a) {
              if (x >10)
                  break;
              std::cout << x << std::endl;
          }
           

           C/C++  break  return  for_each  break  return ?
          親コメント
          • いや、ごめんなさい、 break じゃなくて continue にしないと同じ挙動にならなかった……。ますます annoymouse coward さんが何を言いたいのかわからない。

            親コメント
        • by ktmizugaki (46208) on 2015年02月15日 22時17分 (#2761639) 日記



          Ruby  each break  return 

          switch  case Cbreak 
          --
          svn-init() {
            svnadmin create .svnrepo
            svn checkout file://$PWD/.svnrepo .
          }
          親コメント
      • by Anonymous Coward

        「gotoはダメだgotoはダメだgotoはだめだ」って唱えながら、
        こんなことするくらいなら、gotoのほうが遥かにまとも

        do {
                ...
                break;
                ...
        } while(0);

        • by Anonymous Coward

          ごめんなさい
          do {} while(false);多用してます…

          だってラベル名考えるのがめんど(
          流石にこれやるとき多重ループは禁止にしてますが。

          あとgoto使うと途中宣言が禁止されるのが苦手

          • by Anonymous Coward

            久しくコーディングしていないけど、do { } while(0); はマクロ書くときくらいかも

    • 直感的にそうだろうとは思っていたけど、こうしてきちっと調べて、言葉にしてもらえるといいね

    • by Anonymous Coward

      さんざgotoを悪者扱いしてきた奴の
      言い訳っぽい

    • by Anonymous Coward

      言語はCなんだから言語使用は無関係と言えるのでは?

      #ストーリーを読まなくてもすばらしい洞察。すばらしいですね。

  • goto fail; (スコア:1, 参考になる)

    by argon (3541) on 2015年02月15日 13時04分 (#2761352) 日記

    iOS7.0.6で修正された「最悪のセキュリティバグ」はありがちなコーディングミスで発生していた
    http://apple.srad.jp/story/14/02/24/094232/ [srad.jp]

    • Re:goto fail; (スコア:3, すばらしい洞察)

      by plauda (46850) on 2015年02月15日 13時33分 (#2761374)

      これをコーディングした開発チームがgoto文のせいだと結論づけるなら、
      そのチームは今後も致命的なコーディングミスを量産し続けるでしょう。

      goto文を使わなくなったとしても、ありがちなコーディングミスを
      見つけられない検証プロセスしか持たない開発チームの生産物を受け取りたくない。

      親コメント
    • by Anonymous Coward on 2015年02月15日 13時32分 (#2761373)

      goto問題じゃなくてifの使い方だろ

      親コメント
      • Re:goto fail; (スコア:2, すばらしい洞察)

        by Anonymous Coward on 2015年02月15日 14時06分 (#2761393)

        いや static変数の使い方 と 値を入れてないままの変数を返しているってのをチェックできていないというのが本質だろう。
        static変数の定義が明示的な初期化が無くても0が保証されるという仕様は、バグの元だとおもう。この仕様がため、代入前の参照が警告にもならなかったのだろうし。
        初期化子のない変数は-1などトラップされやすい値を入れるとか、デバッグ用コンパイルスイッチがあってもよさそう.

        親コメント
        • by Anonymous Coward on 2015年02月16日 12時09分 (#2761828)

          GCC-fno-zero-initialized-in-bssbssbss
          使bss便
          親コメント
        • by Anonymous Coward

          いや、人間の注意力を過信してるのがいけないだけ。
          if書いた後必ずブロックを開く({を書く)ようにすればバグは出ない。


  • goto使
    gotogoto()


    goto
    goto使

     goto

    ()
    • by Anonymous Coward

      goto使
      使






      • (C)



        () 
        ()



        ()








        C
        ()
        親コメント
  • by Anonymous Coward on 2015年02月15日 13時11分 (#2761356)

    バイナリを生成できる言語が他にないからCを使ってるだけで、
    本音の所では、正直できればC以外で書きたいプロジェクトが結構あるような気がする

    • by Anonymous Coward

      べつに下手くそなc使いより上手なJAVA使いの方がいいコード書くやろ

      • by Anonymous Coward

        下手糞なC使いとの比較は、下手糞なJava使いじゃないのか?
        目くそ鼻くそのような気がしてならない。

        下手糞なC使いは下手糞なコーディングで、テスト中にプログラムをクラッシュさせる代わり、本番はそれなりに動くが、
        下手糞なJava使いは下手糞なコーディングで、テストはそれなりにこなし、本番中にメモリリークや性能トラブルを起こすような印象がある。

        例えだが、こんな感じの印象で比較して何の意味があるかと。




        • JavaMS

          String+=
           JavaStringBuilder使
           .NETStringBuilder
          HashMapDB
           JavaHashOracleOrder by
           .NETSQLSERVER
          MS


          親コメント
  • by duenmynoth (34577) on 2015年02月15日 13時15分 (#2761360) 日記




    使

    • Re:机上の空論 (スコア:2, おもしろおかしい)

      by Anonymous Coward on 2015年02月15日 13時42分 (#2761377)

      if文はバグの温床だから使用禁止ね。

      親コメント
    • by Anonymous Coward

      こういう思考停止がgotoを無条件に禁止とか言い出して、余計なバグを生み出すんだなあ。

    • by Anonymous Coward






      20

  • by Anonymous Coward on 2015年02月15日 14時35分 (#2761404)

    当時はひどかった

    • by Anonymous Coward

      あと他の言語でも調べてみて欲しいですね。BASIC,DOSみたいなMS系を


      • MS75
        N-BASIC使(^^;
        FDD

        Fx-501P
        ()Fx-501P
        128PC-1245N-BASIC
        PC-1245

        i386QuickBASICN-BASIC (^^;
         
        TurboPASCAL6.0使
        K&R(2)
        TP使



        西

        親コメント
      • by Anonymous Coward

        DOSって何だ? .BAT の文法こと?
        それはともかく、例えばFORTRAN IV (でも水準7000でもいいから)あたりで分析しないと意味無いよね。

      • by Anonymous Coward

        68年には当然彼の国民機もまだ存在していなかったし、8080さえできてないんじゃないのか。

  • by Anonymous Coward on 2015年02月15日 15時11分 (#2761421)

    後藤文ちゃんと、はじめてのCしても問題ないよねっ

  • by Anonymous Coward on 2015年02月15日 15時20分 (#2761429)

    天然痘での死者が出ていないからCDCに保管されてる天然痘ウィルスは無害だった、って主張だよね。

  • by Anonymous Coward on 2015年02月15日 16時07分 (#2761445)

    コードに行番号がなくて、いちいちラベルとかつけなきゃいけないから
    GOTOが使いにくい。
    もっとBASICを見習ってほしい(Visual BASICはダメだよ)。

typodupeerror

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

読み込み中...