擬似コードを使ったプログラミング

 



2019/6/20

擬似コード

英語ではpseudocodeと書きます。(pseudo=擬似)

擬似コード (ぎじコード、英: pseudocode)とは、アルゴリズムなどを、架空の非常に高水準なプログラミング言語(擬似言語)で記述したものである。
出典: フリー百科事典『ウィキペディア(Wikipedia)』

何を言っているのかよくわかりませんね。例を見ていきましょう。

通常のコード

例えば、時間によって応答するメッセージが変わるページを作成する場合に、いきなり書き始めるとこうなりがちだと思います。


$time = date("Hi");
if($time <= 1000){
    echo "おはよう";
} else if($time <= 1800){
    echo "こんにちは";
} else if($time < 2400){
    echo "こんばんは";
}

10時までは「おはよう」、それから18時までは「こんにちは」、そして1日の終りの24時まで「こんばんは」。

擬似コード

これを擬似コードで書くとこうなります


現在の時刻を取得する
if 現在の時刻が朝
  おはようとメッセージを表示する
else if 現在の時刻が昼
  こんにちはとメッセージを表示する
else if 現在の時刻が夜
  こんばんはとメッセージを表示する
endif

ifとelseさえわかっていれば書けるので簡単ですし、母国語で意味がわかるように書けるので、この時点でおかしな点があるかどうかが見つけやすくなります。
上記だと、現在の時刻が朝昼夜のいつなのか判定をする処理が3回含まれているのがわかります。

擬似コードの修正


現在の時刻を取得する
現在の時刻を朝昼夜に判定
  if 5:00~10:00 朝
  if 10:00~18:00 昼
  if 18:00~翌5:00 夜
if 判定が朝
  おはようとメッセージを表示する
else if 判定が昼
  こんにちはとメッセージを表示する
else if 判定が夜
  こんばんはとメッセージを表示する
endif

朝昼夜の時間帯を判定する部分を、メッセージを表示する処理の部分から外に出しました。
また、いきなり書いた最初のコードでは0:00~5:00の時間の処理が書かれておらず漏れがありましたが、擬似コードで処理を具体的に分解していくことで、不足している部分に気づきやすくなります。

擬似コードから本番のコードへ

あとは、擬似コードに沿っていけばいいので、いきなりプログラムを書き始めるよりも簡単にコードを書くことができます。
擬似コードはコメントにしておくといいでしょう。


// 現在の時刻を取得する
$time = date("Hi");
// 現在の時刻を朝昼夜に判定
function checkPeriodOfTime($time) {
  // 5:00~10:00 朝
  if(500 < $time && $time <= 1000) {
    return "朝";
  }
  // 10:00~18:00 昼
  else if($time <= 1800) {
    return "昼";
  }
  // 18:00~翌5:00 夜
  else {
    return "夜";
  }
}
$periodOfTime = checkPeriodOfTime($time);
if($periodOfTime == "朝") {
  echo "おはよう";
}
else if($periodOfTime == "昼") {
  echo "こんにちは";
}
else if($periodOfTime == "夜") {
  echo "こんばんは";
}

23行目以降は、擬似コードと同じレベルでコードを読むことができると思います。そういう部分はコメントを残しておいても邪魔なだけなので消しておきましょう。それ以外は開発チームのレベルに合わせてコメントを消すかどうか判断していけばいいと思います。(コメントはできるだけ少なくする派と意見が分かれるところだと思いますが)
今回は単純な処理なのであまり変化もなく、コード内にfunctionを書いているのであまりメリットが無いように思いますが、メッセージを出力する部分のコードがスッキリしました。
他に朝昼夜の判定が必要な箇所があればcheckPeriodOfTime関数を使い回せますし、朝は6時からに変更したい場合も関数を直すだけでよくなります。

擬似コードの使い所

コードを書くのに慣れてくると、この程度の処理に擬似コードは必要ないかもしれませんが、チームで開発していてレベルがバラバラの場合、特にプログラム初心者が含まれる場合や、コードレビューが難しい体勢の場合には、まず擬似コードで大まかな全体設計やクラス、メソッドの処理に問題がないかをチェックしてから実際のコードを書き始めると、スムーズに開発が進むようになるかもしれません。
日本語でコードが書かれているのに違和感がある場合、英語で書くほうが慣れている場合は、それっぽい英語(変数名など)を当てて擬似コードを書いていったほうが、わかりやすいかもしれませんので、そのあたりは個人やチームによって調整は必要かと思います。
Web系ではあまり擬似コードについて見かけなかったので記事にしてみましたが、自分が見かけないだけでみんな擬似コード書いているんですかね?常識?
ポータルサイトhackの割に、あまりポータルサイトとは関係ない技術的な内容になってしまいましたが、裏側ではこんな感じで開発しているということで……。
※記事内のコードは、動作確認はしておりません