Open3

良いコードの書き方勉強会メモ

koko_ukoko_u

発表1

対称原理

  • 形の対称性
    • 上・下
    • 発注・受注
    • true / false
  • クラス、関数の対

正常系はOkだが、異常系でダメ

あるべきところに期待されたモノがない

「美しい」を対称性として表現しているのか

対を発展させると3対とか4対のような対称性をかんがえることも可能か

ドメインを理解するときの取っ掛かりとしての考え方

koko_ukoko_u

ケント・ベック

良いコードとは?

  • コミュニケーション
  • シンプル
  • 柔軟性

コミュ

読みやすい。意図を読み取れる
コードでコミュニケーションをする?

シンプル

余分な複雑性がない

対象の問題・課題が本質的に複雑であることは事前に判断できない。どうすれば?

柔軟性

DRY
YAGNI

パターン

  • Composed method
    • ひとつの大きなメソッドを、同じ粒度の細かいメソッドに分割していく
    • 例外の扱いが難しいんだよな
  • Double Dispatch
    • 二重になっている分岐をクラスに切り出して、組み合わせる
    • 分岐のためのクラスやメソッドを抽出する
    • 複雑じゃね?あまり好きじゃない
  • Method Object
    • 引数をたくさん持たせるのではなくてオブジェクトに纏める
    • これも最近は関数型プログラムの文脈であまりつかわないかも

けっこう古いんだよな

koko_ukoko_u

変更に強いコード

良いコード

  • 読みやすい
  • 保守しやすい
  • 早い
  • 安全
  • 小さい

例:自社プロダクト

  • テスト
  • 疎結合
  • リファクタ

どの順番?どうやって到達?

複雑さ

影響範囲の予測不能性

A, B の文脈が意外と難しい

DI

例)ログ出力
インターフェースに依存すると、どの実装を採用するかどこで決定すればよいか
インターフェースをあとで変更するのが難しい。「安定」させるにはどうすればよいか?