Viniendo de un fondo principalmente de c #, estoy acostumbrado a usar el término "interfaz" para describir un objeto sin implementación que defina el comportamiento. En c #, la convención es anteponer nombres de interfaz con "I", como en IEnumerable
, etc.
Por supuesto, el concepto tiene diferentes nombres en diferentes idiomas. En Swift, el mismo concepto se llama "protocolo". Cuando desarrollo protocolos, a menudo tengo nombres muy similares para el protocolo y una clase que lo implementa. Hasta ahora, he agregado la palabra "protocolo" a estos objetos de la misma manera que usaría "I" en C #, como en EnumerableProtocol
, etc.
¿Alguna idea sobre una convención de nomenclatura para protocolos en Swift?
naming-standards
swift-language
Michael Daw
fuente
fuente
Equatable
las clases se pueden equiparar, lasNSCopying
clases se pueden copiar, etc. La única excepción que viene a la mente son los delegados y las fuentes de datos, que sonSomethingDelegate
oSomethingDataSource
. Creo que la distinción es que las clases propietarias tendrán algo parecidovar dataSource: SomethingDataSource
, pero no verá algo asívar foo: Equatable
.Respuestas:
Swift ha madurado significativamente en los años transcurridos desde que se escribió esta respuesta. Las pautas de diseño ahora establecen :
¡Gracias a David James por ver esto!
Respuesta original
Usar alguna forma de notación húngara puede ser una buena idea: representar conceptos importantes que no pueden codificarse dentro del sistema de tipos. Sin embargo, el hecho de que algún identificador se refiera a un protocolo es parte del sistema de tipos en Swift (y C #) y, como tal, cualquier prefijo o sufijo solo agrega ruido. Los prefijos o sufijos claros son una mejor idea para conceptos como excepciones o eventos.
En ausencia de una guía de estilo oficial para Swift, tenemos que elaborar la nuestra o pedir prestado las guías o códigos existentes. Por ejemplo, la guía de estilo Objective-C para Cocoa contiene esta sección:
Sin embargo, el consejo del segundo punto ya no es aplicable:
Aquí, el
…Protocol
sufijo se usó para desambiguar el protocolo de la clase.La biblioteca estándar Swift contiene los protocolos
Equatable
,Comparable
yPrintable
. Estos no usan la forma "... ing" de Cocoa, sino el sufijo "... capaz" para declarar que cualquier instancia de este tipo debe admitir una determinada operación.Conclusión
En algunos casos donde un protocolo solo tiene una implementación relevante, un sufijo "... Protocolo" puede tener sentido para que la clase y el protocolo puedan tener el mismo nombre. Sin embargo, esto debería limitarse solo a tales casos.
De lo contrario, el nombre debe ser algún nombre que refleje qué operaciones contiene este protocolo. Usar un verbo "... ing" o "... capaz" puede ser un buen punto de partida, y es poco probable que tales nombres entren en conflicto con los nombres de clase.
El nombre no
EquatableProtocol
es recomendable . El nombreEquatable
oEquating
sería mucho mejor, y no espero que ninguna clase tenga el nombreEquatable
. En este caso, elProtocol
sufijo es ruido.fuente