可読性の意味について改めて考える
この記事はプログラミングにおける可読性をについて
一年程度プログラムを始めた方向けの記事です。
可読性(readability)とは、その名の通り読みやすさを指すことばですが、
読みやすさは複数の要素で成り立っています。
早速ですがこの読みやすいはどこから来ているのか掘り下げていきます。
目次
この記事でいいたいこと
- 可読性は「見た目」「構造」「意味・目的」の分かりやすさである
- 可読性が高いとストレスが減り、保守性が上がって、スピードが上がる
- 可読性を上げるには、意味のある名前を付けるところから
それでは本文です。
可読性を構成する要素三つ
- 見た目の読みやすさ
- 構造の読みやすさ
- 意味・目的の読みやすさ
見た目の読みやすさ:フォント
「見た目の読みやすさ」は例えばフォントです。
見やすいフォント見にくいフォントありますよね。
iphoneもフォントにこだわっていることで有名ですが、
コードも見やすい=読みやすいです。
構造の読みやすさ:インデント
インデントも「見た目の読みやすさ」に関連しますが
if文、for文との密接な関係から「構造の読みやすさ」を指しています。
インデントがないとかなり読みにくいです。
for (){
if(){
}else{
if(){
}
}
if(){
}
}
これが秒で読み取れる方は括弧に愛されてると思います。
大多数のひとにはインデントがあったほうが読みやすいです。
for ()
{
if()
{
}
else
{
if()
{
}
}
if()
{
}
}
構造の読みやすさ+意味・目的の読みやすさ:ネストの深さ
if文、for文などの制御文でもネストが深さも重要です。
あまりにネストが深すぎるとエディタで横スクロールする回数が増え、
構造を読みにくくします。
ネストが1段 が 10個ある文章とネストが10段が1つある文章では
前者のほうがとりうるパターンが少ないため理解しやすいです。
意味・目的の読みやすさ:マジックナンバー
マジックナンバーなんかは意味が伝わらないといわれますね。
someStatus = 99
事前説明なしでは「99ってどんな状態??」のようになります。
意味・目的の読みやすさ:命名規則
命名規則もとても大事です。
マジックナンバーと同じく意味が伝わるかが大事です。
クラス名、メソッド名、変数名、 .etcと命名数する対象は
いくつもありますが、先ほどの例から変数名をとります。
someStatus = 99
「someStatus」はあくまで「サンプルです」を
伝えるために使用している名前です。
しかし実際に動いているプログラムで同じ「someStatus」という
変数名があるならば何を指しているかがわからず混乱します。
意味が伝わるかがポイントですね。
結局のところは可読性は容易に人に理解できるかが重要になります。
可読性が求められる理由三つ
可読性が求められるのには理由があります。
- ストレスが減る
- 保守性が上がる
- 速度が上がる
ストレス(負荷)が減る
頭にスッと入っていき読んでいて気持ちのよいコードというものもあります。
逆に読みにくいとかなり真剣に頭をフル回転せねば理解できず
脳に負荷がかかります。
そしてコードを理解し終えるとコードを読むことになった
本来の目的に着手します。
新機能の開発やバグ潰しなどのメインの設計やコード製造を
ヘロヘロの状態ですることになります。
本来、創造力が必要なところにリソースを充てるためにも
可読性はあったほうがよいでしょう。
保守性が上がる
可読性があるコードはというのは読みやすく
また理解しやすいことを意味します。
既存コードが理解できているのであれば機能改修をするときに
どこにどれだけの改修を入れればよいか判断できます。
また、理解しやすいということはレビューにもメリットがあります。
もし間違った解釈をしていたとしても
レビューのとき設計書とコードを照らし合わせやすく
「間違った」に気づいやすいからです。
可読性の高いプログラムはこのような理由で保守性も高いです。
生産速度が上がる
読みやすいということは理解する速度が上がるということです。
100行のメソッドがあったとき10分で読めるか1時間かかるのかは重要です。
今見ているプログラムは全体何行ありますでしょうか。
読んでいるときはインプットの時間です。
読んでいる時間が少量で済むならば
アウトプットの時間を増やすことができます。
可読性のための第一歩は意味の分かる名前を付けるところから
可読性を上げるために何からはじめるか
入門編としておすすめなのは、意味のある命名をするところからです。
理由としては、自分が何をコーディングしているのかを
変数名などにすることで強く認識できるからというのが一点。
また、個人ですぐ始められるというのが一点です。
インデント、マジックナンバーやフォントについてはチーム・組織としての取り決めがあると着手しづらいので最優先から外しました。
これから作るコード、修正するコードの変数名、メソッド名の
意味が伝わるようにサンプルを書いてみます。
記事の変数なら「article」
公開しているかを判定メソッドならば「 isPublished()」
if (article.isPublished()){
}
「もし記事が公開されているならば」と文章がそのままの文として読めますね。
まとめ
以上が可読性とは何かと求められる理由についてになります。
可読性は良いものだと思われた方は、
変数名を意味のあるものにしてみてはいかがでしょうか。
自分自身が読みやすくなります。
ただ、自分が書いたコードというのは自分以上に
他のひとが読む回数が多くなります。
ゆえに可読性とは、ほかの人が容易にコードを読めるようにと
他者への思いやりにもなります(自戒)。