Pro procházení kolekcí lze v Axaptě využít dvě třídy - Iterator a Enumerator. Respektive, pro každou kolekci existuje specializovaný iterátor a enumerátor, např. SetIterator a SetEnumerator.
Použití iterátoru vypadá takto:
SetIterator iterator = new SetIterator(set);
while (iterator.more())
{
info(iterator.value());
iterator.next();
}
…a enumerátoru takto:
SetEnumerator enumerator = set.getEnumerator();
while (enumerator.moveNext())
{
info(enumerator.current());
}
Je best practice používat enumerátor namísto iterátoru. O tomto doporučení vím již dlouho, ale až tento týden jsem se dozvěděl jeden zásadní rozdíl: volání iterátoru totiž selže, pokud jsou iterátor a iterovaná kolekce na jiné vrstvě (ve smyslu klient/server). V takovém případě je vyhozena run-time výjimka s tím, že objekt iterátoru není inicializován.
Enumerator s touto situací počítá a vznikne na stejné vrstvě jako kolekce. Procházení všech prvků kolekce umístěné na jiné vrstvě zas může být výkonnostní problém, ale to už je jiná kapitola…
MSDN: ListEnumerator
MSDN: ListIterator
MSDN: MapEnumerator
MSDN: MapIterator
MSDN: SetEnumerator
MSDN: SetIterator
Žádné komentáře:
Okomentovat