確認してる?
気づけば2月。時が経つのは本当に早いですね。
数ヶ月前の話ですが、予約していた美容院に行くと「今日、予約入ってませんよ」と言われ、その場で予約メールを確認したら昔通っていた美容院を予約していたということがありました。 思い込みからくるミスですね。今日は仕事であった思い込みによるミスについての話をします。
分割代入は特別?(ではない)
仕事で思い込みによるミスがあり、コードレビューで発見され難を逃れることができました。 早速ですが思い込みによってミスってた JavaScript のコードサンプルを。
const hoge = { fuga: [{ id: 1 }, { id: 2 }, { id: 3 }] }; const { fuga } = hoge; // sort は破壊的メソッド fuga.sort((a, b) => b.id - a.id); console.log("hoge.fuga is"); console.log(hoge.fuga); console.log("fuga is"); console.log(fuga);
実行結果はこうなります
hoge.fuga is [ { id: 3 }, { id: 2 }, { id: 1 } ] fuga is [ { id: 3 }, { id: 2 }, { id: 1 } ]
hoge.fuga
も fuga
もどちらも降順にソートされています。
sort は破壊的メソッドなので当然の話です。
ですが自分の意図としてはfuga
だけ降順にするつもりでした。
sort が破壊的メソッドであることは自分も理解していました。
では自分は何を勘違いしていたかというと 「分割代入は参照渡し」ではなく「コピーしてくれている」となぜか思い込んでいたんですね。
ということでコピーしてから sort する手段を今回はとりました。
const hoge = { fuga: [{ id: 1 }, { id: 2 }, { id: 3 }] }; const { fuga } = hoge; const piyo = Array.from(fuga).sort((a, b) => b.id - a.id); console.log("hoge.fuga is"); console.log(hoge.fuga); console.log("fuga is"); console.log(fuga); console.log("piyo is"); console.log(piyo);
実行結果
hoge.fuga is [ { id: 1 }, { id: 2 }, { id: 3 } ] fuga is [ { id: 1 }, { id: 2 }, { id: 3 } ] piyo is [ { id: 3 }, { id: 2 }, { id: 1 } ]
自分なりの教訓
思い込みがあるのは人間なのでしょうがない。 今回のケースは破壊的メソッドという影響度が高いメソッドを使うときに、本当にここで使って大丈夫なのか、ちゃんと確認しなかったことが問題だったなと思います。
思い込んだまま突っ走る癖があるので以後気をつけたいです。 ちなみに指摘してくれた人は同じフィヨルドブートキャンプ出身の人です!フィヨルドブートキャンプ生すごいね!(宣伝)
最終的に「確認する」て大事よね、という昔ながらの結論で今日は終わります。