Рассмотрим сценарий, когда у вас есть целые числа в диапазоне [1, BIG_NUMBER]; Если число делится на 3, выведите foo
; Если число делится на 5, выведите bar
; Делится как на 3, так и на 5, выведите foobar
;
Один из способов сделать это -
// READABILITY IS GOOD
const func1 = length => {
for (let i = 0; i <= length; i++) {
let output = i;
if (i % 3 === 0) output = 'foo';
if (i % 5 === 0) output = 'bar';
if (i % 3 === 0 && i % 5 === 0) output = 'foobar';
console.log(output);
}
};
Теперь, если мы подумаем о вероятности, вероятность делится на 3: p (3) = 1/3,
аналогично делится на 5: p (5) = 1/5
и делится на оба значения p (3 && 5) = 1/15
делится на одно из двух: p (3 || 5) = p (3) + p (5) - p (3 && 5)
Теперь вместо вышеперечисленного я пишу Вложенные операторы if:
const func3 = length => {
for (let i = 0; i <= length; i++) {
if (i % 3 === 0) {
if (i % 5 === 0) {
console.log('foobar');
} else {
console.log('foo');
}
} else if (i % 5 === 0) {
console.log('bar');
} else {
console.log(i);
}
}
};
Подход состоит в том, чтобы поставить наиболее вероятный, если оператор первым, и наименее вероятный, если оператор последний, что должно минимизировать условные оценки.
Будет ли это достичь ускорения? Все еще проверяю в моем конце, и опубликует мои выводы также . Но мне просто интересно, кто-нибудь так думает? Это даже используется на практике? или просто пустая трата времени, что также портит читаемый код для минимального усиления