Для разработчика, плохо знакомого с этой системой, было бы довольно сложно догадаться, что сделал истина. Первое, что вы должны сделать, это навести курсор на имя метода или перейти к определению (ни одна из которых не является большой задачей)
Да, верно. Самодокументированный код - прекрасная вещь. Как указывалось в других ответах, существуют способы устранить неоднозначность вызова ReturnEmployeeIds
, используя перечисление, имена других методов и т. Д. Однако иногда вы не можете избежать случая, но не хотите уходить и использовать они повсюду (если вам не нравится многословие Visual Basic).
Например, это может помочь уточнить один вызов, но не обязательно другой.
Именованный аргумент может быть полезен здесь:
var ids = ReturnEmployeeIds(includeManagement: true);
Не добавлю много дополнительной ясности (я собираюсь догадаться, что это синтаксический анализ перечисления):
Enum.Parse(typeof(StringComparison), "Ordinal", ignoreCase: true);
Это может на самом деле уменьшить ясность (если человек не понимает, что такое емкость в списке):
var employeeIds = new List<int>(capacity: 24);
Или где это не имеет значения, потому что вы используете хорошие имена переменных:
bool includeManagement = true;
var ids = ReturnEmployeeIds(includeManagement);
Есть ли где-нибудь, где формально обсуждается, стоит ли явно указывать необязательные параметры, когда вам не нужен компилятор?
Не AFAIK. Давайте рассмотрим обе части: единственное время, когда вам нужно явно использовать именованные параметры, это потому, что компилятор требует от вас этого (обычно это устранение неоднозначности операторов). Так что кроме этого вы можете использовать их в любое время. В этой статье от MS есть несколько советов о том, когда вы можете их использовать, но это не совсем определенно https://msdn.microsoft.com/en-us/library/dd264739.aspx .
Лично я нахожу, что использую их чаще всего, когда создаю пользовательские атрибуты или заглушаю новый метод, в котором мои параметры могут изменяться или переупорядочиваться (именованные атрибуты b / c могут быть перечислены в любом порядке). Кроме того, я использую их только когда я предоставляю статическое значение inline, в противном случае, если я передаю переменную, я пытаюсь использовать хорошие имена переменных.
TL; DR
В конечном итоге все сводится к личным предпочтениям. Конечно, есть несколько вариантов использования, когда вам нужно использовать именованные параметры, но после этого вам нужно сделать оценочный вызов. IMO - используйте его везде, где, по вашему мнению, это поможет документировать ваш код, уменьшить двусмысленность или позволить защитить сигнатуры методов.
boolean
аргументы метода и как?