オブジェクト指向LT会 vol.4
2022/06/29 nikkie
株式会社ユーザベースのデータサイエンティスト(自称えぬえるぴーや😎)
『アイの歌声を聴かせて』冒頭17分公開 ! 面白いからみんな観て🙏
ここから本題
N=1(個人の意見です)
副題: 保守しやすい 成長し続けるコードの書き方
技術書だが、和書全体 のランキング入り(大快挙だ!🎉)
IMO: オブジェクト指向のクラスの入門書 でもある
プログラミング言語のクラス(という文法)に入門した後に、ミノ駆動本2章オススメ
インターフェース による条件分岐の実装(6章)
IMO:ミノ駆動本で一番の学び(現時点)
(本日既出ですね😃)
ミノ駆動本、読みながら考える
Pythonでの実装をアウトプットする場
フィードバック がほしい
「なければ主催すればいいんだし」ってことで読書会のグループ作りましたhttps://t.co/oY7eAybj7s
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) May 20, 2022
直近では #ミノ駆動本 をPythonでどう適用するかを考える読書会を予定しています。近日公開!
やりたいと発信したら、「私も」と手を挙げていただいた方がいて2人teamになり、とてもありがたいです😃 https://t.co/spRs6TSYjo
主催:nikkie、Yumihikiさん
6月に2回開催
次回は 7/1(金) ストラテジパターンのところ (ウェルカムカモーン)
アウトプットメイン な別の読書会のやり方を参考に
事前に読んでくる(直前もくもく会あり)
読書会では「ここがわからん」「ここはわかった」をボイスチャット&テキストチャット
2つ 共有
読書会で出会った言葉
1.3 さまざまな悪魔を招きやすいデータクラス
「悪魔」= 設計や実装上の問題 (はじめに)😈
3章 クラス設計では、データクラスの悪魔を退治していく(成熟したクラスへ)
『現場で役立つシステム設計の原則』(2017)
副題:変更を楽で安全にするオブジェクト指向の実践技法
データとロジックを別のクラスに分けることがわかりにくさを生む
3章の中のタイトル
データだけを持ち、ロジックを持たないクラス
プログラミング言語の文法的には誤っていない
オブジェクト指向のクラスの使い方として誤り
Pythonの標準ライブラリには dataclasses があるんです
相性のいい2冊の本、著者が共演!!
読書会で深まった理解
「値を クラス(型)として表現 する設計パターン」(#ミノ駆動本 3章 p.77)
「値を扱うための専用クラスを作るやり方」(#増田本 1章 Kindle の位置No.687)
「値オブジェクトを 不変 にする」(#増田本 1章 Kindle の位置No.727)
@dataclass(frozen=True)
class Money:
amount: int
currency: str
def __post_init__(self):
if self.amount < 0:
raise ValueError("金額が0以上でありません。")
def __add__(self, other: Money) -> Money:
if not isinstance(other, Money):
return NotImplemented
if self.currency != other.currency:
raise ValueError("通貨単位が違います。")
added = self.amount + other.amount
return self.__class__(added, self.currency)
#ミノ駆動本 3章を参考にしました(ソースコード)
>>> yukichi = Money(10_000, "¥")
>>> yukichi.amount = 1_000_000
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 4, in __setattr__
dataclasses.FrozenInstanceError: cannot assign to field 'amount'
属性に再代入できません
>>> object.__setattr__(yukichi, "amount", -1_000_000)
>>> yukichi
Money(amount=-1000000, currency='¥')
マイナス百万円爆誕!!💥
Pythonには不変はない(みたい) 例: object.__setattr__
「不変が前提の値オブジェクトを変更したい」と考えるということは、 何かがうまくいっていない のでは?
大元の問題を特定し解決するために、コミュニケーションを取ろう
ミノ駆動本の読書会(Python使い視点)を開いてます(次回は 7/1(金) 条件分岐)
読もう、ミノ駆動本 & 開いてみよう、読書会
アウトプットして学ぶ & 他の方のアウトプットがインプットとなって学ぶ
#ミノ駆動本 × #増田本 、 合わせ読み で理解深まる
Pythonに不変はないが、値オブジェクトはできる 👉 思うに鍵はコードの外の コミュニケーション
これまでの読書py参加者の皆さまに感謝申し上げます
今後ともよろしくお願いします(ウェルカムカモーン)