Estrutura do FOR

12 respostas
F

Bom dia galera!!!

Gostaria que vocês me ajudassem numa dúvida.

Eu tenho uma estrutura de “for” que está assim:

[b][size=18]for (Servico atual : servicos){
resultado = perServico.salvar(tipoServicos, atual, ov, franquia)

{[/size][/b]

Queria saber como é que isso funciona, o que os “:” (dois pontos) faz nesse caso.

É uma iteração e ao mesmo tempo uma atribuição?

Grato.

12 Respostas

thiago.correa

É o famoso foreach, ele percorre a lista que está a direita aos dois pontos item, por item, e atribui o objeto lido da lista a expressão da esquerda!

T
for (Declaracao variavel : colecao) {
    codigo
}

é lido como:
“para cada item da coleção, atribuir esse item à variável, e executar o código entre chaves”.

F

Valeu thiago pela força

abração

S

senão me engano foreach só “funfa” em Iterables e Arrays.

[]'s

Marky.Vasconcelos

silveta:
senão me engano foreach só “funfa” em Iterables e Arrays.

[]'s

E tem outro motivo pra usar?

T

As coleções do Java implementam Iterable (direta ou indiretamente), então normalmente é fácil de usar.

Por exemplo, para listar os pares chave-valor de um HashMap/TreeMap:

// Este código supõe que a classe Cliente tenha implementado corretamente o método toString()
Map<String,Cliente> clientes = new TreeMap<String,Cliente>();
for (Map.Entry<String,Cliente> entry : clientes.entrySet()) {
    System.printf ("Cliente %s: %s %n", entry.getKey(), entry.getValue()); 
}
jcnaumann

Este é um recurso novo introduzido no J2SE 5.0 - Instrução “for” aprimorada:

for (parâmetro : nomeDoArray) {

instrução;

}

/<em>onde: parâmetro tem duas partes - um tipo e um identificador (por exemplo, int number) e nomeDoArray é o array pelo qual iterar. O tipo do parâmetro deve corresponder ao tipo dos elementos do array.

/</em>

Esta instrução itera pelos elementos de um array ou uma coleção sem utilizar um contador.
Deve ser lido da sequinte forma: -para cada iteração, atribui o próximo elemento de array a variável int number, depois executa a seguinte instrução.

Note porém que a instrução for aprimorada pode ser utilizada apenas para acesar elementos do array - ela não pode ser utilizada para modificar os elementos. Se seu programa precisar modificar elementos do array, utilize a instrução for tradicional controlada por contador.

Jean Carlos Naumann

lucianno

saudações a todos os discípulos de Gosling, se me permitem…

acredito que esse for foi introduzido na linguagem para otimizar recursos, seria isso mesmo??

mas olhando o .class gerado percebi que aparentemente o .class do for aprimorado ficou maior que o do for tradicional.

sendo assim pergunto:

nesse caso “tamanho é documento”, ou seja, o fato do arquivo do for aprimorado ser maior, quer dizer que em baixo nível ele se torna mais prolixo?

T

De certo modo é isso mesmo, mas isso é compensado tanto em tempo de manutenção (é bem mais fácil manter isso que um código com um monte de Iterators) quanto em tempo de execução (porque dá na mesma que você escrever os iterators).

peczenyj

Espero poder, no futuro, passar uma closure para um metodo each de um iterable

servicos.each( { T atual => resultado = perServico.salvar(tipoServicos, atual, ov, franquia } )

B

peczenyj:
Espero poder, no futuro, passar uma closure para um metodo each de um iterable

servicos.each( { T atual => resultado = perServico.salvar(tipoServicos, atual, ov, franquia } )

Espero que tenha. Ontem mesmo estava trabalhando com coleções, precisando de algo como um find ou collect… Ah se tivesse uma closure…

T

Bruno Laturner:
peczenyj:
Espero poder, no futuro, passar uma closure para um metodo each de um iterable

servicos.each( { T atual => resultado = perServico.salvar(tipoServicos, atual, ov, franquia } )

Espero que tenha. Ontem mesmo estava trabalhando com coleções, precisando de algo como um find ou collect… Ah se tivesse uma closure…

Isso é inveja de quem trabalha com .NET e usa LINQ :stuck_out_tongue:
De fato, é muito nojento ter de percorrer uma coleção com “for” (mesmo que seja o “foreach”), quando isso poderia ser resolvido com “find”, “collect”, “each” e outros algoritmos.

Criado 28 de agosto de 2008
Ultima resposta 18 de set. de 2008
Respostas 12
Participantes 9