Показать сообщение отдельно
  #30 (permalink)  
Старый 07.02.2020, 00:08
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от 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));

Последний раз редактировалось Malleys, 07.02.2020 в 05:02.
Ответить с цитированием