# ミノ駆動本_読書py[15] みんなのメモ ###### tags: `ミノ駆動本` - このメモはWebに公開されています(HackMDチーム) - リンクを知っている人は見られます - HackMDにログインして編集できます ## お願い事項 https://twitter.com/MinoDriven/status/1541334416622256130 > 【お願い】 拙著『良いコード/悪いコードで学ぶ設計入門』に関する情報発信について。 ブログ等で発信の際は、引用の範囲を超え、著作権侵害となる場合は勿論のこと、 拙著の詳細内容が分かるような表現での公開はお控え頂けると助かります。 ご感想や拙著に基づく試行錯誤は歓迎です。 #ミノ駆動本 とミノ駆動さんが仰られていますので、勉強会そのものでも詳細内容がわかる記述はしないように気をつけていきましょう。 ### 今を楽しもう(録画はしないでね) ちょっとまた聞き返したいなと思う気持ちもあると思いますが、 記録に残らないことで参加者の方も発言しやすさが生まれるところは存在すると考えています。 よって、リアルタイムでの参加あるいはHackMDを確認いただくという対応でお願いします。 ## このメモについて このメモは ミノ駆動本_読書py[15] のメモです https://pythonista-books.connpass.com/event/277119/ 読む範囲: 12章 ミノ駆動本のサポートページより、Javaのサンプルコードが見られます。 https://gihyo.jp/book/2022/978-4-297-12783-1/support ## 読書会の流れ * 20:00〜20:30 **自由参加**のもくもく会(個人作業) - 事前に読む時間がとれなかった方はここで読んじゃいましょう(ざっとで大丈夫です) - 合わせて、この**HackMD**に話したいことを各自書いてください - ログインすれば書ける設定にしています - ここがわからん、ここはわかった お気軽に書き込んでみてください - HackMDの書き込みに投票し、みんなが気になるところをわいわい読み解いていきます * 20:30〜22:00 読書会本編(みんなでわいわい) * Discordでスライド共有して別途案内します * 20:30開始の本編では、「わたしこれ気になる!」 という話題に `:+1:` と書いて投票します。 * :+1: する上限はありません。 気になる話題に全部 :+1: しちゃいましょう。 ただし1つの話題には1個だけ:+1:でお願いします * 票数が多い話題から話していきます。 ### 12 メソッド(関数) ―良きクラスには良きメソッドあり― - この章、いろいろな章への参照があって、総復習って感じでしたね - 『Clean Code』の3章 関数を読んでから戻ってくると、ミノ駆動本12章は入り口で、『Clean Code』も読むといいぞ〜って気持ちです - 抽象レベルが抽象から具体に並ぶように、1つ1つは小さい関数をいっぱい並べてプログラムにシステムを語らせるという話が興味深かった :+1: :+1: #### 12.1 必ず自身のクラスのインスタンス変数を使うこと - JetbrainsのIDEだとこの辺り注意してくれますよね :+1: - へ〜。怒ってくれるのいいですね - - #### 12.2 不変をベースに予期せぬ動作を防ぐ関数にすること - インスタンス変数を「不変に」というのは、できていなくて反省... - 前項と合わせて、カプセル化って感じする :+1: - #### 12.3 尋ねるな,命じろ - 何回か挙げた気がしますが :+1: - https://docs.python.org/ja/3/glossary.html#term-EAFP - - - #### Column クソコード動画「カプセル化」 - また見ますかね? :+1: - https://twitter.com/MinoDriven/status/1142926621583663104?lang=ja - - はりつけw - getterとsetterが2つあるのは、FoolController用のgetter/setter、UN_Controller用のgetter/setterってことなんですかね? - Encapsulation(カプセル化)は[『リファクタリング』で紹介されるテクニック](https://refactoring.com/catalog/)にもいくつかありますが、getter/setterを実装することではないというのは同意見です - #### 12.4 コマンド・クエリ分離 - 今回の例って悪いコードと良いコードの結果が変わっている気がするんだけどどうなんだろう(良いコードでは悪い結果と全く同じ結果のコードを示していないの意です) - モディファイアは良いコードではないから残していないと考えています - モディファイアは必要になったときにコマンドとクエリを悪魔合体して作ればいいってことじゃないかなー(下に例) :+1: ``` int gainAndGetPoint() { gainPoint() return getPoint() } ``` - やってた。 - 既存のメソッド(基本ライブラリ)がそういう仕組みのものが多かった記憶がある - #### 12.5 引数 - 「引数は可能な限り少なく」、『Clean Code』の関数の章でも言われてたやつ! - 引数が増えてくると単体テストコードが組み合わせ爆発を起こしてツライです... - ミノ駆動本のこの章になくて『Clean Code』で見たのは、引数オブジェクト(パラメタオブジェクト)ですね :+1: :+1: - 『リファクタリング』でも紹介される、引数の数を減らすテクニックです - 増えるクラスの管理はちょっと考えたい所 - #### 12.6 戻り値 - 最後の12.6.3の考え、よくわかる - よく携わっているコードがtry-exceptで何でも囲むんだけど、そうじゃなくって何か特定の処理だけ出したほうが良いコードになるよねって言う感じがする(?) - 『Clean Code』にはtryの中を1つのメソッドに抽出、exceptの中を別の1つのメソッドに抽出という指針が示されてました:+1: - どれも - #### Column メソッドの名前設計 - - - #### Column staticメソッドの扱いに注意 - - -