良いコードを目指して ~名前付け~
最近になって自分の書くプログラムが ”良いコード" なのかが凄く気になるようになりました。
例えば、
- 処理効率は良いのか
- 他の人が見ても理解しやすいか
など、恐らく良いプログラムの条件はたくさんあるでしょうし、数値化できないものもあると思います。
そこで、私自身が思う ”良いコード” を定義しそれに近づいていきたいと考えています!
良いコードとは
良いコードの条件って何でしょうか。
私は、半年くらい前まで ”処理効率” をとにかく良くする事が何よりも”良いコード”の絶対的要素であると思い込んでいました。
間違ってはいないのですが、それだけでは”良いコード”とは呼べないと今は思っています。
では何が重要なのか。
今の私が重要視するのは ”他の人が見ても理解しやすいか” という点です。
私が ”他の人が見ても理解しやすいか” を重要視し始めた要因です。
- 新しく新規参画したメンバーでも読みやすい
- テストフェーズなどでも、原因を探りやすい
- 追加改修などの際に、影響範囲があるかがわかりやすい
どれも曖昧な表現ではありますが、”他の人が見ても理解しやすいか” によるメリットは多くあると思います。
そのため、”処理効率”よりも“他の人が見ても理解しやすいか”に重点を置いたコードを”良いコード”として考えていきます。
プログラミングにおける名前の重要性
みなさんは名前付けをする際にどういう事を意識していますか。
”良いコード”に近づくための方法は数え切れないほどあると思いますが、一番身近であり、且つ重要であると思うのが”名前付け”です。
極端な例ですが、以下の2つの変数名が並んだ場合に、どう感じるでしょうか。
Integer sum; Integer monthlySalesSum;
sumでは何の合計かわからない為、何かを集計していれば違和感を感じません。
しかし、monthlySalesSumは名前から月の売上合計額用の変数だと想定できます。
例えばmonthlySalesSumに月の経費合計額を退避していた場合に”この処理はこれで合っているのだろうか”と疑問を抱くと思います。
こうすることで、名前付けによってプログラムのあるべき姿を想像することが出来るのです。
変数宣言時にコメントで補足説明は書けても、変数の利用場所で説明されているわけではありません。
そのため、想像しやすい名前付けをすることがプログラム自体のあるべき姿を思い描かせてくれると最近は感じています。
いつか読んだ本に書いてありましたが、”名前付けはコメントのようなもの”という言葉が凄く的確だと感じました。
変数名やメソッド名が的確な状態であれば、極論コメントがなくても読みやすいコードになると思います。
それほど、名前付けは重要です!
※名前やコメントを100%信じる事は危険ですので避けましょう。(特に新しくみるコードでは)
経験がある方もいるかと思いますが、コメントや変数・メソッド名と処理している事が異なっていても実際には正しいこともあったりします。
名前付けする際の注意点
実際に重要だと思ってもどういう名前をつけるべきなのか、と考えると思います。
私自身が本や記事、実務を通して思った事を列挙していきます!
1)汎用性のある抽象的な単語は避ける
スコープの範囲にもよりますが、汎用性のある抽象的な単語は分かり辛さの根本になると思うので避けたほうが良いと思います。
先の説明例でも利用したsumのような、どのようにも受け止める事のできる変数名をつけてしまうと、コードが読みづらくなります。
そのため、汎用性のある抽象的な単語単体を名前付けに利用することは避けたほうが良いでしょう。
2)長すぎる名前は避ける
長すぎる名前を利用すると、単純に読みづらいです。
また、似たような名前が並んだ場合に同じものとして間違えてしまう可能性もあるため、長すぎる名前は避けましょう。
短くするコツとしては、以下があると思います。
- 不要な単語を除去する
- 単語の先頭3~4文字を残す
- 単語の先頭以外の母音を消す
- 一般的な略語を利用する
但し、短くしすぎて必要な単語が分かりづらくなるとコードが読みづらくなり本末転等となるので気を付けましょう。
3)一貫性を持つ
当たり前のことのようですが、名前付けに一貫性を持ちましょう。
配属プロジェクトに命名ルールなどがあれば、それにあたると思います。
例えば、同じソースコードの中でも同一単語の略し方が様々であったり、単語の順序が明らかに違ったりするとかなり困惑します。
一貫性(ルール)があるだけで、かなり読みやすいコードになります。
名前付けは単純だけど奥が深いと思います。
今回紹介した名前付けの注意点は基本中の基本に当たると思います。
もっと知りたい!という方は是非調べてみてください!
私自身は名前付けのボキャブラリー自体かなり狭く、命名パターンに偏りもあるので、たくさんのプログラムを読んで命名の幅を広げていきたいです!
もっと読みやすい記事を目指していきます。_(:3 」∠ )_