正しいプログラムを作るための方法「デザインレシピ」

プログラミングの基礎 (Computer Science Library)
で提示している方法「デザインレシピ」がプログラムを作る上で参考になりました。

デザインレシピとはプログラムを作る、デザインするにはどうすればよいのかを示すレシピです。フェライゼン(M.Felleisen)氏らによって提唱されている方法のようです。
How to Design Programs

これだけでは分かりにくいので、例を紹介します。

例. 関数定義に対するデザインレシピ

[目的]
作成する関数が何をするものかを考える。
何を受け取り、何を返すのかを考え、関数の型を決定する。
これをもとに関数の出だし、ヘッダを作成する。

[例]
関数の動きをより明確かつ具体的にするため、
作成する関数に望まれる入力と出力の例を作成する。
そして、それを実行可能なテストプログラムにする。

[本体]
関数の本体を作成する。目的では関数が「何を」するのかを考えるが、
ここでは「どうやって」実現するか考える。

[テスト]
確かに望む動作をしているか、上で作ったテストプログラムを使って確認する。
望む動作をしていなかったら原因をこのデザインレシピに沿って考え、誤りを正す。

実際にデザインレシピを取り入れたプログラムは下記になります。

(* 時給(円) *)
let jikyu = 950

(* 基本給(円) *)
let kihonkyu = 100

(* 目的 : 働いた時間 xに応じたアルバイト代を計算する *)
(* kyuyo : int -> int *)
let kyuyo x = kihonkyu + x * jikyu

(* テスト *)
let test1 = kyuyo 25 = 23850
let test2 = kyuyo 28 = 26700
let test3 = kyuyo 31 = 29550

*本書ではOcamlというプログラミング言語を用いています

ここで大事なのは、

1. 作成する関数の目的を考える
2. 入出力の例を作ったら必ずそれをテストプログラムにしてプログラム中に書く
3. 関数本体を作成する
4. テストする

という順序です。

関数定義以外にも条件分岐、構造データ、データ定義、再帰関数に対するデザインレシピがありますが、詳しくは本書を読んでみてください。

デザインレシピは、Ocamlに限らず色んなプログラミング言語で使えるのでぜひ覚えたいですね。

以上になります。

参考: