Flash CS3: TextField.appendText()

Sabato 15 Dicembre, 2007

Flash CS3 ha davvero tante novità, tra cui quella "curiosa" di indicare al momento della compilazione alcuni consigli sulla scrittura del codice. Questo accade, ad esempio, quando abbiamo a che fare con gli oggetti TextField. Mi è capitato di dover aggiungere una stringa alla fine di un campo TextField, con la classica notazione:

Actionscript:
  1. mioTextField_txt.text += "Stringa aggiunta";

Ma ecco che ActionScript 3.0, al momento di compilare il filmato, mi avverte (Warning) - o consiglia:

Warning: 3551: L'aggiunta di testo a un'istanza TextField mediante += è spesso un'operazione più lenta rispetto all'uso del metodo TextField.appendText().

Fantastico! Andiamo a vedere infatti la SYNOPSIS del metodo appendText() che effettivamente dice:

Aggiunge la stringa specificata dal parametro newText alla fine del testo del relativo campo. Questo metodo è più efficiente rispetto a un'assegnazione addizione (+=) applicata a una proprietà text (ad esempio someTextField.text += moreText), in particolare nel caso di un campo di testo con una quantità di contenuto significativa.

Ci fidiamo? Per sicurezza verifichiamo:

Actionscript:
  1. import flash.utils.getTimer;
  2.  
  3. var i:uint=0;
  4. var s:int = getTimer();
  5. for(i; i <10000;i++) {
  6.     text_txt.text += "Ciao";
  7. }
  8. var f:int = getTimer();
  9. trace(f-s);

Tempo: 9360 - sulla mia macchina, in debug mode. Proviamo allora come consigliato dal compilatore:

Actionscript:
  1. import flash.utils.getTimer;
  2.  
  3. var i:uint=0;
  4. var s:int = getTimer();
  5. for(i; i <10000;i++) {
  6.     text_txt.appendText ("Ciao");
  7. }
  8. var f:int = getTimer();
  9. trace(f-s);

Tempo: 8415 ;)

Niente di eccezionale... tuttavia è vero! Il metodo appendText() è più rapido e performante dell'operatore pre-incrementale (+=). Come mai? Il motivo più ovvio è il seguente: l'operatore (+=) agisce su qualsiasi tipo di dato. Inoltre in un linguaggio OO questo operatore non è strutturato come nel semplice C ma è "oggettato". In C++, ad esempio, è possibile sovrascrivere (override) tale operatore in quanto facente parte della struttura ad oggetti del linguaggio stesso. In definitiva appendText() è più rapido in quanto il suo obiettivo è quello di "appendere" una stringa e di conseguenza non si fa tante "domande" al suo interno. L'operatore (+=), invece, deve funzionare per qualsiasi tipo di dato e quindi non è ottimizzato per le stringhe. In C, al contrario, l'operatore (+=) è una funzione a basso livello e sarà sempre più rapida di una chiamata ad una funzione.

Post correlati