Node.JS | Какой тип функции лучше?
Я рассматривая Python увидел в частых циклах range. Она позволяет несколько раз провести цикл сколько установлено в диапазоне. Я JavaScript-ер, и цикл, бывает, что нужно, повторять в установленном диапазоне, хотя это особо много кода писать:
for (let i = **from**; i < **to**; i += **step**).
А на Python можно реализовать это вот так:
for i in range(**from**, **to**, **step**)
Просто и быстро. Я решил сделать такую функцию на TypeScript, и получилось. Она работала так: спрашивается три аргумента: "from"; "to"; "step", и создаётся массив чисел. Потом с помощью цикла for устанавливается увеличения локальной переменной "i", и это значение записывается в массив. По окончанию цикла, этот массив возвращается. И уже в другой проге где нужно циклить, просто написать:
for (let i of range(**from**, **to**, **step**))
Но потом, я узнал что в JavaScript есть оператор yield, который позволяет сделать генератор. Я написал вторую версию своей функции range и результат не подвёл, всё одинаково. Вторая версия особо похожа на первую, просто в ней нет массива и возврата массива. Итого два кода, выполняющий свою работу с правильным и одинаковым итогом. Но какой из кодов больше предназначен для такой ситуации?
Первый код:
function range(from: number, to?: number, step?: number): number[] {
to = to ? to : 75000000;
step = step ? step : 1;
let array: number[] = [];
for (let i = from; i < to; i += step) {
array.push(i)
}
return array;
}
export default range;
Второй код:
function* range(from: number, to?: number, step?: number) {
to = to ? to : 75000000;
step = step ? step : 1;
for (let i = from; i < to; i += step) {
yield i;
}
}
export default range;
Ответы (1 шт):
Предложу такой, но он ближе к первому
function range(from, to, step) {
return Array.from({length: Math.ceil((to-from)/step)}, (_,i)=> i*step + from);
}
console.log(range(10,20, 1));
console.log(range(10,20, 2));
console.log(range(10,20, 3));
range(10,20, 3).forEach(item=>console.log(item));