良いコ-ドへの道―普通のプログラマのためのステップアップガイド

第2回 名前付け重要。または,良いコードは良い名前から生まれるんです。―その1 良い名前の条件

この記事を読むのに必要な時間:およそ 2 分

画像

本連載が書籍化されました。

良いコードを書く技術 ─ 読みやすく保守しやすいプログラミング作法

縣俊貴 著/A5判・240ページ
価格2394円(本体2280円)
ISBN 978-4-7741-4596-9

Coding is freedom(犬井ヒロシ風)

プログラミングは自由です注1)。たとえば「コネクションに接続できないときの例外クラス」が必要になったら,「FatalConnectException」「CannotConnectException」「ExternalConnetException」といったふうに,いかようにも作成することができます。設計やアーキテクチャの決定なども組み合わせは無限にあり,どれを選択するかに絶対的な決まりはありません。今回は自由だからこそ難しい「名前付け」についてのお話です。

注1)
自由があまりないプロジェクトもあるかとは思いますが……。

良い名前をつけよう

プログラミングを行っていると,変数名,メソッド名,クラス名など「名前」を考える場面が多々あります。良い名前は重要です。

大切なことなので,もう一度言います。

  • 良い名前は重要です。

なぜ重要なのかということは,あとで詳しく説明します。ここでは,いつものように代表者の方々に「名前付け」についてコメントしてもらいましょう。

良い仕事をしたい普通のプログラマ

達人プログラマを目指す初級~中級のプログラマ

達人プログラマ

お,なんだか,達人プログラマのキャラが前回と変わって人間が大きくなっています。達人はやっぱこうあるべきですよね。

良い名前の条件

それでは,良い名前の条件とはどのようなものでしょうか? いくつか挙げていきます。

説明的で意味・意図を表している

良い変数名,メソッド名,クラス名は,名前がその中身を正しく表しています。そのような名前はコメントを読むまでもなく,名前を見るだけでその役割を理解できます。良い名前はコードの理解を助けますが,悪い名前は読む者を混乱させ,勘違いを生み,バグの発生を助長します。

一例を見てみましょう。「消費税金額を3桁ごとのカンマ区切りの文字列に変換して出力する」処理です。

// 消費税をカンマ区切りに変換
String s = fmt(value);
// 整形済み消費税出力
out.println(s);

変数名(s,value),メソッド名(fmt)がとても短いので,名前を見ただけでは何の役割を持つのかわかりません。そのため,1行ごとに役割を伝えるコメントが必要になっています。

String formattedConsumptionTax =
    insertGroupingSeparators(consumptionTax);
out.println(formattedConsumptionTax);

それに対して上記は,変数名(formattedConsumptionTax,consumptionTax),メソッド名(insertGroupingSeparators)ともにたいへん長いです。名前で役割を説明しているので,コメントなしでも理解が容易です。つまり,こちらのほうが良い名前が付いていると言えます。

しかし,いささか名前が長過ぎますよね。あまりにも名前が長いと,逆にコードの可読性が落ちてしまいます。その場合,次のように短く省略するとよいでしょう。

String formattedTax = insertGroupSeps(consumptionTax);
out.println(formattedTax);

すっきりしてずいぶんコードが読みやすくなりました。これくらいであれば,名前を短くしても意味は十分に伝わります。省略によって意味がわかりにくくなってしまっては本末転倒ですので,その点を注意した名前付けが重要です。

省略のコツはいくつかあります。上の例では,

  • 先頭の数文字を残す(Sep)
  • ingの削除
  • 単語の削除

を行っています。そのほかにも,

  • 語頭以外の母音を削除する(image→img)
  • 強い音を残す(server→svr)
  • 略語の利用(database→db)

などがあります注2)。

注2)
困ったときは,http://www.acronymfinder.comなどの短縮語検索サイトも便利です。たとえば,「format」と入力すると短縮語として「fmt」が表示されます。

著者プロフィール

縣俊貴(あがたとしたか)

学生時代にMSXで制限された環境でのプログラミングの楽しさを学ぶ。以来,オープンソースのWiki実装「MobWiki」の開発や受託開発などを経て,現在はプロジェクト管理ツール「Backlog」,ドローツール「Cacoo」など,コラボレーション型のWebサービスの企画と製品開発を行う。また,Webアプリケーションフレームワーク「Cubby」のコミッタを務める。福岡在住。株式会社ヌーラボ所属。

ブログ :http://d.hatena.ne.jp/agt

Twitter:@agata

コメント

コメントの記入