Questão nº 65
Questão de Tecnologia da Informação · FGV TJ-AP 2024 (nº 65)
O paradigma funcional, evidenciado na linguagem LISP, criada em 1958, voltou com muita força atualmente, sendo incluído em diversas linguagens, como o Java. Considere o trecho de código apresentado a seguir.
List<String> lista =
Arrays.asList("UM","DOIS","TRES");
for(int i=0; i<lista.size(); i++){
System.out.println(lista.get(i));
}
Para utilizar o paradigma funcional, o loop para apresentação dos valores deve ser reescrito da seguinte forma:
- Afor(String s: lista){
System.out.println(s);
} - Bfor (Iterator<String> it = lista.iterator(); it.hasNext();) {
System.out.println(it.next());
} - Clista.forEach(s -> {
System.out.println(s);
}); (alternativa correta) - DIterator<String> it = lista.iterator();
while(it.hasNext()) {
System.out.println(it.next());
} - Efor(var s: lista){
System.out.println(s);
}
Resposta comentada
Gabarito Alternativa C
A programação funcional em Java nos permite expressar operações sobre coleções de dados de forma mais declarativa, focando no "o quê" fazer com cada elemento, usando lambdas (funções anônimas) e métodos como `forEach` ou a Stream API.
(A) Incorreta: Esta é uma sintaxe de "enhanced for loop" (for-each loop), que é mais concisa que o `for` tradicional com índice, mas ainda é um estilo de programação imperativo, não funcional. É o distrator mais tentador, pois é uma forma moderna e comum de iterar, mas não utiliza lambdas ou a abordagem declarativa característica do paradigma funcional em Java.
(B) Incorreta: Esta abordagem utiliza um `Iterator` dentro de um `for` loop, que é uma forma explícita e imperativa de percorrer uma coleção, focando em como a iteração acontece.
(C) Correta: Esta alternativa utiliza o método `forEach` da interface `Iterable` (ou `Stream`), que aceita uma lambda expression (`s -> System.out.println(s)`). Isso é um exemplo claro de programação funcional em Java, onde passamos uma função (a lambda) para ser aplicada a cada elemento da lista, expressando o "o quê" fazer.
(D) Incorreta: Similar à alternativa B, esta é uma forma imperativa de usar um `Iterator` com um `while` loop para percorrer a coleção.
(E) Incorreta: Esta é uma variação do "enhanced for loop" (for-each loop) usando a inferência de tipo `var` (introduzida no Java 10). Embora `var` seja um recurso moderno do Java, a estrutura do loop em si continua sendo imperativa, e não funcional.
Fonte: FGV TJ-AP 2024 Analista Judiciário - TI - Desenvolvimento de Sistemas (Caderno Tipo 1). Reproduzida para fins de estudo.