Vindo de um background principalmente em c #, estou acostumado a usar o termo "interface" para descrever um objeto sem implementação que define o comportamento. Em c #, a convenção é acrescentar nomes de interface com "I", como em IEnumerable
etc.
Obviamente, o conceito tem nomes diferentes em diferentes idiomas. No Swift, o mesmo conceito é chamado de "protocolo". Quando estou desenvolvendo protocolos, geralmente tenho nomes muito semelhantes para o protocolo e uma classe que o implementa. Até agora, eu anexei a palavra "protocolo" a esses objetos da mesma maneira que usaria "I" em c #, como em EnumerableProtocol
etc.
Alguma opinião sobre uma convenção de nomenclatura para protocolos rapidamente?
naming-standards
swift-language
Michael Daw
fonte
fonte
Equatable
as classes podem ser equiparadas, asNSCopying
classes podem ser copiadas, etc. A única exceção que vem à mente são delegados e fontes de dados, que sãoSomethingDelegate
ouSomethingDataSource
. Eu acho que a distinção é que as classes proprietárias terão algo parecidovar dataSource: SomethingDataSource
, mas você não verá algo parecidovar foo: Equatable
.Respostas:
Swift amadureceu significativamente nos anos desde que esta resposta foi escrita. As diretrizes de design agora declaram :
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:
No entanto, o conselho do segundo ponto não é mais aplicável:
Aqui, o
…Protocol
sufixo foi usado para desambiguar o protocolo da classe.A biblioteca padrão Swift contém os protocolos
Equatable
,Comparable
ePrintable
. 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ão
EquatableProtocol
é recomendável . O nomeEquatable
ouEquating
seria muito melhor, e eu não espero que nenhuma classe tenha o nomeEquatable
. Nesse caso, oProtocol
sufixo é ruído.fonte