ken1flanのブログ

自己紹介・最近やってることなどを書くつもりです。

良いコード/悪いコードで学ぶ設計入門 12章のメモ

gihyo.jp

良いコード/悪いコードで学ぶ設計入門読書メモです。

長いので章ごとにしてます。

12章 メソッド(関数) ―良きクラスには良きメソッドあり―

12.1 必ず自身のクラスのインスタンス変数を使うこと

  • rubocopで言ってくれるので助かってます…!
    • 慣れていない言語は特に最初からこういった助言をしてくれるツールをいれるようにしてます…!
  • たまに置き場に困って、作っちゃうこともありますが…FIXMEを入れるようにしてます :pray:

12.2 不変をベースに予期せぬ動作を防ぐ関数にすること

  • 並行処理がなければそこまで…という気持ちもありますが…。

12.3 尋ねるな、命じろ

  • 相手の状態を尋ねて、それに合わせて処理をする…じゃないってことですが…ついついやっちゃいがちです。気をつけます…!

Column クソコード動画「カプセル化

  • getter/setterは……fat controllerはこれのせいかもなぁ…。
    • ちょっと学習しないと、そこから抜け出せないというか…。
    • うちのコード、まだそんなところがいっぱいあります…。
  • ちょっとした勘所がある気がしてます。

12.4 コマンド・クエリ分離

  • 激しく同意…。
  • 一番嫌なものは、クエリに見えるメソッド名なのに何かしら副作用があるもの…。
  • コマンドでも、create_postみたいなメソッドは生成されたpostを返すのが自然かと思いますが、これはいいの?

12.5 引数

12.5.1 引数は不変にすること

  • 気づかずに変更されているとシンドいですが…。
  • よく考えたら普通値渡しだから、割と平気では……?…と思ったけど、オブジェクトの参照が来たりして、普通に操作できちゃいますね…。
  • 毎回finalは面倒そう…。
    • 静的解析ツールで引っ掛けられればそれでもいいかも。
      • rubocopではできなかった…。

12.5.2 フラグ引数は使わない

  • テストを書くようになってからやらなくなりました。
    • テストパターンが膨大になってしまって、わけが分からなくなるんですもん。
    • こういうことに気づけるので、テストはいいなと思ってます。

12.5.3 nullを渡さない

  • 言語的にサポートの入っていると気が楽でいいんですが…。
    • Dartの変数宣言の?とか。

12.5.4 出力引数は使わない

  • 昔にCでやってたときにはめちゃくちゃ必要だったんですが…いま欲しいと思うことがない気がしてます。
  • 5.4を見に行ったら…それは別のオブジェクトの操作だろ…みたいでした。
    • 普段からメソッドの持ち主については考えるようにしています。
  • 使いたくなったら再考しよう、かも。

12.5.5 引数は可能な限り少なく

  • テストを書くようになってから、気にするようになりました。
    • だってテストが大変なんだもん。
    • …つまり、複雑なコードだってことですよね…。

12.6 戻り値

12.6.1 「型」を使って戻り値の意図を表明すること

  • これは言語の仕様でなんとかしたいところ…。
    • Rubyも型定義を使えるようになっているので、活用していきたいです…が、まだやってません><
  • 前職の古いPerlのコードで、自由気ままな返り値の型でしんどい思いをしました。
  • プリミティブ型じゃなく、クラスで間違いを減らせる…なるほど。
    • やったことないですが…やってよかった!という実感のある方がいるか、訊いてみたい…。

12.6.2 nullを返さない

  • い、いちぎょう……!

12.6.3 エラーは戻り値で返さない、例外をスローすること

  • -1でエラーにするのは…身近にシェルがあるから、そういう気持ちになってしまってました。
    • 例外のほうが便利ですよねえ。
      • …と思ったら、Goは例外がないんでした。
        • gihyo.jp
        • エラーは値だから、パニックするな
          • qiita.com
            • 翻訳してくれてました。
              • 例外機構があると、考えなしに上に処理をなすりつけがち。
  • 変な値では返さないようにしたほうがいいのは間違いなさそう。

Column メソッドの名前設計

  • 10章の復習。
  • 動詞+目的語は責務外のロジックの可能性が…というのはわかるので、気をつけて行こうと思います。

Column staticメソッドの扱いに注意

  • 5.1の復習。
  • staticメソッドは責務外のロジックの可能性が…というのはわかるので、これも気をつけて行こうと思います。