Anonymous
Вот вообще без враппера: 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}`); } Но так делать не стоит
Анатолий
А ещё я хочу кортежи. А ещё out-переменные.
Анатолий
Ладно, подожду null-coalesce, не буду никого нервировать
Анатолий
Я уже про жс
Андрей
Я тоже.
Anonymous
у тебя теперь есть персональный котел в аду)
Написано же "так делать не стоит")
Андрей
Я запомню и если что буду всё сваливать на тебя :)
Тяжело что-то говорить, когда тебя уже бьют ногами.
Андрей
А ещё я хочу кортежи. А ещё out-переменные.
А out переменные кривые, поэтому их брать не будут.
Анатолий
Ок
Андрей
Особенно в js, где типов нет.
Deleted
out переменные не нужные когда есть деструктуризация
Deleted
возвращаешь столько переменных сколько нужно
Анатолий
Вот вообще без враппера: 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}`); } Но так делать не стоит
Ну отсутствие враппера всё же заменяет мутация прототипа. Такие штуки либо быть не должны, либо должны быть нативно и чисто )
Анатолий
А то я опять вспомню жквери, где простота, скорость и сахар реализуются за счёт надстройки над языком :)
Андрей
возвращаешь столько переменных сколько нужно
А в том, что ты можешь писать подобный код if (!int.TryParse(str, out var num)) { throw new Exception(); } Console.WriteLine(num);
Андрей
Но out переменные не работают с асинхронными методами, так как возникают проблемы.
Анатолий
Их суть не в этом.
Именно в этом
Андрей
А это всего лишь узкий случай их применения
Это основной их способ применения.
Anonymous
А в том, что ты можешь писать подобный код if (!int.TryParse(str, out var num)) { throw new Exception(); } Console.WriteLine(num);
Это ужастно особенно если вспомнить что можно возвращать и по ref
Анатолий
Это основной их способ применения.
Странно, что ты называешь частный случай основным способом, но я не буду с тобой спорить
Anonymous
туплеты намного элегантнее
Deleted
Это основной их способ применения.
const {success, value: num} = int.tryParse(str)
Андрей
туплеты намного элегантнее
Но подобный код будет выглядеть как говно.
Анатолий
туплеты намного элегантнее
Так их ещё никто не оскорблял ))
Андрей
Deleted
Не надо запихивать это в if ни то и не другое
Андрей
Не надо запихивать это в if ни то и не другое
Почему не надо? Try* как раз для этого и создаётся.
Андрей
В остальных случаях надо возвращать структуры.
Deleted
Потому что читабельность такого выражение в if плохая
Андрей
Пишу "по пачке в день" таких выражений.
Anonymous
Запихни это в if
if ((res = int.tryParse(str)).success) { res.value }
Андрей
Anonymous
Ну так не запихивай)
Андрей
Ну так не запихивай)
У меня всё норм с этим.
Анатолий
Смысл out в том, чтобы произвольно вернуть наружу новые объекты. Мутировать аргументы может ref Вернуть коллекцию разнотипных обхектов можно в tuple
Андрей
Ладно, out всё равно в js не появится никогда)
Deleted
if выражения должны читать как фраза "если разбор успешный то"
Анатолий
Функция, которая порождает новые сущности. Потому что вернуть она может только одну, чем бы она ни была А мутировать она может только существующую, а специально её создавать для последующей мутации - это извращение. Гораздо чище самой функции пробросить новую сущность наружу
Deleted
Они так и читаются)
дословно должны так читаться а не выражения которые это имеют ввиду
Anonymous
const { divres, modres } = Math.divmod(val) и let modres = 0; const divres = Math.divmod(val, out modres); Что лучше?
Anonymous
Как видишь я тоже могу привести отвратный пример 😉
Deleted
Нет.
Стайлгайды по качественному коду
Андрей
Как видишь я тоже могу привести отвратный пример 😉
Да, потому что в C# можно бъявлять переменные в out блоке.
Анатолий
const { divres, modres } = Math.divmod(val) и let modres = 0; const divres = Math.divmod(val, out modres); Что лучше?
Второй вариант это полумера какая-то. Либо функция генерит новые объекты, либо она вообще их не генерит :)
Андрей
Стайлгайды по качественному коду
Пишутся людьми, которые смотрят на текущий язык, а не предполагаемый.
Анатолий
А то смесь получается, тут мы возвращаем, а тут у нас out, не хватает только мутировать чего-нибудь через условный ref :)
Андрей
Что такое предполагаемый язык?
Это js с out переменными.
Андрей
Что такое предполагаемый язык?
Или в любой другой хренью, о которой сейчас мечтают люди.
Anonymous
Вот что нужно js так это matching. И не такой как в пропозале сейчас
Анатолий
Вот что нужно js так это matching. И не такой как в пропозале сейчас
Помимо хорошего форыча из пхп, есть бесподобный свич из бейсика :)
Анатолий
Там можно матчить ренжами
Андрей
А у тебя попа не слипнется?
Андрей
Может тебе в питон надо?
Анатолий
Да ладно, ифами обойдусь, впервой что ли
Anonymous
function test(str) { switch (true) { case /xyz/.test(str): display("• Matched 'xyz' test"); break; case /test/.test(str): display("• Matched 'test' test"); break; } }
Анатолий
http://www.picaxe.com/BASIC-Commands/Program-Flow-Control/select/
Анатолий
50 лет языку
Анатолий
Анатолий
клёво? )
Андрей
А вот это интерестный вопрос)
Потому что я хз что там JIT сделает и всегда руками в парент скоуп их выношу.
Андрей
клёво? )
И этот человек мне говорил о лаконичности кода.
Андрей
Ну я тоже
Вообще можно сделать кеш на викмапах и радоваться жизни)
Aleksey
switch ( true ) { красивее и уже работает
Анатолий
Anonymous