ミノ駆動本_読書py[1]参加メモ?

ミノ駆動本_読書py[1]参加メモ?

pythonista-books.connpass.com

こちらのイベントを引き続き共同主催しました。

主催者ではなく参加者の観点でも参考になることが多かったのでブログを書いておきます(以下、ですます調ではなくなりますがご了承ください)。

ガード節

処理の対象外となる条件をメソッドの先頭に定義する方法をガード節といいます。

良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方 仙塲大也 著 初版第1刷 P27, 28より引用。

コンストラクタ(Pythonの場合はinitが該当し、実際にはinitはイニシャライザではあるが)にそういう処理を書くことは無かった(気がする)のでなるほど、と勉強になった。

単純に初期化するだけのものとして捉えていたけど「こう言う概念があるのか!」と知ることができて良かった。

ガード節を使わない場合どうなるか考えたのだけど、値を入れた後にその値をチェックするロジックを別途作成して呼び出すことになると思っており、このケースの場合「他に使う人がそれを忘れる可能性がある」のかなと。そういう意味で誰がどう使っても大丈夫な、言葉が適切かはちょっとわからないがフールプルーフなクラス設計というのは大事だなと思った(こうした概念は結構全体的に通じているような気もする)。

Pythonでは@dataclassでfrozen=Trueをすることで不変にできそう(完璧ではないが)

@dataclassを使ったことが全然無かったが、共同主催者のにっきーさんが書いてくれたソース

github.com

object.setattr を使えば書き換えられるよね、という話があったが読書会の中で「よっぽどのことが無い限り使わないはず」それを利用する場合はそもそもの設計などがおかしいのでは?という話もあり、実際にはコードレビューあるいは静的解析ツールでカバーできるだろうかな気にしないで良さそうだな、という結論。 完璧に防ぐ方法がないじゃん!と思ってましたが、なんとでもなりそう感があって良かった。

カプセル化

クラスを使ったプログラミング?はちょっとずつ出来るようになってきたというか馴染んできたけど、オブジェクト指向とは、という話で出てくるカプセル化ってなんだっけなと忘れていた。以下自分の参加時のコメントを引用。

めっちゃ初歩的だけどカプセル化って、必要な手続き(メソッド)のみを外部へ公開すること…なんですね。:+1: :+1::+1: 外部へ公開すること… となると、なんだろう、パブリックなメソッドが1つ、インスタンスから呼び出して実行される物があって、そのほか公開しないものはプライベートにしておく、で良いのかな(うまくいえるような言えないような・コードが書けそうで書けなかったw):+1:

読書会の中で参考資料として教えてもらったリンクがとてもわかりやすかった。

qiita.com

カプセル化、必要なもの以外を隠すという意味でしっかり捉えることが出来て自分の場合はポケモンに出てくる「モンスターボールか」となった。 ポケモントレーナーがボタンを押すことでポケモンを出す・あるいはしまうことが出来るけど、使う側はどうなっているか知らなくて使えるので、そういうことかと。 例えばカプセルだったのでカプセル形状のモンスターボールでそのまま考えを巡らせたけど、身の回りのデバイスなども中身の実装は利用者である我々に隠されており、これもカプセル化かと学びが増えた。

終わり

いやー、ただ本を読むだけだとここまで学びにならなかっただろうし、とても勉強になりました。今まで自分もなんとなく気になっていたところを改めて教えてもらうことができて解像度が高まってよかったです。あとは手を動かしたい・・・