Re[3]: А почему нет вызова функций с именованными аргументам
От: B0FEE664  
Дата: 12.09.14 08:51
Оценка:
Здравствуйте, enji, Вы писали:

E>Здравствуйте, B0FEE664, Вы писали:


BFE>>Моё мнение такое: экономит надо не время записи, а время чтения.

BFE>>Запись:
E>>>f(.a = 1, .b=42);
BFE>>ничем не лучше, а даже хуже, чем:
BFE>>

BFE>>const int a = 1;
BFE>>const int b = 42;
BFE>>f(a, b);


E>это все мило, но кто так пишет?

Вы сами так пишите,
Автор: enji
Дата: 11.09.14
только вместо локальных констант используете enum.

E>Это просто убивает все однострочники.

Я запись вида:
     SendAnswer(.nAnswerNumber = 1, .nAnswerPriority = 42, .nAnswerValue = 42);

буду записывать так:
     SendAnswer(
                .nAnswerNumber   = 1,
                .nAnswerPriority = 42,
                .nAnswerValue    = 42
               );

так как читать такое намного проще читать. Однострочники меня не волнуют.

E>Опять же, ты можешь ошибиться и написать f(b, a). А если я напишу f(.b=42, .a=1), то это будет корректно обработано (ну по крайней мере, если применить правила из питона).

E>Далее, функция может иметь аргументы по умолчанию — void f(a = 1, b = 2, c = 3). И ее можно будет вызывать f(.c=4). Твой вариант с константами тут не поможет...
Это хорошие аргументы до тех пор, пока мы не думаем о виртуальных методах.

E>Это к вопросу о нужности лямбд. Зачем нужна лямбда из одной строки, когда можно на 5 строках в другом месте файла изобразить повторно используемый функтор? Вроде как и низачем. Однако ж функторы особо не пишут, и вместо find_if фигачат цикл...

Потому, что для чтения кода важна локальность определения. Редко, когда один и тот же функтор используется более одного раза в программе.

Ну и вообще, предложенный метод не достаточно радикален. Перепутать f(.a=1, .b=42) и f(.a=42, .b=1) тоже довольно просто.

Есть только один по настоящему хардкодный путь: не использовать никаких констант без user-defined суффиксов:

f(1_a, 42_b);
SendAnswer(1_answer_number, 2_answer_priority, 42_answer_value);

а для каждого вида параметра определить свой тип.
Но такой путь коммерчески не выгоден.
И каждый день — без права на ошибку...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.