コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

読み違いを減らす名付け

久しぶりにきのこの当該部分を読んだので雑記です。(そしてたまにはC#で例示を書いてみる)

名付けは重要である

リーダブルコードで以下のようなことが語られている

  • 汎用的な名前は避ける、aとかizとか一見して用途のわからない名前はつけない
  • 抽象的な名前より具体的な名前を使う。 change とかではなく ChangeNextPage とか。
  • 曖昧・解釈違いを起こす言葉は使わない。時間なら time ではなく sec とか hour を使うなど。

読み違いはバグを生む

極論であるかもしれないが、作り手があまり使い手を意識しない名付けをすると、使い手側が読み違い(ミスリード)を起こし、そのミスリードによってバグを生みかねない。

例えばこんな名前のメソッドがあったとする

public void SetLog()

これで連想するのは「ログをセットするということだから、なにか変数に代入するだけなのかな」と思う。だが実際に書かれているのが以下のような記述。

public void SetLog()
{
    string createText = "Logging..."
    File.WriteAllText("action_log.txt", createText);
}

SetLog は実際はログを実ファイルに書き出す処理だった。言葉を広く捉えればセットではあるが、もっと具体的に書いたほうがよかったと思える。例えば…

public void WriteLogFile()
{
    string createText = "Logging..."
    File.WriteAllText("action_log.txt", createText);
}

としてあげたほうが直感的だしミスリードも起こしにくい。

例を踏まえて

例に出した内容は極端かつ、とても些細なことではあるが、もし些細な使われ方のミスリードが積み重なると、大きな処理の意図違いを起こす危険性がある。そうなってから全体を整えて行く作業はとても大変なことが多い。そのため、日頃の小さなすれ違いを減らすことが、コード全体の健全化を図れるのではないかなと思っています。

まとめ

  • 名前付けは重要
  • メソッド名や変数名はミスリードすると使われ方が間違われる可能性があるので、なるべく誤読を減らすように名前に気を使うべき。

参考リンク

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

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

プログラマが知るべき97のこと

プログラマが知るべき97のこと