Это мой третий день изучения Javascript в онлайн-классе. Сегодня я узнал о массивах и циклах while / for, и, чтобы попрактиковаться во всем этом, я работаю над задачей создать функцию, которая производит $ (п) $ члены последовательности Фибоначчи в массиве.
Так что я надеюсь на отзывы об этом коде! Я думаю, что это работает, но я хотел бы знать, как я могу сделать это более эффективным или лучше каким-либо образом.
function fibonacciGenerator (n) {
var output=[];
if (n===1) {
output=[0];
} else if (n===2) {
output=[0,1];
} else if (n>2) {
output=[0,1];
for (var i=3;i<=n;i++) {
output.push(output[i-3]+output[i-2]);
}
}
return output;
}
1 ответ
Для новичка этот код выглядит нормально. Хорошая работа с использованием строгого сравнения на равенство — т.е. ===
. Отступ в основном согласован, хотя первый уровень отступа составляет 4 пробела, а все последующие уровни кажутся 2 пробелами.
Самое большое, что я бы изменил, — это интервал. Для удобства чтения это помогает добавить интервалы между операторами, особенно бинарными операторами, такими как ===
, >
, =
и т. д. Вы можете использовать линтер, например ESLint, JSHint и т. Д. ESLint имеет такие правила, как space-infix-ops.
Хотя настройки форматирования очень личные, в ряде руководств по стилю требуются пробелы вокруг операторов, например:
var sum = 1 + 2;
Сторонники этих дополнительных пробелов считают, что это упрощает чтение кода и позволяет легче выделить потенциальные ошибки, такие как:
var sum = i+++2;
Хотя это допустимый синтаксис JavaScript, трудно определить, что задумал автор.
Я пробовал пройти 0
к функции, и она вернула [0, 1]
, что будет тем же результатом, если я передам 2
. Теоретически он должен возвращать пустой массив, когда 0
передается.
Первый и второй случаи else можно упростить до простого else
, поскольку цикл не запустится, если i
меньше чем n
а в случае 2 никогда не будет так, чтобы 3 было меньше 2. Так что это можно упростить следующим образом:
function fibonacciGenerator (n) {
var output = [];
if (n === 1) {
output = [0];
} else {
output = [0, 1];
for (var i=3; i <= n; i++) {
output.push(output[i-3] + output[i-2]);
}
}
return output;
}
В более продвинутом JavaScript const
ключевое слово может использоваться для объявления output
поэтому он не может быть перезаписан, что потребует исключительно использования .push()
метод добавления элементов в выходной массив. С использованием const
когда перераспределение не требуется, это хорошая привычка, потому что это может помочь избежать случайное переназначение и другие ошибки.
В качестве альтернативы функция может возвращаться раньше в базовых случаях — например, когда n
является 1
.
Замечательно, я это очень ценю. Я не понимал, что мне нужно только одно условие. Мне придется вернуться к этому, когда я тоже узнаю о константе!
— KGE