はじめに
こんな景色、ずっと見たかった。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章「設計の初歩」なのですが、
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年4月26日
クラスと出会った直後にここを読みたかった!
最初Dogクラスで教わり、クラス自体の使い所が長いこと分からなかったのですが、この章のHitPointクラスの例と説明は秀逸!
ベタ書きから始めてクラスに至ります
2.4のクラスの例はまだ序の口です。
続きを読んだり、Pythonでどう実装するかを(読書会の機会も使って)考えたりしていきたいと思っています。
ミノ駆動本 読書会やりまーす!📣
#ミノ駆動本 読書会立ち上がってるんですね!
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年5月18日
私はPythonでどう適用するかを考えてみたくて、読書会主催ありだなぁと思ってます。
Pythonコミュニティで動きあれば教えてもらえると嬉しいです
なければ主催すればいいんだし、誰も来なければ1人で読めばいいんだし。
6月上旬に初回とかで考えてます https://t.co/OyMGIYlUjT
「1人で読めばいいんだし」と思っていましたが、10人を超える参加者が集まりました!
参加ありがとうございます。
また、ツイートへの反応や拡散も誠にありがとうございます。
初回は 6/3(金) 19:30〜 です。
まだ参加申込できますよー
読書会準備の裏話:命名篇
命名に込めた意図を共有します(本邦初公開!)
- 「Pythonに関係する読書会」を表したかったので、読書py(ドクショパイ)としました
- ミノ駆動本の読書pyですが、「Pythonならsnake caseだよね」ってことで「ミノ駆動本_読書py」となります
- 何回か開催する予定なのですが、「番号表記はPythonのシーケンスっぽくしよう」と
ミノ駆動本_読書py[0]
という命名3となりました4- 初回を表すべく、最初のインデックスの0としています
終わりに
もし私と同じ「クラスってどんなシーンで使うの?」という疑問を抱えている方がいたら、ミノ駆動本2章を読んでみてください5。
1章・2章は新卒プログラマさん向けというのもあり、読みやすく感じました。
-
入門書のクラスの例が文法説明のためだけの例になりがち問題は、プログラミング学習に関するイシューのようにも見えます。解決すると幸せになる方はそこそこいるんじゃないでしょうか?↩
-
2021年11月のオブジェクト指向LTでアウトプットしたものです。
↩#ooltjp 本日このあとのLTスライドです
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2021年11月24日
「そうか、犬や自動車のように、処理もクラスで表せるのか!」https://t.co/1EPgN1DTv1
クラスの使い所について苦しんだ話です(注:いまもヨユーというわけではありません)
例として、今年のPyCon JPで使ったBotの設計を取り上げます -
ミノ駆動本_読書py
は変数名で何らかのシーケンスを指していると思われます↩ -
シーケンスとは「長さがあり、整数インデクスで要素にアクセスできるオブジェクト」です。ref: https://docs.python.org/ja/3/glossary.html#term-sequence↩
-
読書pyに来ていただいてもかまいません↩