Swift amadureceu significativamente nos anos desde que esta resposta foi escrita. As diretrizes de design agora declaram :
Protocolos que descrevem o que é algo devem ser lidos como substantivos (por exemplo Collection
).
Protocolos que descrevem a capacidade deve ser nomeado usando os sufixos able
, ible
ou ing
(por exemplo Equatable
, ProgressReporting
).
Obrigado a David James por detectar isso!
Resposta original
Usar alguma forma de notação húngara pode ser uma boa idéia - representar conceitos importantes que não podem ser codificados dentro do sistema de tipos. No entanto, o fato de algum identificador se referir a um protocolo faz parte do sistema de tipos no Swift (e C #) e, como tal, qualquer prefixo ou sufixo apenas adiciona ruído. Prefixos ou sufixos claros são uma ideia melhor para conceitos como exceções ou eventos.
Na ausência de um guia de estilo oficial para o Swift, precisamos criar o nosso próprio, ou pedir emprestado aos guias ou códigos existentes. Por exemplo, o guia de estilo Objective-C para cacau contém esta seção:
Os protocolos devem ser nomeados de acordo com a forma como agrupam comportamentos:
A maioria dos protocolos agrupa métodos relacionados que não estão associados a nenhuma classe em particular. Esse tipo de protocolo deve ser nomeado para que o protocolo não seja confundido com uma classe. Uma convenção comum é usar um formulário gerúndio ("... ing"):
NSLocking
- Boa.
NSLock
- Ruim (parece um nome para uma classe).
Alguns protocolos agrupam vários métodos não relacionados (em vez de criar vários pequenos protocolos separados). Esses protocolos tendem a estar associados a uma classe que é a principal expressão do protocolo. Nesses casos, a convenção é dar ao protocolo o mesmo nome que a classe.
Um exemplo desse tipo de protocolo é o NSObject
protocolo. Este protocolo agrupa métodos que você pode usar para consultar qualquer objeto sobre sua posição na hierarquia de classes, para invocá-lo métodos específicos e para aumentar ou diminuir sua contagem de referência. Como a NSObject
classe fornece a expressão principal desses métodos, o protocolo é nomeado após a classe.
No entanto, o conselho do segundo ponto não é mais aplicável:
Como o espaço para nome de classes e protocolos é unificado no Swift, o NSObject
protocolo no Objective-C é remapeado NSObjectProtocol
no Swift. ( fonte )
Aqui, o …Protocol
sufixo foi usado para desambiguar o protocolo da classe.
A biblioteca padrão Swift contém os protocolos Equatable
, Comparable
e Printable
. Eles não usam o formulário “… ing” do cacau, mas o sufixo “… capaz” para declarar que qualquer instância desse tipo deve suportar uma determinada operação.
Conclusão
Em alguns casos em que um protocolo possui apenas uma implementação relevante, um sufixo "... Protocol" pode fazer sentido para que a classe e o protocolo possam ter o mesmo nome. No entanto, isso deve ser limitado apenas a esses casos.
Caso contrário, o nome deve ser um substantivo que reflita quais operações esse protocolo contém. O uso de uma forma "... ing" ou "... capaz" de um verbo pode ser um bom ponto de partida, e é improvável que esses nomes entrem em conflito com os nomes das classes.
O nome nãoEquatableProtocol
é recomendável . O nome Equatable
ou Equating
seria muito melhor, e eu não espero que nenhuma classe tenha o nome Equatable
. Nesse caso, o Protocol
sufixo é ruído.