オブジェクトを渡さず、名前のみを渡して挙動を変えようとしたことに対する反省点
自分でコーディングしている上で躓いてしまったところに関する反省を書き留めておく
寝て起きたらちゃんとわかるように書き直すMijinko_SD.icon
やっぱ書かないかも(めんどくさくなった)
やらかしたやつ
code:bad.ts
/**
* モードの名前が格納されている。
*/
type Mode =
| "ModeA"
| "ModeB";
/**
* modeを受け取って一定の処理をする関数。
*
* modeの値によって若干処理を変えるようになっている(という想定)。
*/
function foo(mode: Mode) {
switch (mode) {
case "ModeA":
// ModeAに対応した処理
break;
case "ModeB":
// ModeBに対応した処理
break;
}
}
foo("ModeA");
こうすればよかったと思う
code:better.ts
/**
* モードごとの処理が格納されている。
*/
"ModeA": {
func: () => {}, // 中身は省略
},
"ModeB": {
func: () => {}, // 中身は省略
},
};
/**
* モードの型。
*
* 今回はサンプルなのでfuncしか無いが、状況によっては色々な値を実装することになるかもしれない。
*/
type Mode = {
func: () => void;
};
/**
* modeを受け取って一定の処理をする関数。
*
* modeの値によって若干処理を変えるようになっている(という想定)。
*/
function foo(mode: Mode) {
mode.func();
}
foo(modes.ModeA);
反省
関数の中に処理を長々と書く必要がないため、関数内の記述量を比較的シンプルにまとめられる 上記のbetter.tsのfoo()ではmodes以外の独自に定義した値も取っているので、関数のモード変更への制約が少なくなる
独自のモードを使用したい時とかに便利
でもいいことばかりではない
そもそもモード変更に関する処理だけを切り離すのが難しい場合もある