
Мытко
17.08.2016
15:47:59
вот он проглотит любой вызов метода
и find("guga", "vloger")
и find("guga")
и вызовет именно этот метод
public User find(String... args)

Google

Yan?
17.08.2016
15:49:08
как 3 точки в java называются?

Мытко
17.08.2016
15:50:38
хз

Andrey
17.08.2016
15:50:42

Мытко
17.08.2016
15:50:44
я ими никогда не пользуюсь

Yan?
17.08.2016
15:50:50
varar feature

Мытко
17.08.2016
15:51:15
аргументы переменной длинны

Yan?
17.08.2016
15:51:16
Пользоваться ими плохой тон или из-за личных предпочтений?
я ими никогда не пользуюсь

Мытко
17.08.2016
15:51:18
на русском
да просто никогда не нужно было
типа
я всегда делаю разные классы для всего
телефон был бы у меня не строкой, а отдельный классом phone

Google

Мытко
17.08.2016
15:52:45
может имя было бы просто строкой
и то не уверен

Andrey
17.08.2016
15:53:20

Мытко
17.08.2016
15:53:34
ну да
тебе никто не мешает правда сделать find(String[] args)
и будет так же

Yan?
17.08.2016
15:54:49
А зачем тогда varargs, если можно через String[]?

Мытко
17.08.2016
15:55:11
ну
не так же
типа вот это ты делать не сможешь
и find("guga", "vloger")
и find("guga")
сможешь делать
find(new String[] {"guga", "vloger"})

Andrey
17.08.2016
16:04:36

Виталий
17.08.2016
17:35:56

Andrey
17.08.2016
17:38:20
Блин, люди! Почему в джаве нет значений по-умолчанию?? Какая причина так не делать была?

Pavel
17.08.2016
17:44:58

Andrey
17.08.2016
17:45:09

Pavel
17.08.2016
17:45:33
Делать отдельный код для значений по умолчанию
Не забывай там одни указатели

Google

Pavel
17.08.2016
17:46:01
А при значении по умолчанию значение еще надо создать где то

Alexey
17.08.2016
17:47:49

Pavel
17.08.2016
17:49:04
Pointer все таки указатель

Andrey
17.08.2016
17:49:10
Почему нельзя было сделать сахаром? Чтобы компилятор сам делал вызовы конструктора с подставленными туда необязательными полями?

Pavel
17.08.2016
17:49:58
Надо, только это делает jvm при явном указании на то

Andrey
17.08.2016
17:51:16
Например, чтобы new Clazz(foo) компилятор воспринимал как new Clazz(foo, default_value). Это же сахар и на байт-код не влияет никак. А язык становится гибче.

Pavel
17.08.2016
17:53:24

Andrey
17.08.2016
17:54:48

Pavel
17.08.2016
17:55:31
Ну смысл прыгать по разным структурам языка.

Andrey
17.08.2016
17:56:01
+ сложности в значениях по умолчанию нет никакой. Основная сложность в низкоуровневой работе с памятью. В функциях со значениями по умолчанию сложности нет.
Тебе что больше нравится
Document doc = Jsoup.parse(file, Charset.DefaultEncoding(), "/");
Или же
Document doc = Jsoup.parse(file);
? Вот мне нравится второй вариант. И он очевидно что делает. В первом случае аргументы тупо избыточны.

Pavel
17.08.2016
18:01:10
Мне нравится создать jsoup с нужными полями, инжекнуть в сервис и норм. И использовать второй вариант записи.

Andrey
17.08.2016
18:03:01

Alexey
17.08.2016
18:05:00
офтопик

Timur
17.08.2016
18:05:08
потому что код не только писать, но и читать потом надо. И поддерживать. А имплиситы потом аукнутся после того, как ты через неделю посмотришь на код и не поймёшь, что вообще происходит.

Andrey
17.08.2016
18:10:09

Timur
17.08.2016
18:12:23
Ты его и приводил.
Document doc = Jsoup.parse(file);
От того, что ты коротко напишешь, разбираться потом не проще будет.

Andrey
17.08.2016
18:13:20

Timur
17.08.2016
18:14:03
Это сейчас всё понятно, вернись к нему через неделю, увидишь.

Google

Andrey
17.08.2016
18:15:07
Или создание отдельного конструктора положительно сказывается на читаемости?

Timur
17.08.2016
18:16:50
Наличие неявно присвояемых аргументов негативно сказывается.

Andrey
17.08.2016
18:23:49
Наличие неявно присвояемых аргументов негативно сказывается.
Почему? Я не понимаю этого. Давайте я приведу пример очень популярной библиотеки:
FileUtils.writeStringToFile(file.toFile(), document.toString(), Charset.defaultCharset(), false);
Супер понятно, что я хотел сделать, правда? Я больше скажу. Они задепрекейтили метод с двумя аргументами, так как есть вот такой всё умеющий делать монстр. Зато супер читаемо всё, правда?

Берял
17.08.2016
18:29:28
можно юзать аннотации для дефолт значений, но сигнатуру метода это не изменит, поэтому все равно уродство

Timur
17.08.2016
18:30:51
Для своих нужд ты напишешь обёртку, функциональность, предоставляемая обёрткой, будет инкапсулирована внурти так, что если для тебя будет условно "не важно" с какими аргументами будет вызываться
writeStringToFile
. Используя эту обёртку, ты сможешь решать свои задачи, не заботясь о деталях. А если надо будет, то пойдёшь и посмотришь внутрь и увидишь.
Но скрывать по умолчанию от любого, читающего код было бы неверно и делать неявными параметры, которые ты считаешь неважными.


Andrey
17.08.2016
18:33:20
Для своих нужд ты напишешь обёртку, функциональность, предоставляемая обёрткой, будет инкапсулирована внурти так, что если для тебя будет условно "не важно" с какими аргументами будет вызываться
writeStringToFile
. Используя эту обёртку, ты сможешь решать свои задачи, не заботясь о деталях. А если надо будет, то пойдёшь и посмотришь внутрь и увидишь.
Но скрывать по умолчанию от любого, читающего код было бы неверно и делать неявными параметры, которые ты считаешь неважными.
А почему не сделают супер-метод тогда? Зачем нужны разные методы, если всё равно под каждый чих нужно писать обёртку?

Мытко
17.08.2016
18:35:16
Мне кажется, значения по умолчанию - это тема для оффтопа

Andrey
17.08.2016
18:39:01

Мытко
17.08.2016
18:43:17

Admin
ERROR: S client not available

guga
17.08.2016
18:44:17
А в месте с дефолтными значениями пришлось бы еще и именованные параметры сделать.

Andrey
17.08.2016
18:44:29

guga
17.08.2016
18:46:06
В реализации дефолтные значений, значение которое задано можно опустить, значить компилятор должен знать не только его позицию

Andrey
17.08.2016
18:46:29
Прости, но я не понял, что ты написал.

Берял
17.08.2016
18:47:42

guga
17.08.2016
18:47:50
допустим у тебя есть метод foo(int a, int b = 2, int c), ты его можешь вызнать как foo(1, 2)

Andrey
17.08.2016
18:48:13

guga
17.08.2016
18:48:22
lol

Google

guga
17.08.2016
18:48:32
а какой тогда профит от дефолтных значений?
чем тебя не устроила цепочка методов
foo(int a, int c){
foo(int a, 2, int c)
}

Митко Соловец?
17.08.2016
18:49:55
но выглядит не очень, когда куча такой лапши вложенной
оберточная наркомания я это называю

Мытко
17.08.2016
18:50:56
По моему с пивасом потянет

Митко Соловец?
17.08.2016
18:51:30
алкоголь и кодинг не совместимы

guga
17.08.2016
18:51:54

Митко Соловец?
17.08.2016
18:52:00
на новый год 2015 мы с другом 2 часа пытались написать хеллоу ворлд

guga
17.08.2016
18:53:39
Но, если честно, я не понимаю, почему в жабу не добавят именованных параметров и дефолтных значений. Это же изменения на уровне javac

Митко Соловец?
17.08.2016
18:54:00
не все так просто, очевидно
иначе бы сделали

guga
17.08.2016
18:54:36
ну как бы в скале это есть

Andrey
17.08.2016
18:54:52

guga
17.08.2016
18:55:21
в котлине тоже
https://kotlinlang.org/docs/reference/functions.html#named-arguments

Митко Соловец?
17.08.2016
18:55:48
там есть активисты
которые за все новое
но не все утверждают

Andrey
17.08.2016
18:56:03
Симпотично выглядит. Беру своё мнение назад. Именованые параметры неплохи.

Митко Соловец?
17.08.2016
18:56:07
значит что-то это ломает и будет стоить дорого

Andrey
17.08.2016
18:57:32

guga
17.08.2016
18:58:18
А что это ломает? о_О