Gunakan countOfAttendees
dan 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: