@JSlang

Страница 2222 из 2237
ujeenator
20.10.2018
22:11:59
const obj = { a: 'b', c: 'd', [Symbol.iterator]: function * () { for (const kv of Object.entries(this)) { yield kv } } } for (const [key, val] of obj) { console.log('key=' + key) console.log('val=' + val) }

> "key=a" > "val=b" > "key=c" > "val=d"

Viktor
20.10.2018
22:12:22
насколько я знаю, div1 никогда не сможет находиться между вторым и четвертым силами css)

Google
ujeenator
20.10.2018
22:14:34
Итерируемый на уровне языка != итерируемый на уровне памяти.
Что значит на уровне языка? Какая разница между тем когда for of ищет Symbol.iterator в массиве и когда ищет Symbol.iterator в объекте? Или ты имеешь ввиду что в массиве это by design заложено?

Viktor
20.10.2018
22:14:37
ну я бы по-другому и не сделал)

Анатолий
20.10.2018
22:15:01
Уже начали. Object.keys и т.д.
Но никак не закончат. Object.entries в черновике свежего стандарта, это немного не похоже на решение какой-то выдуманной тобой проблемы

Norse
20.10.2018
22:15:32
ну я бы по-другому и не сделал)
Да вот хз, может варианты еще какие есть тип тут сейчас неточность, есть, элемент с любым индексом больше 0 будет выше дива 2

Анатолий
20.10.2018
22:15:42
От этого for (const [k, v] of Object.entries({a:'b', c: 'd'})) { console.log('key='+k) console.log('val='+v) } до этого foreach (k, v) in {a:'b', c: 'd'} { console.log('key='+k) console.log('val='+v) }

Norse
20.10.2018
22:16:31
ну я бы по-другому и не сделал)
Спасибо за помощь ) сейчас преподу отправлю, посмотрим, что ответит

Max
20.10.2018
22:16:41
Вот тот же твой пример обсахарить - и получился бы мой :)
Вот тебе сахарок: function* _(obj) { for (const key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of _({ a: "A", b: "B"})) { console.log(`${key}: ${value}`); }

Google
Анатолий
20.10.2018
22:17:27
Вот тебе сахарок: function* _(obj) { for (const key of Object.keys(obj)) { yield [key, obj[key]]; } } for (let [key, value] of _({ a: "A", b: "B"})) { console.log(`${key}: ${value}`); }
Но всё равно это промежуточная функция. Гораздо эффективней переделать Object.entries, чтобы он итерировал

Потому что массив из одного ключа и одного значения это ужасно некрасиво

Анатолий
20.10.2018
22:18:00
Если уж так - то лучше ключ и значение отдельно

Andrey
20.10.2018
22:18:11
Т.е. вместо 1 метода ты предлагаешь сделать 3? map, filter и reduce?

Max
20.10.2018
22:18:15
ujeenator
20.10.2018
22:18:52
От этого for (const [k, v] of Object.entries({a:'b', c: 'd'})) { console.log('key='+k) console.log('val='+v) } до этого foreach (k, v) in {a:'b', c: 'd'} { console.log('key='+k) console.log('val='+v) }
Если зайти из далека JS хорош тем что коммюнити очень открыто к новым предложениям Если ты сможешь обосновать нахрен это нужно в следующей версии стандартна, распишешь синтаксис и будешь мейнтейнить обсуждение этой фичи - то твою идею примут

Анатолий
20.10.2018
22:19:35
Одно и тоже. Что то Object.entries возвращает генератор, что этот сахарок
Разница только в нативности :) Сахарить свой код не дожидаясь стандартов - это старая жкверевская привычка, и всё же она старая :)

Max
20.10.2018
22:20:20
Разница только в нативности :) Сахарить свой код не дожидаясь стандартов - это старая жкверевская привычка, и всё же она старая :)
Я вру! Object.entries возвращает массив. Так что мой сахарок даже попроизводительнее будет, так как он ленивый

Анатолий
20.10.2018
22:20:49
Если зайти из далека JS хорош тем что коммюнити очень открыто к новым предложениям Если ты сможешь обосновать нахрен это нужно в следующей версии стандартна, распишешь синтаксис и будешь мейнтейнить обсуждение этой фичи - то твою идею примут
Нет, я прекрасно проживу без этого. Меня просто удивило то, из-за чего я и пондял эту тему - что мы тут сахарим черновые стандарты следующих лет (!!!), а в сраном пхп это с нулевых, если не раньше

Max
20.10.2018
22:21:24
Ленивость != скорость во многих кейсах.
Если будет early return то очень даже

Andrey
20.10.2018
22:21:40
V8 умеет перемалывать через map, filter и т.д. очень производительно.

ujeenator
20.10.2018
22:22:37
Я вру! Object.entries возвращает массив. Так что мой сахарок даже попроизводительнее будет, так как он ленивый
Object.entries может быть гораздо производительней твоих отдельных вызовов

Viktor
20.10.2018
22:22:52
Andrey
20.10.2018
22:23:09
сколько лет вы программируете?
Зависит от того, что называть программированием.

Google
Viktor
20.10.2018
22:23:49
Анатолий
20.10.2018
22:24:09
ну JS вырос из скриптов анимации в браузере, а php задумывался как ЯП
Что не мешает разработчикам стандартов делать гигантские шаги в отказе от старья :) А нам мечтать о всякой переслащённо фигне :) Я вот линк хочу, но многие не хотят

Анатолий
20.10.2018
22:24:51
Что тебе из линка надо?
То же, что и от вышеупомянутого пхпшного форыча

Запись и красота кода

var top = from await getItems() select name where id > 5 order by updatedDate desc group by groupId having groupId > 10;

Andrey
20.10.2018
22:25:10
omg

То самое говно, которое дотнетчики избегают сейчас.

Анатолий
20.10.2018
22:25:46
Видимо, ты не в курсе о цепочной записи

Проблема в том, что она длиннее, мусорнее и недекларативнее

Хотя в каком-то виде реализуема и в жс нативно

Andrey
20.10.2018
22:26:33
В курсе. В js уже есть эта цепочная запись.

Andrey
20.10.2018
22:26:52
А вот ту ебанину, которую ты написал выше не нужно.

ujeenator
20.10.2018
22:26:57
var top = from await getItems() select name where id > 5 order by updatedDate desc group by groupId having groupId > 10;
с первого дня релиза линка избегал SQL-like записи цепочка гораздо понятнее и легче контроллируется

Andrey
20.10.2018
22:27:18
Так что тебе надо из линка, чего нет в js?

Анатолий
20.10.2018
22:27:48
скобки и аргументы хотя бы

ujeenator
20.10.2018
22:28:24
в новых стандартах JS будет пайплайнинг что гораздо лучше чем линк

Анатолий
20.10.2018
22:28:31
Впрочем, если это надо переиспользовать, то конечно лучше цепочная, потому что оборачивать это в чейн будет гораздо ужаснее

Google
Анатолий
20.10.2018
22:28:46
хочу пайплайнинг в дотнет

Andrey
20.10.2018
22:29:05
хочу пайплайнинг в дотнет
Он есть уже фиг знает сколько времени.

F# называется.

Анатолий
20.10.2018
22:29:45
Уточню: в C#.NET

Andrey
20.10.2018
22:30:23
В C# уже и так говна навалом. Ещё и пайплайн тащить.

Max
20.10.2018
22:30:44
Вот вообще без враппера: Object.prototype[Symbol.iterator] = function* () { for (const key of Object.keys(this)) { yield [key, this[key]]; } } for (let [key, value] of { a: "A", b: "B"}) { console.log(`${key}: ${value}`); } Но так делать не стоит

Анатолий
20.10.2018
22:30:56
А ещё я хочу кортежи. А ещё out-переменные.

Ладно, подожду null-coalesce, не буду никого нервировать

Andrey
20.10.2018
22:31:09
Анатолий
20.10.2018
22:31:15
Я уже про жс

Admin
ERROR: S client not available

Andrey
20.10.2018
22:31:19
Я тоже.

Max
20.10.2018
22:31:45
у тебя теперь есть персональный котел в аду)
Написано же "так делать не стоит")

Andrey
20.10.2018
22:32:08
Я запомню и если что буду всё сваливать на тебя :)
Тяжело что-то говорить, когда тебя уже бьют ногами.

А ещё я хочу кортежи. А ещё out-переменные.
А out переменные кривые, поэтому их брать не будут.

Анатолий
20.10.2018
22:32:41
Ок

Andrey
20.10.2018
22:32:53
Особенно в js, где типов нет.

ujeenator
20.10.2018
22:33:09
out переменные не нужные когда есть деструктуризация

Google
ujeenator
20.10.2018
22:33:31
возвращаешь столько переменных сколько нужно

Andrey
20.10.2018
22:33:42
Анатолий
20.10.2018
22:33:43
Вот вообще без враппера: Object.prototype[Symbol.iterator] = function* () { for (const key of Object.keys(this)) { yield [key, this[key]]; } } for (let [key, value] of { a: "A", b: "B"}) { console.log(`${key}: ${value}`); } Но так делать не стоит
Ну отсутствие враппера всё же заменяет мутация прототипа. Такие штуки либо быть не должны, либо должны быть нативно и чисто )

А то я опять вспомню жквери, где простота, скорость и сахар реализуются за счёт надстройки над языком :)

Andrey
20.10.2018
22:34:51
возвращаешь столько переменных сколько нужно
А в том, что ты можешь писать подобный код if (!int.TryParse(str, out var num)) { throw new Exception(); } Console.WriteLine(num);

Но out переменные не работают с асинхронными методами, так как возникают проблемы.

Анатолий
20.10.2018
22:35:20
Их суть не в этом.
Именно в этом

Andrey
20.10.2018
22:35:39
А это всего лишь узкий случай их применения
Это основной их способ применения.

Max
20.10.2018
22:35:44
А в том, что ты можешь писать подобный код if (!int.TryParse(str, out var num)) { throw new Exception(); } Console.WriteLine(num);
Это ужастно особенно если вспомнить что можно возвращать и по ref

Анатолий
20.10.2018
22:35:59
Это основной их способ применения.
Странно, что ты называешь частный случай основным способом, но я не буду с тобой спорить

Max
20.10.2018
22:36:04
туплеты намного элегантнее

ujeenator
20.10.2018
22:36:14
Это основной их способ применения.
const {success, value: num} = int.tryParse(str)

Andrey
20.10.2018
22:36:14
туплеты намного элегантнее
Но подобный код будет выглядеть как говно.

Анатолий
20.10.2018
22:36:22
туплеты намного элегантнее
Так их ещё никто не оскорблял ))

Andrey
20.10.2018
22:36:29
ujeenator
20.10.2018
22:36:55
Не надо запихивать это в if ни то и не другое

Andrey
20.10.2018
22:37:12
Не надо запихивать это в if ни то и не другое
Почему не надо? Try* как раз для этого и создаётся.

В остальных случаях надо возвращать структуры.

ujeenator
20.10.2018
22:37:40
Потому что читабельность такого выражение в if плохая

Andrey
20.10.2018
22:37:51
Пишу "по пачке в день" таких выражений.

Страница 2222 из 2237