初投稿になります、Khmerです。
プログラムに関する情報のメモ代わりに使う予定ですが、他の人の役に立つことがあれば幸いです。
では記事の本題へ。
リーダブルコード
先日「リーダブルコード」なる本がプログラマの間で有名だということを耳にし、さっそく読んでみました。この本は「読みやすい」コードの書き方について書かれています。技術面に関しては一切触れられていません。
コードの読みやすさ
人が書いたコードは、書いた本人はわかりやすいと思っていても、他人が見るとわかりにくいということはよくあることです。さらにいうと、書いた本人ですら月日が立つと全く何が書いてあるかわからないといったことは、コードを書いたことのある人であれば一度は経験があるのではないでしょうか?コードが読みやすさは修正や追加を行う上でかなり重要です。読みやすいコードと読みにくいコード、どちらも書けるのであれば、多少時間が多くかかったとしても、前者を選んだほうが後々確実にメリットがあるというものです。この本では様々な観点から読みやすいコードの書き方について書かれていますが、そのなかで私が今後特に注意しようと思ったものをいくつか紹介します。
変数や関数の命名
- 性質を具体的に表し、誤解を生まない単語を用いる。
stop(停止)よりもkill(停止後再開不可)やpause(停止後再開可能)を、filter(条件による抽出)よりもselect(条件合致を抽出)やexclude(条件合致を除外)を用いる。 - 変数を用いるスコープに応じて、長さを調節する。
スコープが広い場合はその場で理解できるように、長くても良いのでわかりやすい名前をつける。逆にスワップ操作など、一画面内の数行でしか用いない関数などは必要最低限で十分である。 - 使用する上で注意すべき情報は名前に取り入れる。
単位や加工処理の内容など。 - 大文字や記号に意味を含める。
末尾のアンダースコアの有無によってローカル変数とメンバ変数を区別するなど。
コメントの書き方
- コードから読み取れない情報を必要最低限の言葉で表す。
説明対象から読み取れる内容や、冗長な書き方は不要。 - そのコードを書いた背景、考えなどを示す。
定数とその値の意味や、改善の必要性など。 - 複雑なコードには全体像の説明を行う。
- 結果がわかりにくい関数には具体例を交えた説明を与える。
他の動作を連想させない具体例を用いるようにする。 - 引数の説明を行う。
特にbool値は明確にその意味を示す。
コードの単純化
- ネストを深くしすぎない。
エラーチェックなどは早い段階で行う。関数中では関数を返す(return)、ループ中では処理のスキップする(continue)、などを利用する。 - 中間結果を表す変数を避ける。
- 変数への書き込みを最小限に抑える。
複数の変数の変化を考慮するのは大変である。 - 変数のスコープを小さくする。
グローバル変数などスコープの広い変数を使用する際はその必要性を検討すべきである。
コードの構成
- 下位問題(コード全体の目的とは直接的には無関係な問題)を抽出し、別の関数として実装する。
全体が見通しやすい。テストや修正もその関数単体に対して行うことができる。下位問題は汎用コードとして別のコードに適用できる可能性もある。 - 1つのタスクの作業内容を小さくする。
- タスクを1つずつこなす。
複数のタスクを同時に行うコードは読みにくい、応用しづらい。 - 目的を満たす最小限のロジックに基づいてコードを書く。
余分な機能はテスト作業やバグの発生源の増加などにつながる。 - デフォルト値は初めに設定する。
最後に
書籍では具体例などを交え、大変わかりやすく書かれています。ページ数も200ページと読みやすい量なので、気になった方は是非読んでみてください。