[オブジェクト指向]良いコード/悪いコードで学ぶ設計入門 はじめに

mino6_1プログラミング

どうも。つじけ(tsujikenzo)です。このシリーズでは、2022年5月に発売されました書籍「良いコード/悪いコードで学ぶ設計入門」についてお送りします。今日は1回目です。

章立ては順不同になりますが、ご了承ください。

書籍について

著者のミノ駆動さんを知ったのは、2021年のconnpassの座談会で、なぜかすぐファンになりました。

その後も、怨念のこもった過去のスライドや、酔っ払いながらのSpace配信を通じて、氏が何を言わんとするのかを考えてきました。

ひとことで言うと 「設計はスキルであり、学べば高められる」 ということです。

われわれのようなノンプログラマーには、設計のスキルをまなぶ機会が、あまりありません。

むしろ、 設計(アーキテクチャ) や 設計者(アーキテクト) という概念すら、知られていないのが現状です。(この件についてブログを書きました

わたしは、プロであれ、ノンプログラマーであれ、 「設計のスキルを高めれば、もっと早く社会の課題を解決できる」 と思っています。

なので、書籍出版のニュースを聞いてとても喜びました。さっそく読み解いていきたいと思います。

書籍の全体図

本書籍は、全17章で構成されています。大きく分けると3つに分かれます。

  • 1~2章・・・入門編(悪しき構造を知り、何を設計するのかを学ぶ)
  • 3~12章・・・実践編(クラスや条件分岐など、具体的な設計手法を学ぶ)
  • 13~17章・・・発展編(モデリングや、開発プロセスなどを学ぶ)

他の言語で読み替えたり、考察すべきは、3~12章の各章です。

順不動になりますが、読み解いていきたいと思います。

今回は、6章「条件分岐」をお届けします。

6章「条件分岐」の構成

6章は、42ページあり、もっともボリュームがある章です。(平均は、19ページです。)

この章は、条件分岐がメインテーマで、 「迷宮化した分岐処理を解きほぐす技法」 というサブタイトルが付けられています。

著者による、章の解説はこちらです。

条件分岐は、条件に応じて処理を切り替える、プログラミングの基本制御です。 条件分岐の複雑さを低減し、コントロールできるようになるための設計方法を解説します。 特にロジック単純化の鍵を握る、interfaceの使いこなし方について重点的に解説します。

以下、6つの節でグループ分けされています。

  1. 条件分岐のネストは早期returnで解決しよう
  2. switch文の重複を解消しよう
  3. 条件分岐の重複とネストを解消しよう
  4. 型チェックで分岐しない
  5. interfaceを使いこなそう
  6. フラグ引数をリファクタリングしよう

条件分岐と早期return

3章の復習ですが、処理の対象外となる条件を、メソッドの先頭に定義する方法を 「ガード節」 と呼びます。

function myFunction6_1() {
  /**
   * 税込み金額を返す関数 
   * @param {number} price
   * @return {number} 税込み金額
   */
  const getIncludeTax = price => {
    if (price < 0) throw new Error("priceが0以下です"); //ガード節
    return price * 1.1;
  }
  console.log(getIncludeTax(-10)); //Error: priceが0以下です
}

ガード節の考えをもとに、 「もし条件式に当てはまらなければ、関数をreturnしてしまう」 というテクニックがあります。

これは、早期returnと呼ばれ、if文のスコープをできるだけ短くする効果があります。

function myFunction6_2() {
  /**
   * 税込み金額を返す関数 
   * @param {number} price
   * @return {number} 税込み金額
   */
const getIncludeTax = price => {
  //priceがマイナスであることはあり得ない
  if (price < 0) return;
  //priceが1000を超えることはあり得ない
  if (1000 < price) return;
  //priceを使った様々な処理
  //中略
  const result = price * 1.1;
  return result;
  }

  console.log(getIncludeTax(100)); //110.0000
}

とくに、else if文で条件式がネストしてしまうときは、早期returnを使って、コードをすっきりさせましょう。

まとめ

以上で、「この書籍と6章について」をお送りしました。

6章前半に登場する、早期returnについてもかんたんに紹介しました。

次回は、「switch文の重複とクラスの肥大化」 をお届けします。

このシリーズの目次

タイトルとURLをコピーしました