generated at
オブジェクトを渡さず、名前のみを渡して挙動を変えようとしたことに対する反省点
自分でコーディングしている上で躓いてしまったところに関する反省を書き留めておく

寝て起きたらちゃんとわかるように書き直すMijinko_SD
やっぱ書かないかも(めんどくさくなった)

やらかしたやつ
bad.ts
/** * モードの名前が格納されている。 */ type Mode = | "ModeA" | "ModeB"; /** * modeを受け取って一定の処理をする関数。 * * modeの値によって若干処理を変えるようになっている(という想定)。 */ function foo(mode: Mode) { switch (mode) { case "ModeA": // ModeAに対応した処理 break; case "ModeB": // ModeBに対応した処理 break; } } foo("ModeA");

こうすればよかったと思う
better.ts
/** * モードごとの処理が格納されている。 */ const modes: { [K in string]: Mode } = { "ModeA": { func: () => {}, // 中身は省略 }, "ModeB": { func: () => {}, // 中身は省略 }, }; /** * モードの型。 * * 今回はサンプルなのでfuncしか無いが、状況によっては色々な値を実装することになるかもしれない。 */ type Mode = { func: () => void; }; /** * modeを受け取って一定の処理をする関数。 * * modeの値によって若干処理を変えるようになっている(という想定)。 */ function foo(mode: Mode) { mode.func(); } foo(modes.ModeA);

反省
名前だけ渡すと関数の中に処理を直接書かなければいけなくなる
上記の bad.ts ではswitch文を書いたが、そもそもswitch文自体ネストが深くなる原因になることが多いので避けたいところ
データを渡すことには以下の利点がある
関数の中に処理を長々と書く必要がないため、関数内の記述量を比較的シンプルにまとめられる
上記の better.ts foo() では modes 以外の独自に定義した値も取っているので、関数のモード変更への制約が少なくなる
独自のモードを使用したい時とかに便利
でもいいことばかりではない
そもそもモード変更に関する処理だけを切り離すのが難しい場合もある