Venant d'un arrière-plan principalement c #, je suis habitué à utiliser le terme "interface" pour décrire un objet sans implémentation définissant le comportement. En c #, la convention est d’ajouter des noms d’interface avec "I", comme dans IEnumerable
, etc.
Bien entendu, le concept a différents noms dans différentes langues. Dans Swift, le même concept s'appelle un "protocole". Lorsque je développe des protocoles, j'ai souvent des noms très similaires pour le protocole et une classe qui l'implémente. Jusqu'ici, j'ai ajouté le mot "protocole" à ces objets de la même manière que j'utiliserais "I" en c #, comme dans EnumerableProtocol
, etc.
Avez-vous des idées sur une convention de nommage pour les protocoles dans swift?
naming-standards
swift-language
Michael Daw
la source
la source
Equatable
les classes peuvent être assimilées, lesNSCopying
classes peuvent être copiées, etc. La seule exception qui me vient à l’esprit est les délégués et les sources de données, qu’ils soientSomethingDelegate
ouSomethingDataSource
. Je pense que la distinction est que les classes propriétaires auront quelque chose commevar dataSource: SomethingDataSource
, mais vous ne verrez pas quelque chose commevar foo: Equatable
.Réponses:
Swift a considérablement mûri au cours des années qui ont suivi cette réponse. Les directives de conception indiquent désormais :
Merci à David James d' avoir remarqué cela!
Réponse originale
Utiliser une forme de notation hongroise peut être une bonne idée - représenter des concepts importants qui ne peuvent pas être encodés dans le système de types. Cependant, le fait que certains identificateurs fassent référence à un protocole fait partie du système de types de Swift (et C #) et, de ce fait, tout préfixe ou suffixe n’ajoute que du bruit. Les préfixes ou suffixes clairs sont une meilleure idée pour des concepts tels que les exceptions ou les événements.
En l'absence d'un guide de style officiel pour Swift, nous devons inventer le nôtre ou emprunter des guides ou du code existants. Par exemple, le guide de style Objective-C pour Cocoa contient cette section:
Toutefois, l'avis du deuxième point n'est plus applicable:
Ici, le
…Protocol
suffixe a été utilisé afin de distinguer le protocole de la classe.La bibliothèque standard Swift contient les protocoles
Equatable
,Comparable
etPrintable
. Celles-ci n'utilisent pas la forme “… ing” de cacao, mais plutôt le suffixe “… capable” de déclarer que toute instance de ce type doit prendre en charge une certaine opération.Conclusion
Dans quelques cas où un protocole n'a qu'une seule implémentation pertinente, un suffixe «… Protocole» peut avoir un sens, de sorte que la classe et le protocole puissent avoir le même nom. Toutefois, cela devrait être limité à de tels cas seulement.
Sinon, le nom devrait être un nom indiquant les opérations contenues dans ce protocole. L'utilisation d'un verbe «… ing» ou «… capable» peut constituer un bon point de départ et il est peu probable que ces noms entrent en conflit avec les noms de classe.
Le nom
EquatableProtocol
n'est pas recommandé . Le nomEquatable
ouEquating
serait beaucoup mieux, et je ne m'attends pas à ce qu'une classe ait le nomEquatable
. Dans ce cas, leProtocol
suffixe est bruit.la source