Swift-style-guide: Penamaan Protokol

Dibuat pada 7 Des 2015  ·  9Komentar  ·  Sumber: raywenderlich/swift-style-guide

Apakah ada cara yang lebih disukai untuk memberi nama protokol? Seperti menggunakan akhiran "mampu" atau "ing". Saya menemukan Pertanyaan StackExchange ini dengan jawaban yang cukup bagus.

Haruskah ini ditambahkan ke panduan gaya?

Komentar yang paling membantu

Sufiks "Jenis" tampaknya mengikuti cara dinosaurus meskipun saya pikir saya melihat proposal terbang untuk menggunakan "Protokol" seperti yang dilakukan @mitchellporter .

Dari Pedoman Desain Swift API :

Protokol yang menjelaskan sesuatu yang harus dibaca sebagai kata benda (misalnya Koleksi). Protokol yang menggambarkan kemampuan harus diberi nama menggunakan sufiks mampu, ible, atau ing (misalnya Equatable, ProgressReporting).

Semua 9 komentar

Saya pikir akan sulit untuk menerjemahkan gaya nama C# ke Swift. 'I' untuk antarmuka bekerja di .NET karena perbedaan namespace.

Adapun gerund ("mampu" dan "ing"), saya yakin mereka bekerja sama seperti dalam bahasa Inggris:
“A gerund adalah kata benda yang dibuat dari kata kerja dengan menambahkan "-ing."

Misalnya: Saya perlu hash (kata kerja) kelas ini, apakah itu hashable (gerund)? Saya ingin membandingkan (kata kerja), apakah kelas ini sebanding (gerund)?

Jika Anda melihat C#, mereka juga tidak menggunakan gerund untuk semua antarmuka. Ambil Point (kelas) dan IPoint (antarmuka yang mengimplementasikan X dan Y). Membuat sesuatu yang menarik akan sedikit menyesatkan.

Protokol seperti UITableViewDelegate dan UITableViewDataSource baik-baik saja bagi saya. Saya pribadi tidak memiliki masalah dengan ...Protocol suffix tetapi saya tidak menginginkannya sebagai aturan umum. Terkadang 'mampu' bekerja lebih baik, terkadang sufiks lain masuk akal seperti ...Delegate atau ...DataSource.

Saya percaya bahwa jika dibuat hari ini, mereka akan disebut UITableViewDelegateType dan UITableViewDataSourceType. Greg Heo menyebut ini "adalah": http://www.skilled.io/gregheo/what-the-55-swift-standard-library-protocols-taught-me

Banyak dari protokol saya sendiri yang merangkum hanya satu fungsi atau properti. Swift tidak memiliki masalah dengan penamaan protokol yang sama dengan itu, dan saya pikir itu pendekatan yang sangat bersih.

protocol bool {
   var bool: Bool {get}
}

struct Struct: bool {
   let bool = true
}

Saya akan menggunakan delegasi normal dan konvensi penamaan sumber data bila diperlukan, tetapi untuk protokol yang hanya digunakan untuk membuat objek, saya baru saja memasukkan Protocol pada namanya. Tidak yakin apakah ini praktik terbaik atau tidak, ketika saya menelitinya saya tidak dapat menemukan info apa pun.

protocol AlertModalProtocol {
func titleText() -> String
func messageText() -> String
}

struct NewUserAlertModal: AlertModalProtocol {

    func titleText() -> String {
        return "Welcome new user"
    }

    func messageText() -> String {
        return "Thanks for joining the app."
    }
}

Sufiks "Jenis" tampaknya mengikuti cara dinosaurus meskipun saya pikir saya melihat proposal terbang untuk menggunakan "Protokol" seperti yang dilakukan @mitchellporter .

Dari Pedoman Desain Swift API :

Protokol yang menjelaskan sesuatu yang harus dibaca sebagai kata benda (misalnya Koleksi). Protokol yang menggambarkan kemampuan harus diberi nama menggunakan sufiks mampu, ible, atau ing (misalnya Equatable, ProgressReporting).

Itu menarik. Dalam pengalaman saya, ThingType dibutuhkan ketika Thing secara tradisional menjadi kelas non-abstrak. (yaitu Thing adalah tipe konkret yang mengimplementasikan ThingType, dan tipe lain yang lebih spesifik juga mengimplementasikan ThingType.) NSObjectProtocol adalah contoh dari hal semacam ini.

Saya akan menambahkan beberapa teks di sepanjang baris draft Pedoman Desain API.

CEPAT
Saat menonton kode orang lain, saya menghadapi masalah, bahwa protokol yang menjelaskan, apa itu, ketika mereka kata benda, diam-diam tidak nyaman, karena saya sering mengacaukannya dengan metode kelas. Untuk mengatasi masalah ini, saya pikir, cara yang lebih baik untuk menggunakan aturan berikutnya:

When the protocol name is a noun - write ..Protocol (yes, even in swift);
misalnya PhotoModuleProtocol
When the protocol is an adverb or an adjective - write ..able, ..ing and so on;
misalnya Dapat Diuji

Menurut pendapat saya, lebih baik untuk secara eksplisit sekarang apa itu menghitung mundur waktu untuk mengenali kode seseorang, daripada barang-barang hipster Swift.

Saya memposting komentar terakhir saya pada tahun 2015 ... sejak itu saya telah bermigrasi ke sebagian besar menggunakan apa yang dibagikan @gregheo sebelumnya:

Protokol yang menjelaskan sesuatu yang harus dibaca sebagai kata benda (misalnya Koleksi). Protokol yang menggambarkan kemampuan harus diberi nama menggunakan sufiks mampu, ible, atau ing (misalnya Equatable, ProgressReporting).

Jadi misalnya biasanya ada tipe model dasar yang akan terlihat seperti ini:

protocol BaseType {
    var objectId: String { get set }
    var createdAt: NSDate? { get set }
    var updatedAt: NSDate? { get set }
    func toJSON() -> [String: AnyObject]
    static func from(json: [String: AnyObject]) -> AnyObject
}

Karena semua model di seluruh aplikasi akan membutuhkan fungsi ini, semuanya akan sesuai dengan BaseType . Saya sebenarnya telah menamai tipe dasar ini dengan nama aplikasi, jadi jika nama aplikasi Anda adalah Instagram itu akan menjadi InstagramType . Sekarang saya sedang memikirkan hal ini, memasukkan Type dalam nama sepertinya tidak ada gunanya... tidak ada alasan mengapa Anda tidak bisa menamainya BaseModel , InstagramModel atau bahkan hanya Model .

Adapun protokol yang menggambarkan kemampuan saya telah menggunakan sufiks tipe mampu, ible, dan ing juga.

Saya berhenti menggunakan kata protocol dalam nama saya karena itu terasa berlebihan dan saya juga merasa seperti saya menggunakannya untuk membuatnya sangat mudah bagi siapa saja untuk memahami "Hei, ini adalah protokol, bukan kelas" yang terasa salah karena protokol seharusnya dianggap sama dengan kelas, jika tidak di atas mereka, dengan cepat.

Jadi daripada memilih mereka dengan memasukkan protokol dalam nama, saya biarkan saja. Ini hanya apa yang terasa benar bagi saya, saya tidak mengklaim semua ini benar atau salah. Bahkan bertahun-tahun kemudian saya selalu menemukan hal-hal baru di Swift dan saya sudah menyerah untuk mencoba mencari tahu semuanya. Benar-benar hanya mencoba bereksperimen dan melihat apa yang muncul dari komunitas saat ini :)

Namun, penamaan protokol dengan kata benda mengakibatkan penambahan beberapa kata (bisa berupa "..Model", "..Type" dan seterusnya) untuk menentukan, bahwa itu adalah protokol dan bukan kelas. Perubahan hanya dalam jenis kata yang digunakan =)

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

rwenderlich picture rwenderlich  ·  29Komentar

rayfix picture rayfix  ·  3Komentar

grosch picture grosch  ·  6Komentar

icanzilb picture icanzilb  ·  6Komentar

designatednerd picture designatednerd  ·  22Komentar