Swift, bu cevabın yazıldığı tarihten bu yana önemli ölçüde olgunlaştı. Tasarım yönergeleri şimdi belirtildi :
Bir şeyin ne olduğunu açıklayan protokoller, isimler olarak okunmalıdır (örn. Collection
).
Bir tarif Protokoller yeteneği eklerini kullanarak adlı olmalıdır able
, ible
ya da ing
(örneğin Equatable
, ProgressReporting
).
Bunu tespit ettiğin için David James'e teşekkür ederim !
Orijinal cevap
Macar Notasyonu'nın bir türünü kullanmak iyi bir fikir olabilir - tür sisteminin içinde kodlanamayan önemli kavramları göstermek. Bununla birlikte, bazı tanımlayıcı bir protokol anlamındadır olması olan Swift (C #) 'de tip sisteminin bir parçasıdır, ve bu tür herhangi bir önek veya son ek olarak, sadece gürültüye sebep olur. Önekleri veya sonekleri temizle, istisnalar veya olaylar gibi kavramlar için daha iyi bir fikirdir.
Swift için resmi bir stil rehberinin yokluğunda, kendimizle gelmeliyiz veya mevcut rehber veya kodlardan ödünç almalıyız. Örneğin, Kakao için Objective-C tarzı kılavuz bu bölümü içerir:
Protokoller davranışlarını nasıl grupladıklarına göre adlandırılmalıdır:
Protokollerin çoğu, özellikle herhangi bir sınıfla ilişkilendirilmeyen yöntemleri gruplandırır. Bu protokol türü, protokolün bir sınıfla karıştırılmaması için adlandırılmalıdır. Yaygın olarak yapılan bir kural, bir mermi (“... ing”) formu kullanmaktır:
NSLocking
- Güzel.
NSLock
- Zavallı (bir sınıf için bir isim gibi görünüyor).
Bazı protokoller bir dizi ilişkisiz yöntemi gruplandırır (birkaç ayrı küçük protokol oluşturmak yerine). Bu protokoller, protokolün temel ifadesi olan bir sınıfla ilişkilendirilme eğilimindedir. Bu durumlarda, sözleşme protokole sınıfla aynı adı vermektir.
Bu tür bir protokol örneği, NSObject
protokoldür. Bu protokol, sınıf hiyerarşisindeki konumu ile ilgili herhangi bir nesneyi sorgulamak, belirli yöntemleri çağırmak ve referans sayısını artırmak veya azaltmak için kullanabileceğiniz yöntemleri gruplandırır. Çünkü NSObject
sınıf Bu yöntemlerin birincil ifadesini sağlayan, protokol sınıfın almıştır.
Bununla birlikte, ikinci noktanın tavsiyesi artık geçerli değildir:
Sınıfların ve protokollerin ad alanı Swift'de bir araya getirildiği için NSObject
, Objective-C'deki protokol Swift'de yeniden düzenlendi NSObjectProtocol
. ( kaynak )
Burada, …Protocol
eki protokolden sınıftan ayırmak için kullanılmıştır.
Swift Standart Kütüphane protokollerini içeren Equatable
, Comparable
ve Printable
. Bunlar, Kakao'yu “… ing” formunu kullanmaz, ancak bu türden herhangi bir örneğin belirli bir işlemi desteklemesi gerektiğini ilan etmek için “… mümkün” sonekini kullanır.
Sonuç
Bir protokolün sadece tek bir uygun uygulamaya sahip olduğu birkaç durumda, bir “… Protokol” eki, sınıf ve protokolün aynı adı alabilmesi için bir anlam ifade edebilir. Ancak, bu sadece bu gibi durumlarda sınırlı kalmalıdır.
Aksi takdirde, isim bu protokolün hangi işlemleri içerdiğini yansıtan bir isim olmalıdır. Bir fiilin “… ing” veya “… mümkün” biçimini kullanmak iyi bir başlangıç noktası olabilir ve bu tür adların sınıf adlarıyla çakışması olası değildir.
Adı EquatableProtocol
olan değil tavsiye ediyoruz . Adı Equatable
ya Equating
da çok daha iyi olurdu ve herhangi bir sınıfın adı olmasını beklemiyorum Equatable
. Bu durumda, Protocol
son ek gürültüdür.