[B, F, G 合同セミナー (増田担当分ページ)]

http://macroscope.world.coocan.jp/ja/edu/ris/bfg/structure.html


計算機プログラミングの考えかたと制御構造とPythonの段さげ

プログラム言語の考えかたには、「手順立て型」[注]、「関数型」、「オブジェクト指向」などがあり、 Python にはそのいずれの考えかたもとりいれられていますが、 わたしが教えられるのは、そのうちいちばん古い「手順立て」型のプログラミングです。

手順立て型とは、基本的には、機械への命令を、機械が実行する順番にあたえていくことです。

ただし、似たような作業をくりかえすとき、プログラムの同じところをくりかえしてつかいたくなります。 このため、かつては、プログラムの中を前後にとびまわる「go to」または「jump」という機能がよくつかわれました。 しかし、そうすると作業の流れがわかりにくくなりました。

1970年代に、手順立ては、「順次処理」「条件別処理」「くりかえし処理」の3つの 「制御構造」で書けることがわかり、条件別処理とループ (loop、くりかえし処理の構造) をあらわす構文が発達しました。

また、手順立ては、元締めと下請けの構造にしたほうがわかりやすいことがあります。 プログラム言語の一般論として、仮に「元締め」と呼んだものをメインプログラム (main program)、 「下請け」と呼んだものをサブプログラム (subprogram) またはサブルーチン (subroutine) と 呼ぶことがあります。 Python のばあい、下請けプログラムは「関数」(function) でもあるので、 Python の教科書では「関数」と呼ばれることが多いです。

Python での制御構造

「条件 A がなりたっているとき、処理 X をせよ」を Python ではつぎのように書きます。 コロンと、段下げ (左から一定の文字数だけあける。 英語では indent という) は、(プログラム言語一般ではなく) Python言語の約束です。

if A:
    X

「条件 A がなりたっているときは処理 X を、そうでなければ処理 Y をせよ」は、つぎのように書きます。

if A:
    X
else:
    Y

「条件 A がなりたっているときは処理 X を、そうでなくて条件 B がなりたっているときは処理 Y を、 どちらもなりたっていないときは処理 Z をせよ」は、この基本によれば、つぎのように書くことができます。

if A:
    X
else:
    if B:
        Y
    else:
        Z

しかし、そうすると、条件分岐のレベルがふえ、Python では段下げをふやさなければなりません。 「else if」をつかいたくなることは頻繁にあり、分岐のレベルをふやすよりは 多方面への分岐と考えたようがわかりやすいので、 Python では「elif」という (英語の単語ではない) キーワードが導入され、つぎのように書くことができます。

if A:
    X
elif B:
    Y
else:
    Z

くりかえし処理は「ループ」ともよばれます。 ここではいちばん単純な「条件 A がなりたっているかぎり X をくりかえす」ことを 「while」というキーワードをつかって書く例をあげておきます。

while A:
    X

ループをつくるキーワードには「for」もあるのですが、 それは実習の例文について説明することにします。

制御構造の構成要素を明示するためのプログラム言語ごとの表現

プログラムでは、条件別処理やくりかえし処理の対象となる範囲を 明示する必要があります。 とくに、条件別処理やくりかえし処理は多重の入れ子構造になりうるので、 どのレベルかを区別する必要があるのです。

Python では、それを、段下げで表現しています。 (段下げごとに分類がこまかくなっていきます。 同じ字数だけ下げられている行は同じレベルです。) これは Python 独特の約束です。

【ほかのプログラム言語でも、 プログラム例では制御構造を反映した段下げをするのがふつうですが、 それは人が目でみてわかりやすくするためで、 Python以外のほとんどのプログラム言語処理系 (コンパイラやインタプリタ) は 段下げを無視します。】

いくつかのプログラム言語では、if などの構文で、対象の終わりを示す指定ができます。 Fortran (1977年標準以後) の if-then-else 構文は「end if」で閉じます。 シェル (bash など) の if 文は、if を逆につづった「fi」で閉じます。

そのほか多くのプログラム言語では、「複数の文をまとめる」表現を、ifなどと組み合わせてつかいます。 Algol や Pascal では「begin」と「end」でくくります。 C, C++, Awk [オーク], R, Ruby などでは、波かっこ (「{」と[}」)でくくります。


2025-05-14
増田 耕一 (MASUDA Kooiti)
増田の個人サイトでの [B, F, G 合同セミナー教材] [計算機利用の教材] [立正大学の授業用の教材] [教材目録ページ] [日本語入り口ページ] [ホームページ]