ルールズ・オブ・プログラミング読書会vol.16
https://scrapbox.io/files/655372c161a776001bf71cc6.jpeg
開催日時
2024年7月23日(火) 19:30~21:00
開催URL
参加人数
5人
ウォーミングアップ
BigQueryのSQL書き方について
ルール7
もっと複雑な例
「そして、コンストラクターの引数の追加や~」
16個のコンストラクタ引数
そもそもルール4に抵触している
Xray
ゲームによくある壁越しでも敵が見えるようなエフェクト
デフォルトコンストラクタになったが呼び出し順序の要件が増えてしまった
値セット→commit→drawSphereの順で呼び出す必要がある
なんかこのコード不自然だよね
完成系から逆算した結果こうなった感
この辺突っ込める人には間違う人の気持ちがわからない
(この段階では)Params型ではなくDebugDrawer型だったら問題なかった
「呼び出し順序の間違い」をそもそも不可能な状態にする
commit呼び出しする必要がなくなった
もともとの作りでもdrawSphereの中でcommitすればよかったのでは?
commitを足してわざわざ問題1つ増やしてからDraw型を追加してその問題を減らした
プラマイゼロで良くなってない
無理やり感
言いたいことはわかるが例がよくない
メソッドチェーン式でセット
自己満足の世界ですねという感想
Params().setなんとか関数()がメソッドチェーンの最後いつの間にかDraw型のオブジェクトを返してるのなんで!?
おそらく暗黙の型変換が行われている(そこ説明して!)
暗黙の型変換よくない
それこそcommit()の出番じゃないか
C++でメソッドチェーンはあまりスタンダードではない
けど唯一IOストリームで頻出( <<でつなげる)
C++はコンストラクタが関数
関数なのでできることが制限される
C99の位置指定初期化
C++20で位置指定初期化っぽい書き方ができるようになった
けど順番を入れ替えたりはできない
クラスのメンバの初期化順の話
デストラクタで逆順に開放
メンバにリソースと非リソースに分かれている
非リソースなら開放順は関係ない
結局Sucker Punchではメソッドチェーンつかってないんかい
他のみんなが使ってないから却下しているだけでそういう文化があったら使ってた
みんなやってるからいい、という考えは良くない
変なコードは真似しない
驚き最小の原則
もういろいろ驚いてるよ
Params型がいつの間にかDraw型になった
draw型がdraw関数を呼ぶ
Paramsの中にすでにSphere情報は含まれていたので実質Sphere専用では?
メソッドチェインの代わりにテンプレートを使う
パッと見わからなかったけど訳注でコンストラクタの引数が可変引数テンプレートになっていることがわかった
原文内にも書いてよ!
コンストラクタの引数がテンプレートだと何を入れていいのかコンストラクタの宣言見ただけでは分からないデメリットが
テンプレートよりメソッドチェーンのほうがやってることがわかりやすい気も
.を打った時にIDEが関数をサジェストしてくれる
英二郎の広告がうざくて止めた話(本文関係ない)
状態制御の整合性を図る
次回ここから
まだ話続くの?
もうこれまでの例で十分じゃない?
お悩み雑談室