プログラミングを書くときのお作法。キレイなコードを書くには?〜リーダブルコードにならう〜

プログラミングを書くときのお作法。キレイなコードを書くには?〜リーダブルコードにならう〜

Webエンジニアになる所を夢見ながら、コードを書き始めはしましたが、いざコードを書いてみると

「変数名ってどうやってつければ良いの??」

「コメントの書き方は??」

「どのファイルに書けば良いの??」

などなど悩みはつきませんよね。そんな人たちに私ができるアドバイスというのはこの二冊の本を読みましょう!!

以上。

 

という感じなのですが、これだと流石に突き放し過ぎなので中でも重要そうな考え方をそれぞれ紹介していければと思います。 まとめて紹介すると少し分量が多くなるので今回はひとまずリーダブルコードにかかれていることだけまとめておきます。

 

 

 

優れたコードとは?

 

すぐれたコードの定義というのは難しいですが、「簡潔で理解しやすいコードは優れたコードである」という意見にあまり反対する人はいないのではないでしょうか?

リーダブルコードでは、

コードは他の人が最短時間で理解できるように書かなければいけない

ということを優れたコードを書く上での基本的な考え方としています。 例えば本書には、三項演算子とif文で書かれた全く同じ結果を返すコードについて言及しています。

 

return exponent >= 0 ? mantissa * (1 << expnent ) : mantissa / ( 1 << -exponent );

 

if (exponent >= 0 ) {
  return mantissa * (1 << exponent);
} else {
  return mantissa / (1 << -exponent);
}

一見すると、三項演算子でできたコードの方が簡潔ではあるのですが、三項演算子内でさらに演算をした結果を返しているので少々短いけど複雑なコードになってしまっています。一方下のIf文では愚直にexponentの条件に合わせた式が書かれていますが、それぞの条件で返される式が目をこらさずとも読める「安心感のあるコード」になっています。

結論前者と後者のコードを比べた時にどちらのコードを書くべきか?という問いには、後者が優れているということになります。それは、先に紹介した「他の人が短時間で理解できるコード」が優れたコードだからで、リーダブルコードではこの鍵となる考えを元により読みやすいコードを書くための方法論が書かれています。

コードというのは多くの場合、書き捨てで終わるものの方が少数で大抵は何年、何十年というスパンでメンテナンスされていきます。何年、何十年も使うソースが理解しづらいというのはそれだけでモチベーションや生産性を低下させます。また、コードは基本的にチームで書いていくので、他の人が見た時に処理が明快なほうがチームの生産性をより高く保てるはずです。たとえ、自分一人でコードを書いていても久しぶりに見るコードは自分が書いたコードでも理解できないなんてことも多いので、より明快で読みやすいコードは、チーム開発、個人開発問はず重要なスキルの一つです。

変数名をつけるときの注意点

 

リーダブルコードでは上記の読みやすいコードを書くための考えに則って、変数名の付け方などについても書かれていたりします。 そのうちのいくつかを紹介していきます。

 

明確な名前な単語を選ぶ

 

getなどの名前ではなく、download,fetch,postなど具体的な単語を用いる。

 

tmpやretvalなどの汎用的な名前を避ける

 

tmp,retval,hogeなどの数字を変数名に使うのはやめましょう。a1,a2,a3...など数字で区別するような名前もそうです。コードを読む時にどう言った値が格納されているかわからなくなります。

 

スコープの大きな変数には長い名前をつける

 

グローバルスコープに定義されるような変数には、適切なネームスペースを切って他の変数と競合しないようにしましょう。グローバル常にsizeやlengthなど一単語の変数を宣言すると高確率で他の変数と競合します。commentSize, articleSizeなど細かく説明された変数名にしましょう。

 

大文字やアンダースコアなど変数のフォーマットで意味をつける

 

勉強する言語によってクラスは大文字から始める。メソッドは小文字から始めるなどの規則があります。(定数は全て大文字など)これらのフォーマットの取り決めを守ることで変数名に文字以外の情報を付加することができます。

 

コードを整形して美しく整える

 

実際の挙動とは関係ありませんが、コードのフォーマットを揃えるなどというのも読みやすいコードを書く上で大切です。 美しくと書くとちょっと語弊があるかもしれませんが、最低限ここは守りましょうというのをあげると

 

インデントを揃える

 

これは言わずもがなですが、非常に大事です。インデントが揃っていないとネストの構造などが非常に読み取りづらくなります。各テキストエディタではコードを自動でフォーマットしてくれる機能をだいたい揃えているので、そういったツールを駆使してコードを書く際は必ずインデントを揃えるようにしましょう。

 

グループごとに意味のある単位でまとめる

 

コードを書いてると一ブロック、一ブロックで処理の目的がかわってくるところがまあまああります。一つのメソッドで引数のチェック、データの整形などをやる必要がある場合は、引数チェックのかたまりとデータ整形のかたまりの間に一行改行を加えることで、それぞれ別の処理をしていることがわかりやすくなります。

 

ネストを浅くする

 

ネストが深くなると、変数のスコープや処理の順番などが非常に読み取りづらくなり、とても読みづらいコードになります。早期リターンなどをを使うことでネストを浅くすることはできますし、ネストにせざるを得ない場合は、メソッドに切り出して見た目上のネストを減らすこともできます。

 

変数の使い方

 

スコープをできるだけ小さくする

 

変数のスコープはできるだけ小さくプライベートな状態にしましょう。グローバルに定義された変数は意図せぬところで書き換えられてしまうことがあります。たまたま変数名がかぶったなどで予期せぬ動作をしてしまうことがだあります。心理的安全のためにもグローバルに定義する変数は最小限にとどめましょう。

 

再代入を極力さける。

 

一度宣言した変数になんども別の値を代入するのはのぞましくありません。変数が今どう言った状態なのかということを気にしながらコードを書く必要が生まれるので、再代入をしないコードを書くように心がけましょう。javascriptなどはconstで変数を宣言することを習慣化しておくと再代入の少ないコードを書くことができます。

 

 

まとめ

 

 

今回はリーダブルコードに書かれた、コードを書く上でのお作法を紹介しましたがいかがでしたでしょうか?リーダブルコードもプリンシプルオブプログラミングもコードレビュー時に必ずチェックされる項目が多く書かれいているのでぜひ一読しておくことをおすすめします。(本ではより詳しく例を用いながら読みやすいコードの書き方が解説されています。)

リーダブルコードでは、コードの整形などもふくめて見た目を整えることなどオブジェクト指向(OOP)など設計の考えをあまり持ち込まずに直感的にどういったコードが理解しやすいコードかということが書かれていて、プリンシプルオブプログラミングではOOPなどの考えも用いながらより突っ込んだ内容のことが書かれています。

もし、これらの本を読まれる場合は、リーダブルコード→プリンシプルオブプログラミングの順で読まれることをお勧めします。

 

リーダブルコード

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック

プリンシプルオブプラグラミング

プリンシプル オブ プログラミング3年目までに身につけたい一生役立つ101の原理原則