✍️

疑似コードを書こう

2024/01/29に公開

1.記事の目的

プログラミングを始めたばかりの方で、簡単な問題をコードに落とし込めないという方がいます。
まだ文法的な知識も中途半端な状態で問題を読み解きながら適切にコードにしていくのは難しいと思います。
私はプログラミングを学び始めた方と関わって、そのような状況に出くわした時に日本語で疑似コードを書くことをおすすめしています。
なぜ疑似コードを書いた方が良いと思うのか記事にしてみました。

2.疑似コードとは

疑似コードとは、コードの意図(コードで何をしたいのか?どのようにしたいのか?)を自然言語を使って表現することです。例えば、複雑な条件をまず自然言語で書いて整理する、プログラミング言語をよく理解していない人に向けて説明する際に使用するなどさまざまな場面で使えます。
実際には実行できないコードなので疑似コードと呼ばれます。

例えば、下記のような問題があるとします。

// 引数に文字列型の引数を取り、特定の文章を返す関数を定義します。

// ここに関数を定義しましょう

dayOfWeek("Monday"),"It's a busy day.");
dayOfWeek("Tuesday"),"It's a free day.");
dayOfWeek("Wednesday"), "It's a busy day.");
dayOfWeek("Thursday"),"It's a free day.");
dayOfWeek("Friday"), "It's a busy day.");

かなり単純な条件分岐の問題です。これで疑似コードを書いてみたいと思います。

まず、問題と実行コードをよくみてみましょう。
渡される引数によって返される文章が違うようですが、2種類しかありません。
引数を条件として分岐させれば良さそうです。
疑似コードで書いてみましょう。

// 引数に文字列型の引数を取り、特定の文章を返す関数を定義します。

// ここに関数を定義しましょう

function dayOfWeek(string){
    // もし引数stringが"Monday" "Wednesday" "Friday"なら"It's a busy day."を返す。
    // もし引数stringが"Tuesday" "Thursday"なら"It's a free day."を返す。
}

疑似コードが書けたら、実装に必要そうな文法について調べたり確認したりしましょう。
もし〜ならという条件が出てきているのでif文が使用できそうです。
関数から何かを返すにはreturnを使用します。

function dayOfWeek(string){
    if(string === "Monday" || string === "Wednesday" || string === "Friday"){
      return "It's a busy day.";
    }else if(string === "Tuesday" || string ===  "Thursday"){
      return "It's a free day.";
    }
}

このような感じで書いてみました。

2.初心者に疑似コードをお勧めする理由

ロジックの感覚が鍛えられる

プログラミングを始めて書く際は、条件分岐やfor文を使う感覚?のようなものがまだ備わっていないと思います。日常生活で条件分岐文を使用して生きています!という人はそんなにいないと思うので。
たくさん書いていくうちに「ここはこういう書き方で解けそうだな」という感覚がどんどん身についてくるものだと思います。
上記の例でさらっと疑似コードの前に「渡される引数によって返される文章が違うようですが、2種類しかありません。引数を条件として分岐させれば良さそうです。」と書きましたが、問題によってはこういった落とし込みも難しいことがあると思います。
自然言語ででもとにかくコードを書くことで問題をロジックに落とし込む感覚が掴めてくるのではないかと思っています。

質問が作りやすくなる

もし誰かや何かのサービスがプログラミングについて教えてくれるような環境にいる場合、どこがわかっていてどこがわかっていないのか、どこが出来ていてどこが出来ていないのか説明できた方が助けも求めやすく理解も深まると思います。
疑似コードでロジックが書けていれば、どのような文法を使えばいいか教えてもらえるかもしれませんし、疑似コードででも書けていない場合問題を噛み砕くところから一緒に考えてくれるかもしれません。
自分は何がわかっていて何がわかっていないのか、初心者ほどわからないものだと思います(自分もそうです)
まず自分を知る意味でも、わからないときこそ遠回りでも疑似コードをお勧めします。

3.記事のまとめ

久しぶりにZennに記事を投稿して、技術というよりお気持ちになってしまいました。
Javascriptのclassについてなど勉強しているので、また記事にしたいと思います。

4.参考記事

https://kinsta.com/jp/knowledgebase/what-is-pseudocode/

Discussion