Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 06.02.2020, 14:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,121

Сообщение от Malleys
Я думаю, саму идею, для чего и как его использовать вы поняли... Вот, например, сортировка...
ценю ваш тонкий юмор.
Ответить с цитированием
  #22 (permalink)  
Старый 06.02.2020, 17:20
Аватар для drwhite
Интересующийся
Отправить личное сообщение для drwhite Посмотреть профиль Найти все сообщения от drwhite
 
Регистрация: 16.11.2015
Сообщений: 14

Сообщение от Malleys
Вуаля! Рабочая betterRecursive! drwhite, это именно то, что вы хотели!
Благодарю, все верно, но так хотелось сделать это в одну строчку кода)

Сообщение от Alexandroppolus
какова вообще задача? то есть, нафига нужен такой изыск?
Примерно такая же, как и в случае с this и __construct для класса — не надо явно использовать имя, которое может взять и поменяться.
Может быть это и изыск, но, согласитесь, удобнее)
Ответить с цитированием
  #23 (permalink)  
Старый 06.02.2020, 17:25
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Сообщение от drwhite
Может быть это и изыск, но, согласитесь, удобнее)
никакого здезь удобства нет, а говорит о неправильном подходе реализации, что в результатке выташили Крокфорда за уши
Ответить с цитированием
  #24 (permalink)  
Старый 06.02.2020, 18:09
Аватар для drwhite
Интересующийся
Отправить личное сообщение для drwhite Посмотреть профиль Найти все сообщения от drwhite
 
Регистрация: 16.11.2015
Сообщений: 14

Сообщение от Poznakomlus
никакого здезь удобства нет, а говорит о неправильном подходе реализации
Разве не удобней обращаться объекту к самому себе через ссылку, которая всегда сработает, а не через придуманное имя?

Зачем тогда придумали слово constructor вместо имени класса?

И какой подход к реализации был бы правильным?
Ответить с цитированием
  #25 (permalink)  
Старый 06.02.2020, 18:34
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

<script>
function factorial(x)
{
    var result = 1;
    while (x > 1) result *= x--;
    return result;
}
alert(factorial(5));
</script>

пример факториала
честно, полноту вашей задачи я до сих пор не понял
хотите избавится от рекурсии используйте циклы
конструктор служит для иницииализации

"И какой подход к реализации был бы правильным?"
тот, который понятен другим разработчикам. Чтобы они не ломали голову в раскручивани вызовов ваши функций. Код должен быть простым и понятым
Ответить с цитированием
  #26 (permalink)  
Старый 06.02.2020, 19:36
Аватар для drwhite
Интересующийся
Отправить личное сообщение для drwhite Посмотреть профиль Найти все сообщения от drwhite
 
Регистрация: 16.11.2015
Сообщений: 14

Сообщение от Poznakomlus
конструктор служит для иницииализации
Ну хорошо, а если бы вместо this надо было бы использовать имя класса?)

Сообщение от Poznakomlus
честно, полноту вашей задачи я до сих пор не понял
Бывает иногда нужно передать из функции ее имя в другое место, без генерации исключения и раскрутки стека. В пхп есть __FUNCTION__, что очень удобно. Не найдя такого в JS, пришлось зайти на форум и спросить, а вдруг кто-то подскажет.

Сообщение от Poznakomlus
"И какой подход к реализации был бы правильным?"
тот, который понятен другим разработчикам. Чтобы они не ломали голову в раскручивани вызовов ваши функций
Неужто возможность получить имя функции внутри функции кому-то так уж сломает голову?

Скорей Y-комбинатор и замыкания вынесут моск))

PS И потом, как сделать, чтобы код был понятен другим разработчикам, прочитать много умных книг, сходить на разные «курсы», которых сейчас расплодилось как собак нерезаных? Это, положим, можно, есть ли там стандарты и правила написания правильного кода, как узнать?

Последний раз редактировалось drwhite, 06.02.2020 в 19:48. Причина: дополнение
Ответить с цитированием
  #27 (permalink)  
Старый 06.02.2020, 20:11
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 641

Сообщение от drwhite Посмотреть сообщение
стандарты и правила написания правильного кода, как узнать?
только эмпирическим путем, потому что в книге не будет написано про ту задачу, которую надо сделать. надо тогда на typescript заходить, чтобы все было квадратно. тогда придется изучать другие конструкции и не пытаться доковыряться до ассемблера на жаваскрипте )
Ответить с цитированием
  #28 (permalink)  
Старый 06.02.2020, 21:58
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

class Test1 {}
class Test2 {
    get name(){ return this.constructor.name}
}
const Test3 = function () {}

const Test4 = function () {
    this.name =()=> this.constructor.name
}
const a = new Test1();
const b = new Test2();
const c = new Test3();
const d = new Test4();
console.log(a.constructor.name);
console.log(b.constructor.name);
console.log(c.constructor.name);
console.log(d.constructor.name);
console.log(b.name);
console.log(d.name());
console.log(Test1.name);

не знаю, может это поможет
Ответить с цитированием
  #29 (permalink)  
Старый 06.02.2020, 22:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,588

Malleys, просто пишет чушь ради чуши.

Например хипстерское дерьмо, типа:
const factorial = x => {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}

alert(factorial(5));
после чего решает проблему которой нет.

Нормальный человек напишет:
function factorial(x) {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}
и это будет работать всегда.

Даже если мы потом сделаем так:
function factorial(x) {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}

const f = factorial;
alert(f(5));
или так:
// factorial-module.js
function factorial(x) {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}

export default factorial;

// main.js
import f from './factorial-module';
alert(f(5));


Если мы хотим пулять функцию по разным переменным сразу после создания, но при этом не хотим засорять область видимости её оригинальным названием(почему?), то всегда можно сделать так:
const factorial = function fcallee(x) {
	if (x === 1)
		return 1;
	else
		return x * fcallee(x - 1);
}


const f = factorial;
const f2 = factorial;

alert(typeof fcallee);
alert(factorial(5));
alert(f(5));
alert(f2(5));


Нет никакой проблемы и никакого смысла в arguments.callee, и уж точно нет смысла в онанизме от Malleys.
__________________
29375, 35

Последний раз редактировалось Aetae, 06.02.2020 в 23:04.
Ответить с цитированием
  #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.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Узнать имя функции Bercut Общие вопросы Javascript 27 25.12.2020 08:02
как правильно передвать имя radiobutton в функции boris2000 Элементы интерфейса 2 03.08.2010 21:16
Как получить имя файла и изменить его? nedosalivan Общие вопросы Javascript 5 29.03.2010 17:51
Как получить имя компа через JavaScript? Бурундук Общие вопросы Javascript 3 19.09.2009 16:44
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00