Сообщение от drwhite
|
Благодарю, все верно, но так хотелось сделать это в одну строчку кода)
|
Это универсальная функция, её можно вынести в отдельный файл. Или же использовать готовую библиотеку.
Сообщение от Poznakomlus
|
никакого здесь удобства нет, а говорит о неправильном подходе реализации
|
Это говорит о твоём непонимании
парадигм программировании — в JS так и так есть функции, отказ от возможностей функционального программирования выглядит как некое
цифровое веганство.
Сообщение от Poznakomlus
|
тот, который понятен другим разработчикам. Чтобы они не ломали голову в раскручивании вызовов ваши функций. Код должен быть простым и понятым
|
Сообщение от drwhite
|
Это, положим, можно, есть ли там стандарты и правила написания правильного кода, как узнать?
|
Это зависит от
модели программирования. Например,
Poznakomlus ошибочно предполагает, что существует единственно истинный способ записи программы, однако используя разные парадигмы для решения одной и той же задачи, можно прийти к выводу, что императивный код не всегда простой, понятный и краткий. Для императивного кода также свойственна
ссылочная непрозрачность.
Сообщение от Poznakomlus
|
избавится от рекурсии
|
А почему тогда не нужно избавиться от this, constructor, window? Ваши призывы походят на «нравится, а почему, понять не могу».
Сообщение от Aetae
|
Malleys, просто пишет чушь ради чуши.
|
Покажите, пожалуйста, как сделать рекурсию при помощи стрелочной функции без зависимости от имени переменной.
Вот, например, более практическая задача, чем вычисление факториалов, на примере которой демонстрируется рекурсия...
Обход всех текстовых узлов в DOM
var Y=f=>(g=>x=>f(g(g))(x))(g=>x=>f(g(g))(x));
var processTextNodes = visit => Y(order => node => {
if(node != null) node.childNodes.forEach(childNode =>
childNode.nodeType === Node.TEXT_NODE ? visit(childNode) : order(childNode)
)
});
var logTextNotes = processTextNodes(console.log);
logTextNotes(document.body);
Poznakomlus, попробуйте избавиться от рекурсии и вы закончите кодом, про который не скажешь, что он, по сравнению с этим — простой, понятный и краткий!
Aetae, то, что вы описали, работает с обычными функциями (и это хорошо!), а не со стрелочными.
Зависит от имени...
const factorial = x => x === 1 ? 1 : x * factorial(x - 1);
Y-комбинатор позволяет убрать такую зависимость...
import { Y } from "combinators-js";
const factorial = Y(f => x => x === 1 ? 1 : x * f(x - 1));