Ich komme hauptsächlich aus dem C # -Hintergrund und bin es gewohnt, den Begriff "Schnittstelle" zu verwenden, um ein Objekt ohne Implementierung zu beschreiben, die das Verhalten definiert. In c # besteht die Konvention darin, Schnittstellennamen wie in IEnumerable
usw. ein "I" voranzustellen .
Natürlich hat das Konzept verschiedene Namen in verschiedenen Sprachen. In Swift wird dasselbe Konzept als "Protokoll" bezeichnet. Wenn ich Protokolle entwickle, habe ich oft sehr ähnliche Namen für das Protokoll und eine Klasse, die es implementiert. Bisher habe ich an diese Objekte das Wort "protocol" angehängt, so wie ich "I" in c #, wie in EnumerableProtocol
usw. verwendet habe.
Überlegungen zu einer Namenskonvention für Protokolle in Kürze?
naming-standards
swift-language
Michael Daw
quelle
quelle
Equatable
Klassen können gleichgesetzt werden,NSCopying
Klassen können kopiert werden usw. Die einzige Ausnahme, die in den Sinn kommt, sind Delegaten und Datenquellen, dieSomethingDelegate
oder sindSomethingDataSource
. Ich denke, der Unterschied ist, dass die besitzenden Klassen so etwas haben werdenvar dataSource: SomethingDataSource
, aber Sie werden so etwas nicht sehenvar foo: Equatable
.Antworten:
Swift ist in den Jahren seit dieser Antwort deutlich gereift. In den Gestaltungsrichtlinien heißt es nun :
Vielen Dank an David James, der das entdeckt hat!
Ursprüngliche Antwort
Die Verwendung einer Form der ungarischen Notation kann eine gute Idee sein - um wichtige Konzepte darzustellen, die im Typensystem nicht codiert werden können. Die Tatsache, dass sich ein Bezeichner auf ein Protokoll bezieht, ist jedoch Teil des Typsystems in Swift (und C #) und als solches fügt jedes Präfix oder Suffix nur Rauschen hinzu. Klare Präfixe oder Suffixe sind eine bessere Idee für Konzepte wie Ausnahmen oder Ereignisse.
Da es keinen offiziellen Styleguide für Swift gibt, müssen wir uns einen eigenen ausdenken oder ihn von vorhandenen Guides oder Codes ausleihen. Der Objective-C-Styleguide für Cocoa enthält beispielsweise folgenden Abschnitt:
Der Hinweis des zweiten Punktes gilt jedoch nicht mehr:
Hier wurde das
…Protocol
Suffix verwendet, um das Protokoll von der Klasse zu trennen.Der Swift Standard Library enthält die Protokolle
Equatable
,Comparable
undPrintable
. Diese verwenden nicht das Cocoa-Formular „… ing“, sondern das Suffix „… able“, um zu deklarieren, dass jede Instanz dieses Typs eine bestimmte Operation unterstützen muss.Fazit
In einigen Fällen, in denen ein Protokoll nur eine relevante Implementierung hat, kann das Suffix „… Protocol“ sinnvoll sein, damit Klasse und Protokoll denselben Namen haben können. Dies sollte jedoch nur auf solche Fälle beschränkt sein.
Andernfalls sollte der Name ein Substantiv sein, das angibt, welche Operationen in diesem Protokoll enthalten sind. Die Verwendung einer „… ing“ - oder „… able“ -Form eines Verbs kann ein guter Ausgangspunkt sein, und es ist unwahrscheinlich, dass solche Namen mit Klassennamen in Konflikt stehen.
Der Name
EquatableProtocol
ist nicht zu empfehlen . Der NameEquatable
oderEquating
wäre weitaus besser, und ich erwarte nicht, dass eine Klasse den Namen hatEquatable
. In diesem Fall ist dasProtocol
Suffix Rauschen.quelle