Berasal dari latar belakang c #, saya terbiasa menggunakan istilah "antarmuka" untuk menggambarkan suatu objek tanpa implementasi yang mendefinisikan perilaku. Di c #, konvensi ini untuk menambahkan nama antarmuka dengan "I", seperti pada IEnumerable
, dll.
Tentu saja, konsep tersebut memiliki nama yang berbeda dalam bahasa yang berbeda. Dalam Swift, konsep yang sama disebut "protokol". Ketika saya mengembangkan protokol, saya sering memiliki nama yang sangat mirip untuk protokol dan kelas yang mengimplementasikannya. Sejauh ini, saya telah menambahkan kata "protokol" ke objek-objek ini dengan cara yang sama saya akan menggunakan "I" di c #, seperti pada EnumerableProtocol
, dll.
Adakah pemikiran tentang konvensi penamaan untuk protokol dengan cepat?
sumber
Equatable
kelas dapat disamakan,NSCopying
kelas dapat dengan cara disalin, dll. Satu-satunya pengecualian yang muncul dalam pikiran adalah delegasi dan sumber data, yang merupakanSomethingDelegate
atauSomethingDataSource
. Saya pikir perbedaannya adalah bahwa kelas pemilik akan memiliki sesuatu sepertivar dataSource: SomethingDataSource
, tetapi Anda tidak akan melihat sesuatu seperti ituvar foo: Equatable
.Jawaban:
Swift telah matang secara signifikan di tahun-tahun sejak jawaban ini ditulis. Pedoman desain sekarang menyatakan :
Terima kasih kepada David James karena mengetahui ini!
Jawaban Asli
Menggunakan beberapa bentuk Notasi Hongaria dapat menjadi ide yang baik - untuk mewakili konsep penting yang tidak dapat dikodekan dalam sistem tipe. Namun, fakta bahwa beberapa pengenal mengacu pada protokol adalah bagian dari sistem tipe di Swift (dan C #), dan dengan demikian setiap awalan atau sufiks hanya menambah noise. Prefiks atau sufiks yang jelas adalah ide yang lebih baik untuk konsep seperti pengecualian atau peristiwa.
Dengan tidak adanya panduan gaya resmi untuk Swift, kita harus membuat sendiri, atau meminjam dari panduan atau kode yang ada. Misalnya, panduan gaya Objective-C untuk Kakao mengandung bagian ini:
Namun, saran dari poin kedua tidak lagi berlaku:
Di sini,
…Protocol
suffix digunakan untuk mendambug protokol dari kelas.The Swift Standard Library berisi protokol
Equatable
,Comparable
danPrintable
. Ini tidak menggunakan bentuk “… ing” Kakao, tetapi sufiks “… mampu” untuk menyatakan bahwa instance apa pun dari jenis ini harus mendukung operasi tertentu.Kesimpulan
Dalam beberapa kasus di mana protokol hanya memiliki satu implementasi yang relevan, sufiks "... Protokol" dapat masuk akal sehingga kelas dan protokol dapat memiliki nama yang sama. Namun, ini harus dibatasi hanya untuk kasus-kasus seperti itu.
Kalau tidak, namanya harus berupa kata benda yang mencerminkan operasi apa yang ada dalam protokol ini. Menggunakan bentuk "... ing" atau "... mampu" kata kerja bisa menjadi titik awal yang baik, dan nama-nama seperti itu tidak mungkin bertentangan dengan nama kelas.
Nama
EquatableProtocol
ini tidak dianjurkan . NamaEquatable
atauEquating
akan jauh lebih baik, dan saya tidak berharap ada kelas yang memiliki namaEquatable
. Dalam hal ini,Protocol
sufiks adalah noise.sumber