Utilizza countOfAttendees
e countOfPaidAttendees()
.
Una variabile calcolata è una variabile che restituisce un valore calcolato ogni volta che si accede. Cioè, non memorizza un valore. Internamente è implementato come una funzione.
Qual è la differenza con una funzione?
- Semanticamente, una variabile è stato, una funzione è un'azione.
- Una funzione regola l'accesso all'archiviazione privata. Una variabile calcolata può fare lo stesso in un modo più compatto. Esempio .
- Una variabile calcolata può essere utilizzata con KVO, passata come un #keypath e ha le funzionalità per osservare: willSet, didset.
Dovresti utilizzare una variabile quando
- non getta
- restituisce una proprietà semplice
- non ha un effetto collaterale o un verbo nel suo nome
- è O (1), cioè non comporta costi significativi. Nel tuo esempio sarà O (n).
- è idempotente. Più invocazioni identiche restituiscono lo stesso valore o impostano l'oggetto allo stesso stato.
Ragioni irrilevanti per preferire una variabile su una funzione
- Una variabile calcolata ti salva dalla digitazione (). Tuttavia, la chiarezza è più importante della brevità, quindi questo è un argomento debole.
- Una variabile di sola lettura può essere sovrascritta in lettura / scrittura. Una funzione indica che è sempre di sola lettura. Tuttavia, Apple utilizza le proprietà per variabili di sola lettura come array.count. In caso di dubbio, cerca coerenza con la piattaforma.
Risorse
Da WWDC 2014 - 204 Novità di Coco > 24:40 Quando utilizzare una @property
Use property for anything that is about the value or state of an
object or its relationship to other objects. Bad candidates:
- Methods that do things: load, parse, toggle, …. They have verbs in its name.
- Generators: init, copy, enumerated, …. These methods are not idempotent.
- Methods which change state: nextObject.
Da Swift Style di Erica Sadun > Proprietà calcolate e metodi
A property expresses an inherent quality of an instance, while a method performs an action.
- Methods have parameters; properties don’t. Prefer methods for any call with side effects. If a method does something (for example, it loads, parses, toggles, or prints) or has a verb name, it should not be a property.
- Prefer properties for simple values that you can get and/or set.
- Properties should express a semantic intrinsic quality of a type instance.
- Properties allow you to add observers via willSet and didSet. Unlike stored instance properties, stored type properties must always be given a default value.
Da Convenzioni di codifica di Kotlin > funzioni vs proprietà . Vedi la risposta di Daniel sopra .
Altre risorse senza informazioni pertinenti: