Pochodząc głównie z języka c #, przyzwyczaiłem się używać terminu „interfejs” do opisywania obiektu bez implementacji, która określa zachowanie. W języku c # konwencja polega na dodawaniu nazw interfejsów do „I”, jak w IEnumerable
itd.
Oczywiście koncepcja ma różne nazwy w różnych językach. W Swift ta sama koncepcja nazywa się „protokołem”. Kiedy opracowuję protokoły, często mam bardzo podobne nazwy protokołu i klasy, która go implementuje. Do tej pory dodawałem słowo „protokół” do tych obiektów w ten sam sposób, w jaki używałem „I” w c #, jak w EnumerableProtocol
itp.
Masz jakieś przemyślenia na temat konwencji nazewnictwa protokołów w krótkim czasie?
naming-standards
swift-language
Michael Daw
źródło
źródło
Equatable
klasy można zrównać,NSCopying
klasy można skopiować, itp. Jedynym wyjątkiem, który przychodzi na myśl, są delegaci i źródła danych, którymi sąSomethingDelegate
lubSomethingDataSource
. Myślę, że różnica polega na tym, że klasy będące właścicielami będą miały coś takiegovar dataSource: SomethingDataSource
, ale czegoś takiego nie zobaczyszvar foo: Equatable
.Odpowiedzi:
Swift dojrzał znacznie od lat, odkąd napisano tę odpowiedź. Wytyczne projektowe określają teraz :
Dziękuję Davidowi Jamesowi za zauważenie tego!
Oryginalna odpowiedź
Dobrym pomysłem może być użycie jakiejś formy notacji węgierskiej - do przedstawienia ważnych pojęć, których nie można zakodować w systemie pisma. Jednak fakt, że jakiś identyfikator odnosi się do protokołu, jest częścią systemu typów w Swift (i C #) i jako taki każdy prefiks lub sufiks tylko dodaje szum. Wyczyść przedrostki lub przyrostki są lepszym pomysłem na pojęcia takie jak wyjątki lub zdarzenia.
W przypadku braku oficjalnego przewodnika po stylu dla Swift, musimy wymyślić własny lub pożyczyć z istniejących przewodników lub kodu. Na przykład przewodnik po stylu C celu dla kakao zawiera tę sekcję:
Jednak rada z drugiego punktu nie ma już zastosowania:
Tutaj zastosowano
…Protocol
sufiks, aby ujednoznacznić protokół z klasy.Swift standardowa biblioteka zawiera protokoły
Equatable
,Comparable
orazPrintable
. Nie używają one formy „… ing” kakao, lecz sufiks „… zdolny” do zadeklarowania, że każda instancja tego typu musi obsługiwać określoną operację.Wniosek
W kilku przypadkach, gdy protokół ma tylko jedną istotną implementację, przyrostek „… Protokół” może mieć sens, aby klasa i protokół mogły mieć tę samą nazwę. Powinno to jednak ograniczać się tylko do takich przypadków.
W przeciwnym razie nazwa powinna być rzeczownikiem odzwierciedlającym operacje, które zawiera ten protokół. Użycie formy „… ing” lub „… zdolnej” czasownika może być dobrym punktem wyjścia i jest mało prawdopodobne, aby takie nazwy kolidowały z nazwami klas.
Nazwa nie
EquatableProtocol
jest godna polecenia . NazwaEquatable
lubEquating
byłaby o wiele lepsza i nie oczekuję, że żadna klasa będzie miała taką nazwęEquatable
. W tym przypadkuProtocol
sufiksem jest hałas.źródło