「コードで説明する」の一番単純なパターン

いまいち「コードで説明する」が理解されていない様なので単純な例で説明してみます。

「コードで説明する」の目的は頭の中にかかるコストを低く抑えることです。

  // コード1
  if (x == a || x == b) {...}

  // コード2 someStateの中身はx == a || x == bと想定
  if (someState()) {...}

この2つの実装はコンピュータにとっては等価ですが、人間の脳みそにとっては等価ではないです。

コード1を頭が理解するためには「x == a || x == b」が何を意味しているのか?という変換が必要で頭にかかるコストが高いコード。

それに対してコード2は「x == a || x == b」がsomeStateという名前によって概念化されているので、頭はsomeStateという状態があるのねというのをとりあえず認識して先に進めるので、意味の変換が起こらない分、頭にかかるコストが低く抑えられます。

一方で人間の脳みそは物事を概念とそのネットワークとして理解していて、それをとてつもなく効率的に扱えます。逆に概念化されていない物事はネットワークがうまく機能しないので非効率的になります(ここをもうちょっと掘り下げると「なぜオブジェクト指向が人間に優しいのか?」って所にたどり着けます。)。

重要なのは名前がつけられているかどうか?という所で、名前が無いものに名前を与えて概念化するとネットワークが強化されて可読性と理解の容易性を圧倒的に高められる。というのが「コードで説明」の仕組み。

「コードで説明」の中心にNamingがあるのは間違いがないですが、先のリファクタリングでしたように、よく読まないと見えてこないシーケンスをわかりやすい状態に変更したのも、全部頭の中にかかるコストを最小限に抑えるためです。

要は見たまんま、書いてあるまんまにしておくと脳みそ君が勝手に頑張って処理してくれますってことです。これを利用しない手はない。