É inevitável que em algum momento no desenvolvimento de um software, você precise usar um laço. Laço, ou loop, em computação, significa uma instrução de programação que repete determinadas instruções (que estão dentro do laço) um certo número de vezes, até que alcance o resultado esperado. Hoje, vou falar sobre três tipos de laços que podem ser programados no Java: for convencional, for melhorado e for com lambda.
FOR CONVENCIONAL
Este for você já deve ter visto em vários lugares, pois trata-se do mesmo estilo de código usado no C, C++, entre outras muitas linguagens de programação. Funciona assim: você declara uma variável numérica, que será o seu índice, determina uma condição para a saída do laço (não queremos um loop infinito, né?) e por fim, determina como o índice deverá ser incrementado. Parece complicado? Não é!
Laço convencional
String[] jogadores = new String[] { "Djokovic", "Murray", "Federer", "Wawrinka", "Nadal"}; for (int i = 0; i < 5; i++) { System.out.println("Jogador #" + (i + 1) + " " + jogadores[i]); }
String[] jogadores = new String[] {
"Djokovic", "Murray", "Federer", "Wawrinka", "Nadal"};
System.out.println("Jogador #" + (i + 1) + " " + jogadores[i]);
Perceba que, primeiramente, eu declarei e iniciei uma variável inteira i com valor zero. Depois, determinei que este laço irá repetir enquanto esta variável i for menor que 5 e, por fim, determinei que i será incrementado de um em um (i++). Saída:
Jogador #1 Djokovic
Jogador #2 Murray
Jogador #3 Federer
Jogador #4 Wawrinka
Jogador #5 Nadal
FOR MELHORADO
Introduzido no Java 5, é a instrução certa a ser utilizada quando você não precisa do índice numérico. Sua declaração é resumida e mais intuitiva, onde um array (ou lista) será percorrido por completo, passando o valor a uma variável de mesmo tipo, a cada repetição.
Laço melhorado
String[] jogadores = new String[] { "Djokovic", "Murray", "Federer", "Wawrinka", "Nadal"}; for (String jogador : jogadores) { System.out.println(jogador); }
for (String jogador : jogadores) {
System.out.println(jogador);
Como já foi dito, neste caso, não temos a variável numérica para nos localizar — muitas vezes, realmente, não é necessário. A variável jogador é do tipo String, pois deve ser do mesmo tipo do array a ser percorrido, já que irá receber um de seus elementos a cada repetição. Saída:
FOR C/ LAMBDA
Introduzido no Java 8, é um tipo novo de laço que abre margem para uma gama de utilidades fornecidas pela classe Stream, como: agrupar, filtrar, ordenar, entre outras. Neste post, vou fazer da forma mais simples possível.
Laço c/ lambda
String[] jogadores = new String[] { "Djokovic", "Murray", "Federer", "Wawrinka", "Nadal"}; Arrays.stream(jogadores).foreach(jogador -> System.out.println(jogador));
Arrays.stream(jogadores).foreach(jogador -> System.out.println(jogador));
Primeiro, transformei o array em um objeto da classe Stream. Depois, chamei o método foreach — e é aí que entra a mágica o lambda: uma variável jogador, sem tipo, pois o Java irá descobrir de acordo com o tipo do array e, depois da flecha, a instrução que quero executar. A saída será a mesma do laço melhorado, demostrada acima.
Bem legal, né? Este é apenas um pedacinho da ponta de um enorme iceberg que é a classe Stream e as instruções lambda que podem ser utilizadas no Java 8.