Исходя из в основном фона c #, я привык использовать термин «интерфейс» для описания объекта без реализации, определяющей поведение. В c # соглашение заключается в добавлении имен интерфейсов с помощью «I», например IEnumerable
, и т. Д.
Конечно, у концепции разные названия на разных языках. В Swift та же концепция называется «протокол». Когда я разрабатываю протоколы, у меня часто бывают очень похожие имена для протокола и класса, который его реализует. До сих пор я добавлял слово «протокол» к этим объектам так же, как я использовал «Я» в c #, как EnumerableProtocol
и т. Д.
Любые мысли о соглашении об именовании для протоколов в Swift?
naming-standards
swift-language
Майкл Доу
источник
источник
Equatable
классы можно приравнять,NSCopying
классы можно скопировать и т. д. Единственное исключение, которое приходит на ум, - это делегаты и источники данных, которые являютсяSomethingDelegate
илиSomethingDataSource
. Я думаю, что различие заключается в том, что у классов-владельцев будет что-то подобноеvar dataSource: SomethingDataSource
, но вы не увидите ничего подобногоvar foo: Equatable
.Ответы:
Свифт значительно повзрослел за годы, прошедшие с момента написания этого ответа. Руководство по проектированию теперь заявляет :
Спасибо Дэвиду Джеймсу за то, что он это заметил!
Оригинальный ответ
Хорошей идеей может быть использование некоторой формы венгерской нотации - для представления важных понятий, которые не могут быть закодированы внутри системы типов. Однако тот факт, что некоторый идентификатор ссылается на протокол, является частью системы типов в Swift (и C #), и поэтому любой префикс или суффикс только добавляет шум. Четкие префиксы или суффиксы - лучшая идея для таких понятий, как исключения или события.
В отсутствие официального руководства по стилю для Swift, нам приходится придумывать свои собственные или заимствовать из существующих руководств или кода. Например, руководство по стилю Objective C для Какао содержит этот раздел:
Однако рекомендация по второму пункту больше не применима:
Здесь
…Protocol
суффикс использовался для устранения неоднозначности протокола от класса.Стандартная библиотека Swift содержит протоколы
Equatable
,Comparable
иPrintable
. Они не используют форму «… ing» Какао, а скорее суффикс «... способный», чтобы объявить, что любой экземпляр этого типа должен поддерживать определенную операцию.Заключение
В некоторых случаях, когда протокол имеет только одну соответствующую реализацию, может иметь смысл суффикс «… Protocol», чтобы класс и протокол могли иметь одно и то же имя. Однако это должно быть ограничено только такими случаями.
В противном случае имя должно быть каким-то существительным, отражающим, какие операции содержит этот протокол. Хорошей отправной точкой может быть использование формы глагола «… ing» или «способный», и такие имена вряд ли будут конфликтовать с именами классов.
Название
EquatableProtocol
это не рекомендуется . ИмяEquatable
илиEquating
было бы намного лучше, и я не ожидаю, что у какого-либо класса будет имяEquatable
. В этом случаеProtocol
суффиксом является шум.источник