Включение предлогов в конце имен методов соответствует или ухудшает нормальный дизайн C # API? - PullRequest
12 голосов
/ 23 ноября 2010

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

Недавно я попросил рецензента кода указать, что у меня есть привычка включать предлоги в конце моих методов. Вот недавний метод, который я написал как метод расширения для класса 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. Например, в интерфейсе Fluent от NUnit у вас есть:

Assert.That(result, Is.EqualTo(1.0));

Я тоже видел это с Линком:

list.CopyTo(anotherList);
list.IndexOf(item);
list.RemoveAt(0);

Есть ли какой-либо определенный или последовательный способ, которым разработчики .NET и / или сторонних API используют предлоги в конце методов? Или это просто вопрос стиля и субъективности? Изменился ли дизайн API в самой .NET Framework с этой политикой или он всегда был на месте?

Ответы [ 4 ]

7 голосов
/ 23 ноября 2010

Предлоги в порядке, если объектом предлога является соответствующий аргумент (обычно первый, а не аргумент this метода расширения).

Пример, в котором аргумент может быть позже первого:

array.CopyCountedTo(count, destination);

Чтобы ответить на ваш вопрос о том, развивалось ли это с .NET, нет, не имеет.

Предлоги в именах функций гораздо более распространены, чем Microsoft (например, Java имеет string.charAt и string.indexOf), также .NET использует его намного дольше, чем LINQ (например, ArrayList.IndexOf в .NET 1.0).

4 голосов
/ 23 ноября 2010

Согласен, это субъективно, но я исходил из того, что мне не нужно «идти к определению», чтобы понять, что делает вызов метода. Название не должно расширяться в роман, но описательный, конечно, не повредит.

2 голосов
/ 23 ноября 2010

Мой личный взгляд на этот вопрос заключается в том, что предлоги усиливают значение имени метода. Я бы никогда не использовал их в именах свойств, поскольку они почти всегда подразумевают действие или расчет. Чтобы использовать примеры, которые вы предложили из фреймворка:

RemoveAt явно подразумевает, что он работает с использованием позиции, в то время как Remove расплывчато; вы не узнаете его истинное значение, пока не изучите параметры.

CopyTo подразумевает как дублирование, так и перемещение, тогда как Copy только явно подразумевает дублирование.

IndexOf сообщает нам как значение возвращаемого значения, так и параметр метода, тогда как Index только указывает на возвращаемое значение.

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

1 голос
/ 23 ноября 2010

Как вы заметили, это субъективно, но мне нравится это делать, и тот факт, что Linq использует его, вызывает у меня неявное одобрение со стороны Microsoft.

...