DClick

Por que usar contador no “for” em AS3?


Antes do ActionScript 3 eu costumava fazer assim:

Actionscript:
  1. // PRIMEIRA FORMA
  2. for (var i:Number=0; i<itens.lenght; i++)
  3. {
  4.     trace(itens[i]);
  5. }

Agora eu só faço assim:

Actionscript:
  1. // SEGUNDA FORMA
  2. for each (var item:Object in itens)
  3. {
  4.     trace(item);
  5. }

Eu considero esta segunda forma bem melhor que a primeira. Mesmo assim vejo que a maioria das pessoas ainda fazem do "modo antigo". E antes que este post se desdobre em um debate do tipo “eu gosto mais de morangos”, permitam-me lançar alguns argumentos a favor da segunda forma.

Em primeiro lugar a segunda forma me parece muito mais legível. Eu quase posso ler o trecho de código como faria em português: "para cada item em itens imprima item”. Na primeira forma isto é bem menos direto: “enquanto i for menor que o número de elementos em itens imprima o item cujo índice é igual a i”. Urg!

Em segundo lugar a primeira forma é mais propensa a erros. Quem nunca se esqueceu de inicializar o contador (var i:Number=0)? Neste caso o loop não funciona e nem um Warning aparece. Pode não parecer, mas podemos perder um bom tempo neste tipo de erro bobo.

Em terceiro lugar você notou que “length” no primeiro trecho de código está escrito errado? Se não, talvez você seja como eu que nunca lembra como se escreve esta maldita palavra. Ok, talvez o problema seja comigo. Mas como na segunda forma escrevemos menos a possibilidade de errar é menor. Anyway!

Por Beck Novaes em 27/August/2007 | Comentar | Trackback


No Translations

4 comentários para “Por que usar contador no “for” em AS3?”


Muito engraçado o terceiro argumento…. tb nunca sei como se escreve a palavra…..
Concordo com vc, sempre quando posso uso o for each mas em algums casos ele é insuficiente como, por exemplo, quando é necessário o controle da posição da coleção. No caso do seu exemplo, na minha opinião, usuar o for each é muito melhor!!!
[]s


Com certeza a segunda opção e bem mais elegante e intuitiva, porem o argumento de nunca saber escrever lenght ( escrevi certo? ) e o melhor!


length, width, height …. ninguém merece.. hehehe

Só para constar, o nome “científico” do “fore” ou “for each” é “for enhanced”.
Na prova de certificação da Sun (SCJP) é comum muita gente errar por não conhecer o nome verdadeiro do “fore”.

T+


Fala Beck, outra solução bastante interessante para loops mais complexos são os métodos forEach e map da classe Array, novidade no AS3:
http://www.onebyonedesign.com/tutorials/array_methods/

Desse modo é possível separar a lógica do loop em um método separado. Bem útil para manter os métodos enxutos…

Adicionar comentário

(requerido)
(requerido, não será publicado)