Técnico

AS3 Patterns – Iterator

Na programação orientada a objetos um iterador é um objeto que possibilita o programador a examinar um objeto que contem outros objetos (container).

As semânticas de acesso dos iteradores são fixas e você pode implementar diversos tipos de iteradores de forma desacoplada a partir de uma interface.
Imagine um iterador como um cursor de uma base de dados onde os elementos são acessados sequencialmente (cursor).

Os arquivos utilizados podem ser encontrados em:
https://github.com/wlepinski/as3-patterns/tree/master/Iterator

Basicamente a interface de um iterador pode ser definida como:
[cc lang=”actionscript”]
public interface IIterator
{
function first ():void;
function next ():void;
function isDone ():Boolean;
function currentItem ():*;
function hasNext():Boolean;
}
[/cc]

Com essa interface podemos prover algumas implementações de iteradores para qualquer tipo de objeto que descreva qual o seu iterador, a interface abaixo será utilizada pelos nosso objetos que podem ser iterados.

[cc lang=”actionscript”]
public interface IAbstractList
{
function createIterator ():IIterator;
function count ():int;
function append ( item:Object ):void;
function remove ( item:Object ):void;
}
[/cc]

Vamos criar um iterador (ArrayIterator) que implementa a interface IIterator e recebe como parâmetro no construtor um ArrayList que também vamos implementar a seguir:

Implementação do ArrayIterator:

[cc lang=”actionscript”]
public class ArrayIterator implements IIterator
{
public var index:int = 0;
public var list:ArrayList;

public function ArrayIterator ( list:ArrayList ) {
this.list = list;
}

public function first ():void {
index = 0;
}

public function next ():void {
index++;
}

public function isDone ():Boolean {
return index >= list.count();
}

public function currentItem ():* {
return list.array[ index ];
}

public function hasNext ():Boolean {
return index < list.count(); } } [/cc]Implementação do ArrayList:[cc lang="actionscript"] public class ArrayList implements IAbstractList { public var array:ArrayCollection = new ArrayCollection();public function ArrayList (){ }public function createIterator ():IIterator { return new ArrayIterator( this ); }public function count ():int { return array.length; }public function append ( item:Object ):void { array.addItem( item ); }public function remove ( item:Object ):void { array.removeItemAt( array.getItemIndex( item ) ); } } [/cc]Podemos utilizar o iterador de duas formas, em um "for" ou em um "while":[cc lang="actionscript"] var list:IAbstractList; var iterator:IIterator;// Utilizando o for list = new ArrayList(); list.append( "Array Item 1" ); list.append( "Array Item 2" ); list.append( "Array Item 3" );iterator = list.createIterator();for ( iterator.first(); !iterator.isDone(); iterator.next() ) { trace( iterator.currentItem() ); }// Usando while list = new ArrayList(); list.append( "Array2 Item 1" ); list.append( "Array2 Item 2" ); list.append( "Array2 Item 3" );iterator = list.createIterator();while ( iterator.hasNext() ){ trace( iterator.currentItem() ); iterator.next(); } [/cc]

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Compartilhe isso: