Gunakan countOfAttendeesdan countOfPaidAttendees().
Variabel yang dihitung adalah variabel yang mengembalikan nilai yang dihitung setiap kali diakses. Artinya, itu tidak menyimpan nilai. Secara internal itu diimplementasikan sebagai fungsi.
Apa bedanya dengan fungsi?
- Secara semantik, variabel adalah status, fungsi adalah tindakan.
- Suatu fungsi mengatur akses ke penyimpanan pribadi. Variabel yang dihitung dapat melakukan hal yang sama dengan cara yang lebih kompak. Contoh .
- Variabel terkomputasi dapat digunakan dengan KVO, diteruskan sebagai #keypath, dan memiliki fasilitas untuk mengamati: willSet, didSet.
Anda harus menggunakan variabel kapan
- itu tidak melempar
- mengembalikan properti sederhana
- itu tidak memiliki efek samping atau kata kerja dalam namanya
- itu O (1), artinya, itu tidak menimbulkan biaya yang signifikan. Dalam contoh Anda itu akan menjadi O (n).
- itu idempoten. Beberapa doa identik mengembalikan nilai yang sama atau mengatur objek ke keadaan yang sama.
Alasan yang tidak relevan untuk memilih variabel daripada fungsi
- Variabel yang dihitung menyelamatkan Anda dari mengetik (). Namun, kejelasan lebih penting daripada keringkasan, jadi ini adalah argumen yang lemah.
- Variabel read only dapat ditimpa sebagai baca / tulis. Suatu fungsi menunjukkan bahwa itu selalu hanya baca. Namun, Apple menggunakan properti untuk variabel read-only seperti array.count. Ketika ragu mencari konsistensi dengan platform.
Sumber daya
Dari WWDC 2014 - 204 Apa yang baru di Cocoa > 24:40 Kapan menggunakan @property
Gunakan properti untuk apa pun yang tentang nilai atau keadaan suatu objek atau hubungannya dengan objek lain. Kandidat buruk:
- Metode yang melakukan hal-hal: memuat, mengurai, beralih, .... Mereka memiliki kata kerja dalam namanya.
- Generator: init, salin, disebutkan, .... Metode-metode ini tidak idempoten.
- Metode yang mengubah status: nextObject.
Dari Swift Style oleh Erica Sadun > Computed Properties vs. Methods
Properti mengungkapkan kualitas yang melekat pada instance, sementara metode melakukan tindakan.
- Metode memiliki parameter; properti tidak. Memilih metode untuk panggilan apa pun dengan efek samping. Jika suatu metode melakukan sesuatu (misalnya, ia memuat, mem-parsing, mengubah, atau mencetak) atau memiliki nama kata kerja, itu tidak boleh menjadi properti.
- Memilih properti untuk nilai-nilai sederhana yang bisa Anda dapatkan dan / atau atur.
- Properti harus mengekspresikan kualitas intrinsik semantik dari instance type.
- Properti memungkinkan Anda untuk menambahkan pengamat melalui willSet dan didSet. Tidak seperti properti instance tersimpan, properti tipe tersimpan harus selalu diberi nilai default.
Dari konvensi pengkodean Kotlin> fungsi vs properti . Lihat jawaban Daniel di atas .
Sumber daya lain tanpa informasi yang relevan: