การใช้งานและcountOfAttendees
countOfPaidAttendees()
ตัวแปรที่คำนวณได้คือตัวแปรที่ส่งคืนค่าที่คำนวณได้ทุกครั้งที่เข้าถึง นั่นคือมันไม่ได้เก็บค่า ภายในจะมีการใช้งานเป็นฟังก์ชั่น
ความแตกต่างของฟังก์ชั่นคืออะไร?
- ความหมายตัวแปรคือสถานะฟังก์ชันคือการดำเนินการ
- ฟังก์ชั่นควบคุมการเข้าถึงที่เก็บข้อมูลส่วนตัว ตัวแปรจากการคำนวณอาจทำแบบเดียวกันในวิธีกะทัดรัดมากขึ้น ตัวอย่าง
- ตัวแปรที่คำนวณได้สามารถใช้กับ KVO ส่งผ่านเป็น #keypath และมีสิ่งอำนวยความสะดวกสำหรับการสังเกต: willSet, didSet
คุณควรใช้ตัวแปรเมื่อ
- มันไม่ได้โยน
- มันจะส่งกลับคุณสมบัติที่เรียบง่าย
- มันไม่มีผลข้างเคียงหรือคำกริยาในชื่อของมัน
- มันเป็น O (1) นั่นคือมันไม่ได้มีค่าใช้จ่ายมากนัก ในตัวอย่างของคุณมันจะเป็น O (n)
- มันเป็น idempotent การเรียกใช้ที่เหมือนกันหลายครั้งส่งคืนค่าเดียวกันหรือตั้งค่าวัตถุเป็นสถานะเดียวกัน
เหตุผลที่ไม่เกี่ยวข้องที่ต้องการตัวแปรมากกว่าฟังก์ชัน
- ตัวแปรที่คำนวณช่วยให้คุณไม่พิมพ์ () อย่างไรก็ตามความชัดเจนมีความสำคัญมากกว่าความกะทัดรัดดังนั้นนี่คือข้อโต้แย้งที่อ่อนแอ
- ตัวแปรอ่านอย่างเดียวสามารถ overriden เป็นอ่าน / เขียน ฟังก์ชั่นระบุว่ามันอ่านได้เสมอเท่านั้น อย่างไรก็ตาม Apple ใช้คุณสมบัติสำหรับตัวแปรแบบอ่านอย่างเดียวเช่น array.count เมื่อมีข้อสงสัยขอให้สอดคล้องกับแพลตฟอร์ม
ทรัพยากร
ตั้งแต่ WWDC 2014 - 204 มีอะไรใหม่ในโกโก้ > 24:40 น. เมื่อใช้ @property
ใช้คุณสมบัติสำหรับสิ่งใดก็ตามที่เกี่ยวกับค่าหรือสถานะของวัตถุหรือความสัมพันธ์กับวัตถุอื่น ผู้สมัครที่ไม่ดี:
- วิธีการที่ทำสิ่งต่าง ๆ : โหลดแยกวิเคราะห์สลับ…. พวกเขามีคำกริยาในชื่อของมัน
- เครื่องกำเนิดไฟฟ้า: init, copy, enumerated, …. วิธีการเหล่านี้ไม่ใช่ idempotent
- วิธีการที่เปลี่ยนสถานะ: nextObject
จาก สไตล์ Swift โดย Erica Sadun > คุณสมบัติที่คำนวณได้กับวิธีการ
คุณสมบัติเป็นการแสดงออกถึงคุณภาพโดยธรรมชาติของอินสแตนซ์ในขณะที่วิธีการดำเนินการ
- วิธีการมีพารามิเตอร์ คุณสมบัติไม่ ชอบวิธีการโทรใด ๆ ที่มีผลข้างเคียง หากวิธีการทำบางสิ่ง (ตัวอย่างเช่นจะโหลดแยกวิเคราะห์สลับหรือพิมพ์) หรือมีชื่อคำกริยามันไม่ควรจะเป็นคุณสมบัติ
- ต้องการคุณสมบัติสำหรับค่าอย่างง่ายที่คุณสามารถรับและ / หรือกำหนด
- คุณสมบัติควรแสดงคุณภาพที่แท้จริงของประเภทอินสแตนซ์
- คุณสมบัติช่วยให้คุณเพิ่มผู้สังเกตการณ์ผ่าน willSet และ didSet ซึ่งแตกต่างจากคุณสมบัติอินสแตนซ์ที่เก็บไว้คุณสมบัติประเภทที่จัดเก็บจะต้องได้รับค่าเริ่มต้นเสมอ
จาก Kotlin เข้ารหัสประชุม> ฟังก์ชั่น VS คุณสมบัติ ดูคำตอบของแดเนียลดังกล่าวข้างต้น
แหล่งข้อมูลอื่น ๆ ที่ไม่มีข้อมูลที่เกี่ยวข้อง: