Swift ha madurado significativamente en los años transcurridos desde que se escribió esta respuesta. Las pautas de diseño ahora establecen :
Los protocolos que describen qué es algo deben leerse como sustantivos (p Collection
. Ej .).
Protocolos que describen una capacidad deben nombran usando los sufijos able
, ible
o ing
(por ejemplo Equatable
, ProgressReporting
).
¡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:
Los protocolos deben nombrarse de acuerdo con cómo agrupan los comportamientos:
La mayoría de los protocolos agrupan métodos relacionados que no están asociados con ninguna clase en particular. Este tipo de protocolo debe nombrarse para que el protocolo no se confunda con una clase. Una convención común es usar una forma de gerundio ("... ing"):
NSLocking
- Bueno.
NSLock
- Pobre (parece un nombre para una clase).
Algunos protocolos agrupan varios métodos no relacionados (en lugar de crear varios protocolos pequeños separados). Estos protocolos tienden a estar asociados con una clase que es la expresión principal del protocolo. En estos casos, la convención es dar al protocolo el mismo nombre que la clase.
Un ejemplo de este tipo de protocolo es el NSObject
protocolo. Este protocolo agrupa métodos que puede usar para consultar cualquier objeto sobre su posición en la jerarquía de clases, para invocar métodos específicos e incrementar o disminuir su recuento de referencias. Como la NSObject
clase proporciona la expresión principal de estos métodos, el protocolo lleva el nombre de la clase.
Sin embargo, el consejo del segundo punto ya no es aplicable:
Debido a que el espacio de nombres de clases y protocolos está unificado en Swift, el NSObject
protocolo en Objective-C se reasigna NSObjectProtocol
en Swift. ( fuente )
Aquí, el …Protocol
sufijo se usó para desambiguar el protocolo de la clase.
La biblioteca estándar Swift contiene los protocolos Equatable
, Comparable
y Printable
. 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 noEquatableProtocol
es recomendable . El nombre Equatable
o Equating
sería mucho mejor, y no espero que ninguna clase tenga el nombre Equatable
. En este caso, el Protocol
sufijo es ruido.