nikkie-ftnextの日記

イベントレポートや読書メモを発信

読書ログ | #ミノ駆動本 12章「メソッド(関数)」の読書会予習に着手。メソッド設計を網羅する総復習の章!

はじめに

天海春香さん、桜坂しずくさん、吉浦康裕監督、誕生日おめでとうございます
nikkieです。

『良いコード/悪いコードで学ぶ設計入門』(通称ミノ駆動本)の読書ログです。
次回のミノ駆動本_読書pyに向け、12章「メソッド(関数)」の予習に着手しました。

目次

12章「メソッド(関数)」

メソッドの設計方法を集中的に扱う章です。

12章目次

公開されている目次を引用します。

12 メソッド(関数) ―良きクラスには良きメソッドあり―

12.1 必ず自身のクラスのインスタンス変数を使うこと
12.2 不変をベースに予期せぬ動作を防ぐ関数にすること
12.3 尋ねるな,命じろ
12.4 コマンド・クエリ分離
12.5 引数
12.6 戻り値

省略していますが、コラムも豊富です。

総復習の12章

12章はずばり総復習

これまでの章ですでに解説されているメソッド設計についても、本章であらためて取り上げて網羅します。(p.406 Kindle版)

ミノ駆動本を通してクラス設計を学んできました。
メソッドはクラスにつきものですよね。
ミノ駆動本に散りばめられたメソッド設計のノウハウが、12章で一覧にされます。

主なところでは以下の章のコード例で示したメソッド設計について言及していました。

  • 3章 クラス設計
  • 4章 不変の活用
  • 5章 低凝集

メソッドの引数に関連するということで、6.6 フラグ引数や9.6 null問題も再度取り上げられます。

知ったこと:コマンド・クエリ分離

この章の新規トピックと思われたのが、「12.4 コマンド・クエリ分離」。
コマンドとクエリを同時に行うメソッド(=モディファイア)で実装して、コマンドだけ、または、クエリだけ再利用できない😢は、私にはあるあるです。
モディファイアだから再利用しにくくなるわけで、分離するというのはしっくり来ました。

私が(自分で書いておいて)再利用のしづらさで苦しんできた例だと、ファイルを読み込んだり書き出したりするのと、データをほしい形に加工するを同時にやる関数はモディファイアだったのかなと思います。

  • ファイル入出力は副作用なので、広義のコマンドと言えるかなと思います
  • データの加工がクエリ

ファイル入出力とは関係なくクエリだけ実行したかったり、全然別形式のファイルを加工した上でクエリだけ実行したかったりするんですよね。
モディファイアそのものは再利用しづらいので、クエリをなぞって何回もおんなじ実装したり。
振り返ると、これはリファクタリングの契機だったわけですね。

あと、分離するほうがテストも書きやすいと思います。

終わりに

ミノ駆動本 12章「メソッド(関数)」の読書会に向けた予習ノートでした。
この章はPythonに関係するトピックが浮かぶというよりも、(プログラミング言語によらない)メソッド設計について考えたいという気持ちです。
メソッドを扱った章がある『Clean Code』とか、合わせて予習したいですね(できるかな?)。

P.S. 4/7(金) 12章「メソッド(関数)」のミノ駆動本_読書py(終)!

次回ミノ駆動本_読書py(Python使い視点でミノ駆動本を読む、みんなのアウトプット中心の読書会)は4/7(金)、なんと最終回です!

最終回に12章というのは全くの偶然です。
私たちはそのときに一番読みたい章を決めて読み進んできたのですが、最後に残ったのが総復習の12章とは!
最終回にぴったりですね〜

常連さんも、お久しぶりの方も、はじめましての方もメソッドに興味ある方、大歓迎です!
ぜひぜひお気軽にお越しください〜