สวิฟท์ได้ครบกำหนดอย่างมีนัยสำคัญในปีที่ผ่านมาตั้งแต่คำตอบนี้ถูกเขียน แนวทางการออกแบบระบุว่า :
โปรโตคอลที่อธิบายสิ่งที่ควรอ่านเป็นคำนาม (เช่นCollection
)
โปรโตคอลที่อธิบายความสามารถควรจะตั้งชื่อโดยใช้คำต่อท้ายable
, ible
หรือing
(เช่นEquatable
, ProgressReporting
)
ขอบคุณDavid James ที่ให้ความสำคัญกับเรื่องนี้!
คำตอบเดิม
การใช้รูปแบบของสัญกรณ์ฮังการีบางรูปแบบอาจเป็นความคิดที่ดี - เพื่อแสดงแนวคิดที่สำคัญที่ไม่สามารถเข้ารหัสในระบบพิมพ์ได้ อย่างไรก็ตามความจริงที่ว่าตัวระบุบางตัวอ้างถึงโปรโตคอลเป็นส่วนหนึ่งของระบบประเภทใน Swift (และ C #) และเช่นคำนำหน้าหรือคำต่อท้ายใด ๆ เพียงเพิ่มเสียงรบกวน คำนำหน้าหรือคำต่อท้ายที่ชัดเจนเป็นแนวคิดที่ดีกว่าสำหรับแนวคิดเช่นข้อยกเว้นหรือเหตุการณ์
ในกรณีที่ไม่มีไกด์สไตล์อย่างเป็นทางการสำหรับ Swift เราต้องหาตัวเราเองหรือยืมจากไกด์หรือรหัสที่มีอยู่ ตัวอย่างเช่นคู่มือสไตล์ Objective-C สำหรับ Cocoa มีส่วนนี้:
โปรโตคอลควรตั้งชื่อตามลักษณะการทำงานของกลุ่ม:
โปรโตคอลส่วนใหญ่จัดกลุ่มวิธีการที่ไม่เกี่ยวข้องกับคลาสใดโดยเฉพาะ ควรตั้งชื่อโปรโตคอลประเภทนี้เพื่อไม่ให้โปรโตคอลสับสนกับคลาส หลักการทั่วไปคือการใช้แบบฟอร์ม gerund (“ ... ไอเอ็นจี”):
NSLocking
- ดี
NSLock
- แย่ (ดูเหมือนชื่อสำหรับชั้นเรียน)
โปรโตคอลบางกลุ่มจัดกลุ่มของวิธีการที่ไม่เกี่ยวข้องกัน (แทนที่จะสร้างโปรโตคอลขนาดเล็กแยกต่างหากหลายตัว) โปรโตคอลเหล่านี้มีแนวโน้มที่จะเชื่อมโยงกับคลาสที่เป็นนิพจน์หลักของโปรโตคอล ในกรณีเหล่านี้การประชุมคือการให้โปรโตคอลชื่อเดียวกันกับคลาส
ตัวอย่างของโปรโตคอลประเภทนี้คือNSObject
โปรโตคอล โพรโทคอลนี้จัดกลุ่มเมธอดที่คุณสามารถใช้เพื่อเคียวรีออบเจกต์ใด ๆ เกี่ยวกับตำแหน่งในลำดับชั้นของคลาสเพื่อให้เรียกใช้เมธอดเฉพาะและเพื่อเพิ่มหรือลดจำนวนการอ้างอิง เนื่องจากNSObject
คลาสจัดเตรียมนิพจน์หลักของวิธีการเหล่านี้โปรโตคอลจึงตั้งชื่อตามชั้นเรียน
อย่างไรก็ตามคำแนะนำของจุดที่สองไม่สามารถใช้งานได้อีกต่อไป:
เนื่องจากเนมสเปซของคลาสและโพรโทคอลถูกรวมเป็นหนึ่งเดียวใน Swift NSObject
โพรโทคอลใน Objective-C จะถูกแมปใหม่NSObjectProtocol
ในใน Swift (ที่มา )
ที่นี่…Protocol
คำต่อท้ายถูกนำมาใช้เพื่อแยกแยะโปรโตคอลจากชั้นเรียน
ห้องสมุดมาตรฐานสวิฟท์มีโปรโตคอลEquatable
, และComparable
Printable
สิ่งเหล่านี้ไม่ได้ใช้แบบฟอร์ม“ … ing” ของ Cocoa แต่ต่อท้าย“ …สามารถ” เพื่อประกาศว่าอินสแตนซ์ใด ๆ ของประเภทนี้จะต้องสนับสนุนการดำเนินการบางอย่าง
ข้อสรุป
ในบางกรณีที่โพรโทคอลมีการใช้งานที่เกี่ยวข้องเพียงหนึ่งคำต่อท้าย "…โพรโทคอล" สามารถทำให้รู้สึกเพื่อให้คลาสและโพรโทคอลสามารถมีชื่อเดียวกัน อย่างไรก็ตามควร จำกัด เฉพาะกรณีดังกล่าวเท่านั้น
มิฉะนั้นชื่อควรเป็นคำนามที่แสดงถึงการดำเนินการที่โปรโตคอลนี้มี การใช้คำกริยารูปแบบ“ … ing” หรือ“ …สามารถ” เป็นจุดเริ่มต้นที่ดีและชื่อดังกล่าวไม่น่าจะขัดแย้งกับชื่อชั้นเรียน
ชื่อEquatableProtocol
นี้ไม่แนะนำให้ใช้ ชื่อEquatable
หรือEquating
จะไกลดีกว่าและผมไม่ได้คาดหวังระดับใด ๆ Equatable
ที่จะมีชื่อ ในกรณีนี้Protocol
คำต่อท้ายคือเสียงรบกวน