Como Percorrer Corretamente Objetos de Resultado em Flex

Ao trabalhar com o Apache Flex, os desenvolvedores costumam se deparar com a necessidade de percorrer dados recuperados de um serviço web. Um cenário comum é lidar com dados XML retornados por meio de uma chamada HTTPService. No entanto, muitos enfrentam problemas, especialmente quando a resposta inclui um número variável de linhas. Neste post, exploraremos como percorrer corretamente esses objetos de resultado XML sem encontrar erros.

O Problema: Percorrendo Dados XML

Em uma situação típica, você pode fazer uma chamada HTTPService e receber dados XML estruturados assim:

<DataTable>
    <Row>
        <text>foo</text>
    </Row>
    <Row>
        <text>bar</text>
    </Row>
</DataTable>

Ao processar esses dados, muitos desenvolvedores usam um loop for para iterar pelos nós “Row” usando o seguinte código:

for (var i:int = 0; i < event.result.DataTable.Row.length; i++) {
    if (event.result.DataTable.Row[i].text == "foo")
        mx.controls.Alert.show('foo encontrado!');
}

Embora esse código funcione corretamente quando múltiplos nós “Row” estão presentes, ele falha quando há apenas um nó “Row”, pois length não é uma propriedade do objeto XMLList retornado. Em tais casos, isso pode levar a erros inesperados.

A Solução: Usando o Loop for each

Compreendendo o Comprimento do XMLList

A chave para resolver o problema é reconhecer que length é um método de XMLList, não uma propriedade. Portanto, a maneira correta de obter o número de linhas deve ser:

event.result.DataTable.Row.length();

No entanto, consultar o comprimento diretamente ainda pode levar a confusões, especialmente para desenvolvedores que podem ignorar isso ou ter respostas XML inconsistentes.

Melhor Prática: Usar o Loop for each

Para melhorar a clareza do código e evitar erros potenciais, é melhor usar um loop for each ao trabalhar com XMLList. Esse método é mais seguro e mais idiomático para iterar sobre os nós XML:

for each (var node:XML in event.result.DataTable.Row) {
    if (node.text == "foo") {
        mx.controls.Alert.show('foo encontrado!');
    }
}

Benefícios do Loop for each:

  • Legibilidade: O código é mais simples e fácil de ler.
  • Robustez: Evita problemas associados ao acesso aos comprimentos, tornando-o menos sujeita a erros.
  • Flexibilidade: Funciona sem problemas com um número variável de nós filhos.

Conclusão

Lidar com dados XML no Flash e no Apache Flex pode ser complicado se não for feito corretamente. Ao usar um loop for each para percorrer os resultados de XMLList de chamadas HTTPService, você não apenas previne erros associados a nós filhos únicos, mas também cria um código mais limpo e mais fácil de manter.

Implementar essa prática aprimorará a qualidade do seu código e reduzirá a probabilidade de problemas em tempo de execução ao trabalhar com dados XML em suas aplicações Flex.