LoginSignup
116
122

はじめに

理解容易性」は「保守性」の観点の1つとして重視され、多くの原則技法が紹介されているが、断片的かつ多様であり、全体像を理解することは難しい。

抽象度は高いが、体系的に観点を整理する事で、その理解の助けとなれば幸いである。

定義

理解容易性」を簡単に言えば、「理解のしやすさ」であるが、その意味から掘り下げると、「思考する量」と言い換えることができる。

本記事では理解容易性を「思考量の少なさ」と定義し、7つの観点に整理した。

先に要約およびチェックリストを記載し、概略を記載した。
後に詳細で理解のため、各観点毎の説明と個別の原則技法へのリンクを記載した。

要約

7つの観点の要約を先に示す。

  1. (変数や関数の)名称は分かりやすくする
  2. (変数や関数の)役割は1つにする
  3. (変数や関数の)参照は狭くする
  4. (変数や関数の)状態は変えられなくする
  5. (関数やクラスの)面積は小さくする
  6. (関数やクラスの)階層は浅くする
  7. (関数やクラスの)秩序は整え

チェックリスト

質問の形に変え、一部を詳細化した。

  1. (変数や関数の)名称は分かりやすいか?
  2. (変数や関数の)役割は複数ないか?
  3. (変数や関数の)参照は広くないか?
    1. 色々な所から参照されてないか?
    2. 色々な所参照してないか?
  4. (変数や関数の)状態は変えられないか?
  5. (関数やクラスの)面積は大きくないか?
    1. 縦の行数は長くないか?
    2. 横の文字数は多くないか?
  6. (関数やクラスの)階層は深くないか?
  7. (関数やクラスの)秩序は整っているか?

実装を終えたタイミングで確認してみて下さい。

詳細

前提

整理の為、観点を2つに大分した。

  • 識別子(Identifier)
    • 変数や関数などを他と区別するための名称や記号
  • 区画(Block)
    • 関数やクラスなど、コードのまとまり

識別子(Identifier)

名称:曖昧 -> 明瞭

識別子の名称は、曖昧ではなく、明瞭とする。

image.png

曖昧である場合、確認範囲が広くなるため、思考量が増えてしまう。

役割:複数 -> 単一

識別子の役割は、複数ではなく、単一とする。

image.png

複数である場合、複雑性への対処のため、思考量が増えてしまう。

状態:可変 -> 不変

識別子の状態は、可変ではなく、不変とする。

image.png

可変である場合、確認範囲が広くなるため、思考量が増えてしまう。

参照:広域 -> 局所

識別子の参照は、広域ではなく、局所とする。

image.png

広域である場合、確認範囲が広くなるため、思考量が増えてしまう。

参照

  • 純粋関数への転換
    • 外部との副作用を持たない関数やクラスに転換する
      • ex. グローバルや環境変数を直接参照せず、引数として受け取る
    • 転換しない場合、参照先の確認に時間を要する
      ref. Qiita: 純粋関数

被参照

区画(Block)

面積:広大 -> 狭小

区画の面積は、広大ではなく、狭小とする。

image.png

広大である場合、確認範囲が広くなるため、思考量が増えてしまう。

縦:行数

主処理部分の行数は5~10行程度、全体としても20行程度に収める。

コメント

横:字数

単純な行ではなく、一文として80字程度に収める。

階層:多層 -> 単層

区画の階層は、多層ではなく、単層とする。

image.png

多層である場合、複雑性への対処のため、思考量が増えてしまう。

  • 早期リターン
    • 主処理の必要性ない条件は先にreturnexitさせてしまう
    • させない場合、ネストの深さの理解に時間を要する
    • ガード節・アーリーリターンとも呼ばれる
    • 類型として、アーリー・コンティニュー もある
      ref. Zenn: 早期リターンを書こう
  • 関数の抽出
  • 配列・リスト操作関数への転換

秩序:雑然 -> 整然

区画の秩序は、雑然ではなく、整然とする。

image.png

雑然としている場合、複雑性への対処のため、思考量が増えてしまう。

終わりに

分かり辛い点が多いですが、良いコーディングの参考になれば幸いです。

参考

書籍

記事

116
122
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
116
122