Size: a a a

2020 February 12

AS

Andrey S in Go-go!
Aikidos
Тогда о каких типах параметров вы говорите?
да, именно про ...T
источник

x

x-foby in Go-go!
Andrey S
да, именно про ...T
Так это просто обертка над слайсом. И давно работает. Что не так-то?
источник

AS

Andrey S in Go-go!
x-foby
Так это просто обертка над слайсом. И давно работает. Что не так-то?
Да я понял так что народ хочет разные типы в этом слайсе
источник

AS

Andrey S in Go-go!
И не всегда приводимые к []interface{}
источник

x

x-foby in Go-go!
Andrey S
Да я понял так что народ хочет разные типы в этом слайсе
Нет, "народ" говорил про параметры с дефолтными значениями (https://t.me/gogolang/393504)
источник

A

Aikidos in Go-go!
Andrey S
Да я понял так что народ хочет разные типы в этом слайсе
Не, я думаю, что запутались просто все. Начали про дефолтные, именованные потом откуда-то переменные выскочили и я сам запутался.
источник

мн

мистер никитос in Go-go!
Aikidos
Давайте распутаем это.
Что вы понимаете под переменными параметрами в данный момент? Речь всё ещё идёт о:

f(x, y = 1)  -> x + y?

Чтобы можно было передать только x, а y сам подставился как 1, если его не указали?
Это же легко делается. При выполнении, в стек, вместе с вашим x  кидается 1, если вы не указали другое, и дальше вызывается функция.

Ок, можно спросить, а что, если у нас тип для y сложный? К примеру, какой-нибудь User { Id, Name }? Как тогда это будет компилироваться? Поэтому в языках с дефолтными параметрами есть ограничение, что указанное дефолтное значение должно удовлетворять условию: может быть вычислено при компиляции.

Другой вопрос, что всё это не имеет смысла, без именованных параметров. Иначе вы рискуете запутаться в собственном коде. Что обязательное, а что нет.

Или вы о другом? Или вы о ...T?
> Иначе вы рискуете запутаться в собственном коде.

Ну с такой логикой можно вообще все веселье убрать, например упрощенния а-ля алиас (*struct).attribute, или горутины, ведь это не очевидные вещи и в них можно запутаться))
источник

A

Aikidos in Go-go!
мистер никитос
> Иначе вы рискуете запутаться в собственном коде.

Ну с такой логикой можно вообще все веселье убрать, например упрощенния а-ля алиас (*struct).attribute, или горутины, ведь это не очевидные вещи и в них можно запутаться))
Не. Смотрите, у вас есть 5 дефолтных параметров. Вы хотите указать только один, последний. Как поступите? Без именованных никак.
источник

мн

мистер никитос in Go-go!
Aikidos
Не. Смотрите, у вас есть 5 дефолтных параметров. Вы хотите указать только один, последний. Как поступите? Без именованных никак.
Ну я только про "запутаться" написал, все остальное то понятно
источник

A

Aikidos in Go-go!
мистер никитос
Ну я только про "запутаться" написал, все остальное то понятно
Ну, "можно запутаться" да, субъективное словосочетание.
источник

A

Aikidos in Go-go!
Я просто не писал на языках, где есть дефолтные и нет именованных. Поэтому что-то подумал, что я бы запутался, если бы были дефолтные и не было бы именованных)
источник

мн

мистер никитос in Go-go!
Aikidos
Я просто не писал на языках, где есть дефолтные и нет именованных. Поэтому что-то подумал, что я бы запутался, если бы были дефолтные и не было бы именованных)
Ну я как понял основной аргумент против дефолтных - это именно свойство запутывать людей 🌝, но это крайне спорно, ибо максимум чего запутанного в коде на языках с их поддержкой я видел - это жирные конструкторы. Но видимо наверху лучше знают, да и бог с ним
источник

мн

мистер никитос in Go-go!
Но именованные за собой вроде автоматически несут и дефолтные, как бы включают их в своей реализации, иначе толка от именованных особо нет, так что еще есть потенциал в этом направлении, я думаю
источник

A

Aikidos in Go-go!
мистер никитос
Но именованные за собой вроде автоматически несут и дефолтные, как бы включают их в своей реализации, иначе толка от именованных особо нет, так что еще есть потенциал в этом направлении, я думаю
У меня был проект, где были функции по 20-30 параметров. Это была вынужденная мера, причина не столь важна. Вот там именованные наоборот, спасали. Эти функции ещё и часто изменялись. Именованные не давали запутаться куда что передаваться должно.
Но больше таких кейсов я пока не видел.
источник

мн

мистер никитос in Go-go!
Aikidos
У меня был проект, где были функции по 20-30 параметров. Это была вынужденная мера, причина не столь важна. Вот там именованные наоборот, спасали. Эти функции ещё и часто изменялись. Именованные не давали запутаться куда что передаваться должно.
Но больше таких кейсов я пока не видел.
Боль какая
источник

A

Aikidos in Go-go!
мистер никитос
Ну я как понял основной аргумент против дефолтных - это именно свойство запутывать людей 🌝, но это крайне спорно, ибо максимум чего запутанного в коде на языках с их поддержкой я видел - это жирные конструкторы. Но видимо наверху лучше знают, да и бог с ним
Есть этот ещё принцип, явное > неявного. Дефолтные параметры не такие явные. Вызвал функцию, а там ещё 10 дефолтных параметров, а ты и не заметил)
источник

RS

Roman Sharkov in Go-go!
Aikidos
Есть этот ещё принцип, явное > неявного. Дефолтные параметры не такие явные. Вызвал функцию, а там ещё 10 дефолтных параметров, а ты и не заметил)
с именованными не иначе, просто будут zero-value

func Fn(
 foo int
 bar string
 baz bool
) { /*…*/ }

Fn(bar: “baz”)
источник

A

Aikidos in Go-go!
Roman Sharkov
с именованными не иначе, просто будут zero-value

func Fn(
 foo int
 bar string
 baz bool
) { /*…*/ }

Fn(bar: “baz”)
Это в каком языке?
источник

RS

Roman Sharkov in Go-go!
Aikidos
Это в каком языке?
если бы именованные параметры в Go были, то я предполагаю, что все указывать в случае именованных было бы необязательно. Для неуказанных просто применятся zero value
источник

E

Edgar in Go-go!
Aikidos
Не. Смотрите, у вас есть 5 дефолтных параметров. Вы хотите указать только один, последний. Как поступите? Без именованных никак.
источник