nikkie-ftnextの日記

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

#ミノ駆動本 2章を読んで、クラスの使い所がようやく分かった気がします

はじめに

こんな景色、ずっと見たかった。nikkieです。

いやー、『良いコード/悪いコードで学ぶ設計入門』(以下ミノ駆動本)、売れてますね!
この記事はミノ駆動本について以下2点をアウトプットします:

  • ミノ駆動本 2章のアウトプット
  • ミノ駆動本 読書会のお知らせ

目次

ずっと思ってきた、クラスってどこで使うの?

プログラミングは大学の授業からなのですが、ソフトウェアエンジニアとして働いている中でも、クラスの使い所がかなり長いこと分からなかったんです。

入門書でクラスの文法を説明するために登場する例を見て、文法は分かるのですが、じゃあどんなシーンでクラスを使うのか、関数よりもクラスを選ぶ理由は何なのか、私があたってきた教材からは掴みかねていました。

例えば、Pythonチュートリアルでは犬の例があります。
https://docs.python.org/ja/3/tutorial/classes.html#class-and-instance-variables
ただ、私の普段のプログラミングに犬は出てこないんですよ1
「クラスってどんなシーンで使うのーー?」

言い換えると、関数で書くのが向かないシーンがあり、そこでクラスが使われると思うのですが、「じゃあそのシーンって具体的にどんなシーンなの?」というのが、犬クラスなどの文法説明の例からピンとこなかったわけです。

使い所が分からずクラスについては苦手意識があったのですが、その中で、犬(や自動車)のような具体的なものだけでなく、処理もクラスで表せる!という気付きがありました(上のスライド2でアウトプットしています)。
この気付きでようやく「クラスの使いどころちょっとだけは分かったかも」という感じでした(処理を表したクラスに属性をもたせることで、関数だったら何回も渡していた引数がなくなってスッキリし、「ちょっといいかも」と思えたんですよね)。

ミノ駆動本 2章は明確なクラスの例を示した

2.4にHitPointクラスが登場します。
HitPointに関係するロジックをHitPointクラスにまとめています

  • ダメージを受けるメソッド
  • 回復するメソッド

強く関係し合うデータとロジックを一箇所にギュッと集めておく (p.51)

Pythonで書いてみた実装はこちら:

この例を見て初めて「クラスってこうやって使うんだ」と腹落ちしました。

2章は2.4に向かう構成も分かりやすいです。
ベタ書きの処理を

  • 2.1 命名(省略しない)
  • 2.2 再代入しない
  • 2.3 メソッド化(ロジックを整理)

カイゼンしていきます。
そして、2.4でデータとロジックをまとめたクラスの例をHitPointクラスで示すのです。

ベタ書きの処理をカイゼンしていき、それがクラスにもつながるというのは、もっと早く読みたかった!ですね

2.4のクラスの例はまだ序の口です。
続きを読んだり、Pythonでどう実装するかを(読書会の機会も使って)考えたりしていきたいと思っています。

ミノ駆動本 読書会やりまーす!📣

「1人で読めばいいんだし」と思っていましたが、10人を超える参加者が集まりました!
参加ありがとうございます。
また、ツイートへの反応や拡散も誠にありがとうございます。

初回は 6/3(金) 19:30〜 です。
まだ参加申込できますよー

読書会準備の裏話:命名

命名に込めた意図を共有します(本邦初公開!)

  • Pythonに関係する読書会」を表したかったので、読書py(ドクショパイ)としました
  • ミノ駆動本の読書pyですが、「Pythonならsnake caseだよね」ってことで「ミノ駆動本_読書py」となります
  • 何回か開催する予定なのですが、「番号表記はPythonシーケンスっぽくしよう」とミノ駆動本_読書py[0]という命名3となりました4
    • 初回を表すべく、最初のインデックスの0としています

終わりに

もし私と同じ「クラスってどんなシーンで使うの?」という疑問を抱えている方がいたら、ミノ駆動本2章を読んでみてください5
1章・2章は新卒プログラマさん向けというのもあり、読みやすく感じました。


  1. 入門書のクラスの例が文法説明のためだけの例になりがち問題は、プログラミング学習に関するイシューのようにも見えます。解決すると幸せになる方はそこそこいるんじゃないでしょうか?

  2. 2021年11月のオブジェクト指向LTでアウトプットしたものです。

  3. ミノ駆動本_読書pyは変数名で何らかのシーケンスを指していると思われます

  4. シーケンスとは「長さがあり、整数インデクスで要素にアクセスできるオブジェクト」です。ref: https://docs.python.org/ja/3/glossary.html#term-sequence

  5. 読書pyに来ていただいてもかまいません