プログラミングの基礎 PHPで応用を考えてみる。


はじめに

浅井健一さん著書の『プログラミングの基礎』 という本があります。
この本の趣旨として正しいコードを書くための道標となる「デザインレシピ」というものがあります。
・どのようにメソッドを作れば良いのか?
・正しいプログラムを作るにはどうすれば良いのか?

著者が提唱するデザインレシピに沿って書けばこのような疑問を払拭できるのです。

この本ではOCamlという関数型言語を用いて説明がされています。
しかしながら、他の言語でも応用が効くんじゃないか?と考え
PHPでも応用できるのではないかと思いまとめてみました。

メソッド定義に関するデザインレシピ

デザインレシピはプログラム作成時に従うべき指針を提示してくれます。
重要なポイントをまとめると
①目的:
   作成するメソッドが何をするものなのか。何を受け取り何を返すのかを考える
②例:
   目的をより具体的に落とし込む作業。作成するメソッドに望まれる入力と出力の例を作成する。
③本体:
   メソッド本体の作成をする。目的では「何を」するか考えたがここでは「どうやって」実現するか考える
④テスト:
   望みどおりの挙動をしているのか。作ったテストプログラムで確認を行う
   挙動が望み通りでないのならば①からもう一回練り直す

以上4stepです。
では実際のコードで見ていきましょう。

給料を計算するメソッドkyuyo

表題の通り給料を計算するメソッドで考えていきます。
デザインレシピに沿って考えるとまず初めに考えるべきは目的です。
今回の目的は
働いた時間(x)に応じたアルバイト代を計算すること
とします。
ここで引数を入れるときは入出力の型も考えておきましょう。

kyuryo_head.php
// 目的:働いた時間(x)に応じたアルバイト代を計算する 
// kyuyo : int -> int 

<?php 
function kyuyo ($x){
  return  $x * 0;
}
?>

この3行をヘッダと呼び目的、型、変数名を入れます。

そもそも自分はこのメソッドで何をやりたいのか?
引数の型は何でどのような型で出力されるのか?
考えられる最小の形のメソッドを考えると捉えていいと思います。
少し面倒ですが特に型を考えるのは省略してはいけないと著者も言っています!
確かに考えたことなかったけどメソッドの理解が進む気がする。。。

基本形であるヘッダができたので次は例ですね!
最小の形では0を掛けるようにしたのでとりあえず800と考えます!

kyuryo.php
<?php
function kyuyo ($x){
  return  $x * 800;
}

kyuyo(5);
 4000;
?>

このように成功した時の例を考えていきます。
例を作っておけば完成した後にテストで確かめていくことができる!
3つほど作っておくと良いそうです。

続いてテストを書いていきます。

kyuryo_test.php
<?php
require kyuryo.php;

if (kyuyo(5) === 4000 ) {
  echo "true";
} else {
  echo "false!;
}
?>

このテストは当然trueとなるはずです。
さて、ここで最初に作ったヘッダをテストしてみます。

kyuryo_head_test.php
<?php
require kyuryo_head.php;

if (kyuyo(5) === 4000 ) {
  echo "true";
} else {
  echo "false!;
}
?>

この時点では全てを0で返すのでfalseになります。
先に最小限のヘッダを作りここでテストをする。
ここで出てくるfalseをtrueにするようにメソッドの中身を作れば良いわけなので
目標ができるということみたいです!

さてここまできたら最後はどうやって実現するかを考えます。
今回の場合は超簡単ですね。働いた時間xに時給をかけてあげれば良いですね。
最終的にはこうなりました。

kyuryo.php
<?php
// 時給(円)
 $jikyu = 800;

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

function kyuyo ($x){
  return  $x * $jikyu;
}

//後はテストを実施してtrue確認すれば完了!

まとめ

今回は例題ですごく簡単なので一気にやった方が早いじゃんと!思っちゃいますが
複雑になる程効果が高いはずです。
デザインレシピに沿っているかいないかでメソッドの完成度、信頼度が物凄く変わりそうだと感じました。

今回はメソッドのデザインレシピでしたが他にもif文のデザインレシピなど
色々なデザインレシピがありますので一度本を読んでみると勉強になると思います!

今回はPHPで考えましたがどの言語にも応用が効くと思います!
Markdown: プログラミングの基礎

内容に間違いありましたら陳謝します