Tempo fa vi ho parlato di FizzBuzz, un quiz spesso posto ai programmatori alle prime armi.
Una variante è la seguente:
Sommare tutti i numeri da 1 a 200 che non sono multipli di 4 e di 7
La parte divertente sta nella differenza di espressività tra Java e Ruby per ottenere lo stesso risultato. In Java, infatti:
public class FizzBuzzReloaded {
public static void main(String[] args) {
int sum = 0;
for (int i = 1; i <= 200; i++) {
if (i % 4 != 0 && i % 7 != 0) {
sum += i;
}
}
System.out.println(sum);
}
}
In Ruby, invece, grazie alla funzionalità del linguaggio, possiamo semplicemente scrivere:
(1..200).select {|n| n % 4 != 0 and n % 7 != 0}.inject(:+)
Volevo solo mettere a confronto Java e i linguaggi che possono utilizzare anche un paradigma funzionale. Dalla prospettiva Java si può fare la stessa cosa, funzionalmente parlando, a patto di usare Scala o Java 8 (se includeranno le lambda).
Ti piace vincere facile… un qualunque linguaggio che supporti le higher order function (map, filter) rende molto semplici questo genere di programmi.