JavaScriptにおける繰り返し操作の最適化
初心者プログラマーはしばしば、リソースを浪費して 同じ関数を何度も無思慮に呼び出してしまいます。
例を見てみましょう。あるパスを含む文字列が 与えられているとします:
let path = 'img.png';
ここでの課題は、パスが
拡張子.pngまたは.jpgで
終わっているかどうかを確認することです。
ある初心者プログラマーは以下のような
解決策を書きました:
let path = 'img.png';
if (path.slice(-4) === '.png' || path.slice(-4) === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
この解決策の何が問題でしょうか?問題は、
メソッドsliceが2回呼び出され、
同じことを行っていることです。これは
もちろん最適ではありません。
最適化するには、文字列の切り取りを 1回だけ実行し、結果を変数に記録して、 その後その変数をさらに使用する必要があります:
let path = 'img.png';
let ext = path.slice(-4);
if (ext === '.png' || ext === '.jpg') {
console.log('+++');
} else {
console.log('---');
}
以下のコードを最適化してください:
let num = 123;
if (String(num)[0] === '1' || String(num)[0] === '2') {
console.log('+++');
} else {
console.log('---');
}
以下のコードを最適化してください:
let date = new Date();
if (date.getDay() === 0 || date.getDay() === 6) {
console.log('weekend');
} else {
console.log('weekday');
}
以下のコードを最適化してください:
let date = new Date();
let res;
if (date.getFullYear() >= 2020 && date.getFullYear() <= 2030) {
res = 'year ' + date.getFullYear() + ' fits';
} else {
res = 'year ' + date.getFullYear() + ' doesn't fit';
}
console.log(res)