Включает ли включение предлогов в конце имен методов или отвлекает от обычного дизайна API С#?
Я знаю, что это звучит как субъективный ответ, но я постараюсь сделать вопрос максимально объективным, потому что объективный ответ на этот вопрос был бы наиболее полезным.
Недавно у меня был рецензент кода, в котором у меня есть привычка включать предлоги в конце моих методов. Вот недавний метод, который я написал как метод расширения для класса Point
:
var rectangle = new Rectangle(0, 0, 2, 2);
var point = new Point(3, 1);
var result = point.DistanceTo(rectangle);
Мой обозреватель моего кода отметил, что метод должен быть point.Distance(rectangle)
. Я всегда рассматривал этот субъективный и предметный стиль. Тем не менее, я заметил, что в этом направлении будет развиваться проект .NET API. Например, с интерфейсом NUnit Fluent вы имеете:
Assert.That(result, Is.EqualTo(1.0));
Я также видел это с Linq:
list.CopyTo(anotherList);
list.IndexOf(item);
list.RemoveAt(0);
Есть ли какой-либо согласованный или последовательный способ, которым разработчики .NET и/или сторонних API используют предлоги в конце методов? Или это просто вопрос стиля и субъективности? Является ли дизайн API в платформе .NET развитым с этой политикой или всегда был на месте?
Ответы
Ответ 1
Препозиции прекрасны, если объектом предлога является соответствующий аргумент (обычно первый, никогда не аргумент this
метода расширения).
Пример, где это может быть аргумент позже первого:
array.CopyCountedTo(count, destination);
Чтобы ответить на вопрос о том, развилось ли это с .NET, нет, это не так.
Предлоги в именах функций гораздо более широко распространены, чем Microsoft (например, Java имеет string.charAt
и string.indexOf
), также .NET использует его намного дольше, чем LINQ (например, ArrayList.IndexOf
в .NET 1.0).
Ответ 2
Согласен, это субъективно, но я согласен с предпосылкой, что я не хочу, чтобы "перейти к определению", чтобы понять, что делает вызов метода. Имя не должно раскрываться в романе, но описать его, конечно, не повредит.
Ответ 3
Как вы заметили, это субъективно, но мне нравится это делать, и тот факт, что Linq использует его, поражает меня как неявное одобрение Microsoft.
Ответ 4
Мое личное мнение по этому вопросу заключается в том, что предлоги улучшают значение имени метода. Я бы никогда не использовал их в именах свойств, так как они почти всегда подразумевают действие или расчет. Чтобы использовать примеры, предлагаемые в рамке:
RemoveAt
ясно подразумевает, что он работает с использованием позиции, а Remove
является неопределенным; вы не обнаруживаете его истинного смысла, пока не будете изучать параметры.
CopyTo
подразумевает как дублирование, так и движение, тогда как Copy
только ясно подразумевает дублирование.
IndexOf
указывает нам как значение возвращаемого значения, так и параметр метода, тогда как Index
указывает только на возвращаемое значение.
Итак, давайте, чтобы подвести итог, я считаю, что это совершенно законно, и улучшает читаемость и интуитивность кода.