Ecco cosa documentation ha da dire sulle proprietà fisiche (noto anche come campi backing):
Un campo è considerato fisico se è o
- variabile
- una proprietà con l'identificativo di accesso in lettura o in scrittura pari a
default
o null
- una proprietà con
:isVar
metadati
Così si può impostare una proprietà che si compone interamente di valori calcolati. Pensa a una proprietà di sola lettura che ti dà l'area di un rettangolo come una funzione di larghezza e altezza, oppure pensa a una proprietà che è supportata da qualche altra proprietà e restituisce/imposta larghezza e altezza in una diversa unità. O forse vuoi solo nominare i tuoi campi di supporto in modo diverso, ad esempio m_width
e m_height
.
Il :isVar
è utile in situazioni in cui le regole di accesso alla proprietà ecc. Di cui sopra consentirebbero al compilatore di pensare che non sia necessario alcun campo di supporto. In tal caso, il codice fallirebbe (dalla documentazione di nuovo):
// This field cannot be accessed because it
// is not a real variable
public var x(get, set):Int;
function get_x() {
return x;
}
function set_x(x) {
return this.x = x;
}
Aggiungendo :isVar
che, fondamentalmente, dire al compilatore che si desidera assolutamente il campo di supporto. L'altra opzione per il caso particolare sarebbe usare default,default
, nel qual caso il compilatore sa che c'è un campo di supporto automatica richiesta e accesso deve essere limitato a seconda del livello di accesso della struttura (public
o private
):
public var propertyInt(default, default):Int;
in questo caso si potrebbe anche utilizzare una variabile direttamente, perché l'effetto netto è in sostanza la stessa:
public var propertyInt : Int;
Grazie mille per la risposta molto appagante. Lo metterò a frutto. Sono ancora confuso, salgo da C# e sto iniziando lentamente a capire tutte le caratteristiche di haxe. Grazie mille! :) –
Raccomando anche di cercare il significato di 'private' in Haxe - è diverso rispetto a C# :-) – JensG
Ho notato che il privato ha funzionalità di protezione. Perché ? È un po 'fastidioso. C'è qualche spiegazione ragionevole per questo comportamento? Odio anche la mancanza della classica funzionalità 'for' loop ... –