ダイクストラの主張
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/11 01:22 UTC 版)
“Go To Statement Considered Harmful”の趣旨は次の通りである。 人間が時間によって変化するプロセスを把握する能力は、プログラムの静的な関係を把握する能力に比べて劣っているため、静的なプログラムテキストの構造と時間によって変化するプロセスの構造をなるべく近づけるのが重要である。 そのためにはプロセスの進捗を表す簡潔な指標が必要である。指標とは例えば実行中の行番号・その時点でのスタックトレース・行番号とループを回った回数のペアなどである。 例えば、1人が部屋に入るごとにカウンタを増やしていくプログラムにおいて、カウンタが室内の人数-1である瞬間はどこにあるのかという問いに答える際に、簡潔な指標があればすぐ答えられるが、簡潔な指標がなければ正確な答えは難しくなる。 goto文を無条件に許してしまうと簡潔な指標は得られなくなってしまうため、上位水準のプログラミング言語においてはgoto文は廃止するべきである。 その一方でクヌースの指摘によると、ダイクストラは“Structured Programming”においてはgoto文には触れていない。実際に“Structured Programming”においては“sequencing should be controlled by alternative, condtional and repetitive clauses and procedure calls, rather than by statements transferring control to labelled points.”との1文があるのみでそれ以外では触れていない。 また、「3つの基本構造」(後述)についても、“Go To Statement Considered Harmful”においては“I do not claim that the clauses mentioned (引用者註: 順次・分岐・手続き呼び出し・反復) are exhaustive in the sense that they will satisfy all needs”とし、「3つの基本構造」には固執していない。 「構造化プログラミングの観点からgoto文を使うのは望ましくない」ものの「単にgoto文を使わなければ見通しが良くなる」という考えは“Go To Statement Considered Harmful”でも否定されており、goto文の有無のみに固執するのは不毛である。構造化プログラミングの本質の一つは、大きなプログラムを小さな構造、すなわちサブルーチンや関数に分割し、プログラムの正しさを証明することである。
※この「ダイクストラの主張」の解説は、「goto文」の解説の一部です。
「ダイクストラの主張」を含む「goto文」の記事については、「goto文」の概要を参照ください。
- ダイクストラの主張のページへのリンク