無差別に技術をついばむ鳥

情報処理技術全般を気まぐれにつつくゆるいブログです

ソフトウェア工学をつつく5−構造化プログラミング誕生。GOTOは有害?

1960年代後半のソフトウェア工学の歴史は、B.W.Boehm(ベーム)氏、Dijkstara(ダイクストラ)氏達によって、大きな展望を迎える事になるピヨ。彼らが提唱したのは、

1つの入り口と1つの出口を持つようなプログラムは、「順次・反復・分岐」の3つの基本的な論理構造によって記述できる-構造化定理

『Go to文は有害だと考えられる』("Go to statement considered harmful") - GOTO有害論

このころから既にスパゲッティプログラムの問題が認識されていた事がわかるよね。でも理屈だけじゃわかりにくいのでプログラムを書いてみた。


#include 

int main(void) 
{
    char i = 0, x = 0;
    char str[6];
    str[0] = 'H', str[1] = 'e', str[2] = 'l', str[3] = 'l',
         str[4] = 'o', str[5] = '\n';
HELLO:
    goto CHAROUT;
HELLOSUB:
    x += 1;
    if ( x < 6 ) goto HELLO;
    goto NUMBEROUT;
COUNT:
    goto NUMBEROUT;
COUNTSUB:
    i += 1;
    if ( i < 10 ) goto COUNT;
    printf("good-by \n");
    goto END;
CHAROUT:
    printf("%c", str[x]);
    goto HELLOSUB;
NUMBEROUT:	
    printf("%d \t", i);
    goto COUNTSUB;
END:
    return 0;
}

//元のプログラム
#include 
int main(void) {
    char i;
    char str[6];
    str[0] = 'H', str[1] = 'e', str[2] = 'l', str[3] = 'l', 
        str[4] = '0', str[5] = '\n';
    for ( i = 0; i < 6; i++ ) printf( "%c", str[i] );
    for ( i = 0; i < 10; i++ ) printf( "%d ", i );
    printf( "\n" );
    printf( "good-by\n" );
}


┐(´ー`)┌ヤレヤレ
うーん。こりゃすごい。この調子で何万行も書くんだから彼らの言い分がわかるよね。 確かにGTOTの多用は有害以外のなにものでもないし、根源は機械語だから全てのプログラムは「順次・反復・分岐」でかけるピヨ。生産性が悪いけどね。
しかしダイクストラは、アセンブラな人達から「GOTOは必要だ!」と猛抗議を受けたんだ。まぁ、確かにOSとか作る時は必要性を感じるピヨ。ダイクストラも言い方が悪かったのかもしれないね。 この議論の結果、今日当たり前となったbreak、continue、continue、switch・・・などの限定版GOTOが登場したんだ。これらはアセンブラレベルではGOTOそのものピヨ。だけど、人間にとってはGOTOは読みにくいよね。だからGOTOに意味を持たせたこれらの文が考案されたんだ。猛抗議の中主張し続けた勇者ダイクストラに感謝しよう!
別窓 | ソフトウェア工学 | コメント:0 | トラックバック:0 | ∧top | under∨
<<VB.NETをつつく28−Null許容型。白黒つけられない時もある。 | 無差別に技術をついばむ鳥 | 中の人の徒然草59>>

この記事のコメント

∧top | under∨

コメントの投稿

 

管理者だけに閲覧
 

この記事のトラックバック

∧top | under∨
| 無差別に技術をついばむ鳥 |