Включает ли включение предлогов в конце имен методов или отвлекает от обычного дизайна 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 указывает только на возвращаемое значение.

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