プログラミング初学者向け プログラミングと文章は似ている

プログラミングと文章の似ているところ

コードも文章もどちらも人が読むためのものです。

コードはコンピュータに命令を出すものではありますが、機械語以外のプログラミング言語は人が読みやすいようになっています。

文章は誰かに何かを伝えることが目的なので、どんなに書かれていることが正しくても、読み手が理解できなければ意味がありません。

同じように、プログラムのコードも、どんなに正しく動こうが、読み手が理解できなかったり、理解するのに時間がかかってしまうと、その価値を落としてしまいます。

そして、ここでの読み手とは、他人だけを指すのではなく、自分自身も含みます。

とりあえず動いたからこれでいいや、のプログラムは数ヶ月後の自分では全く理解できない可能性があります。

読み手のことを考えていないコードは、理解するのに何十分も数時間もかかることがあり、これはあなたの貴重な時間を浪費し、プロジェクトのコストを増加させる要因になります。

難しく考えず、読み手を思いやったコードを書けばそれで良いのです。

プログラミング初学者向けの気をつけること

JavaScriptを例にとっていくつか読み手のことを考えたコードのポイントをご紹介します。

const と let の使い分け

以下の二つのコードを見た時に何を考えるでしょうか。

const value = 0;
let value = 0;

const の方は再代入ができないので、value という変数はこの後に変わることはないと読み手に伝えることができます。

しかし、letの方は再代入ができるので、この後のコードのどこかで変化する可能性があります

もし、value が変化しないにもかかわらず let で宣言していたらどうなるでしょうか。

読み手は、どこかで let は変わるだろう、ということを念頭に起きつつコードを読みますが、結局最後まで再代入されずに終わります。

これは再代入することを忘れたバグなのかもしれない、と考えたりします。

このようなコードは混乱を招くので、再代入されない変数は const で宣言する癖をつけると良いと思います。

変数名、関数名、引数は具体的にする

以下の二つのコードの違いはなんでしょうか。

const convertData = (data) => {
	// 処理
};
const convertUsers = (users) => {
	// 処理
};

convertData は、何かを変換する関数であり、data という引数を受け取ることがわかります。

一方で、convertUsers はユーザーデータを変換する関数であり、ユーザーのデータ、それも users なのでおそらく配列を受け取ることが予想できます。

どちらの方が情報量が多いでしょうか。

関数の名前や引数名を考える時は、できるだけ読み手が関数の実装を読まなくても何をする処理なのかが予想できるようにします

これは文章でいうところの段落のタイトルをつけることに似ています。

読み手は、タイトルを読むことで、これからの文章が何について書かれているのかを予想できます。

予想が立つことで、文章の読解力が高まります。

これは日本語や英語の速読と同じです。

書かれている内容の予測が立つことで、読むスピードもあげることができます。

まとめ

品質が良いコードとは、読み手のことを思いやったコードでもあります。

常に誰かが読むことを念頭においてプログラムを書く練習をしてみてはいかがでしょうか。