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.