- Brian W. Kernighan & P. J. Plauger, (1974,) 1978: The Elements of Programming Style. 2nd edition. McGraw-Hill.
- Brian W. Kernighan, P. J. Plauger 著, 木村 泉 訳, (1976,) 1982: プログラム書法 (第2版)。共立出版, 236 pp. ISBN 4-320-02805-5.[奥付では「4-」がぬけている。]
日本語版の第2版は 1982年に出版された A5判 横書きのペーパーバック。初版 (1976) もそうだったが、第2版のほうがやや厚くなった。
プログラム言語の入門書の例文のまちがったところや教材としてうまくないところを実例添削でしめした、計算機プログラミングの教材である。プログラム言語としては Fortran と PL/I (ピーエルワン) がつかわれている。Fortran は、77標準になるまえの、あとづけで「66標準」とよばれた規格によっている。ただし本書第2版では、77標準が出たが、それにそったコンパイラはまだ普及していない時点だったので、77標準にしたがえばよりよくなるところを注釈的にのべている。
本書の主要な主張のひとつは、プログラムを読む人にわかりやすく書こう、ということである。
もうひとつは、制御構造を明確に表現しようということであり、初版ではわざとその用語をさけていたそうだが、「構造プログラミング」とよばれる態度である。(この用語は英語の structured programming にちがいなく、わたしは「構造化プログラミング」とする。) 本書 (第2版) 第3章の主題であり、第2章の話題も半分ぐらいはこれである。手順立て型の (多くのプログラム言語教科書では「手続き型」とされている) プログラムは、順次処理、条件別処理、ループの 3つの構造で書くことができ、そのほうが見通しがよい。条件別処理については、PL/I にはすでに IF … THEN … ELSE があり、Fortran でも 77 ではこの構文 (ただし END IF をつかう) がつかえるようになった。77 よりまえの Fortran では「IF (…) GO TO …」の形をつかわなければならないことがある。ループについては、PL/I には DO WHILE … がある。Fortran にはながらく実行回数を決めた DO ループしかなく、条件がみたされるまでくりかえすには (77標準でもなお) GO TO が必要なことがある。しかし、GO TO をつかうにしても、条件分岐やループの構造をつくることを意識してつかうほうが見通しよく書ける。 [別ブログ記事 (2020-07-18) 「Go to をめぐって」] の後半に関連することを書いた。
第4章では、プログラムを部品にわけること、とくに。Fortran の subroutine という下請け手続きを記述する機能をどうつかうかを論じている。これも構造化といえるが、上にのべた制御構造とはレベルのちがう話題である。
第5章は入出力について。とくにプログラムがデータを読む際に、なるべくまちがいがおきにくいデータ形式にしたうえで、まちがいがおきたら検出して対処するようにプログラミングするべきである。
第6章は「よくあるまちがい」。いくつかの別々のことを言っている。変数を未定義のままつかってしまうと結果がさだまらないので、変数の値の初期設定をわすれないこと。浮動小数点演算ではそれが近似する実数についての等式がなりたつとはかぎらないこと。数値をある幅で変えて演算するときの境界の値や、不等号で分岐するときの等号の場合の動作に注意してプログラムをテストすること、など。
第7章は、プログラムの効率のこと。効率よりも正しく動作することを優先させるべきだ。効率が必要となったら、どこが時間をくっているか測定しよう。小細工よりもアルゴリズムを根本的に考えなおしたほうがよいこともある。
第8章は、プログラムへの注釈の入れかたについて。プログラム自体を、変数名をくふうして読みやすくし、実行内容をいちいち注釈しなくてもよいようにするのがよい。しかし、どんなデータをあたえることが期待されているかは書いたほうがよい。
わたしは本書でよいとされているプログラム例を、Fortran 77 に、さらに DO WHILE や 行番号なしの DO 文を追加した言語仕様で書きなおしてみた。個人ウェブサイトの [このページ] に置いてある。
いまでは、ひろくつかわれるプログラム言語がいれかわったし、Fortran の標準もあたらしくなった。プログラミングの教科書で、本書で批評対象となっているようなまずい文例はあまりないとはおもうが、いまどきなりのプログラミングスタイルの教材があったほうがよいとおもう。
折りかえしのあとに目次をつける。
Continue reading