Для меня рефакторинг в основном зависит от стиля и удобочитаемости. Сначала я заметил, что первые две, если ветви выглядят почти одинаково. Неужели я могу их каким-то образом объединить? Поэтому я сделал это:
var yourself = {
fibonacci : function(n) {
if (n === 0 || n === 1) {
return n;
}
else {
return this.fibonacci(n - 1) + this.fibonacci(n - 2);
}
}
};
Не слишком потрепанный. Что еще мы можем сделать? В ветках if на самом деле не нужны скобки. Это на самом деле опасная привычка, но я объясню позже.
var yourself = {
fibonacci : function(n) {
if (n === 0 || n === 1)
return n;
else
return this.fibonacci(n - 1) + this.fibonacci(n - 2);
}
};
Теперь давайте сделаем экзотику и используем тернарный оператор!
var yourself = {
fibonacci : function(n) {
return (n === 0 || n === 1) ? n : this.fibonacci(n - 1) + this.fibonacci(n - 2);
}
};
Вау, это довольно уродливо, не так ли? Трудно читать, все на одной линии, но так кратки.
Именно поэтому важно переоценивать каждый раз, когда вы рефакторинг.
Задайте себе вопрос: легко ли это понять? Могу ли я сразу сказать, что происходит? В этом последнем примере мы потеряли много отступов, которые полезны для выяснения общей структуры и потока вашего кода. Мы потеряли полезную визуальную информацию, предпочитая краткий код.
Я бы не пошел со второй попыткой рефакторинга. Удаление этих брекетов - плохая идея, потому что она работает только с однострочными ветвями. Если вы вернетесь позже и добавите вторую строку, но вы забудете добавить фигурные скобки, тогда при попытке запустить код вы получите очень загадочную ошибку.
Я думаю, что ваш оригинальный код на самом деле замечательный. Это кратким, понятным и понятным. Он буквально излагает определение функции фибоначчи: «Если это 0 или 1, верните это. В противном случае рекурсивно вычислите результат».
Рефакторинг исходит из опыта, от сгибания кода до тех пор, пока он не будет выглядеть правильно, и постоянно спрашивать себя, действительно ли это улучшение. Ценностная ясность прежде всего, а затем производительность, и будьте осторожны с лаконичностью.
Для некоторого дополнительного чтения, стиль руководства AirBnB также рассматривается: https://github.com/airbnb/javascript
Я не уверен, что именно то, что вы спрашиваете, - каким образом вы хотите, чтобы улучшить? как вы используете фибоначчи? только предложение, которое я могу сделать, это удалить ссылку «this» и просто назовите fibonacci –
К сожалению, это один из недостатков javascript. Я не знаю никаких стабильных способов сделать это, вы можете попробовать с машинописными текстами в следующий раз –
Единственный вопрос, который у меня есть, - это слишком много или основано на мнениях. –