Tutti noi probabilmente abbiamo dimestichezza con linguaggi simil-C e quindi il "famoso" ciclo for, così impostato: for(i=0;i<N;i++){ ... }
. Vediamo ora una programmazione esoterica, ovvero ottenere lo stesso risultato ma tramite una via tutt'altro che convenzionale! Mi è venuta in mente questa idea curiosa e ho scelto poi di scrivere il codice in JavaScript, gli stessi concetti ovviamente (a meno di aggiustamenti di sintassi, eventuali librerie) sono applicabili anche altrove. Unica precisazione, in alcuni casi potrebbe essere opportuno un casting al tipo di dato intero (ad esempio se il contatore deve rappresentare l'indice di un array, altrimenti può dare errore).
ciclo for "standard":
Lo abbiamo sempre visto, c'è poco da commentare; sappiamo che i++ equivale a i+=1 ovvero i=i+1, post-incremento del contatore.
for(let i=0;i<10;i++) { ... }
"meno per meno uguale più":
i=i+1 lo possiamo riscrivere come i=i-(-1) ovvero i-=-1, appunto "meno per meno uguale più".
for(let i=0;i<10;i-=-1) { ... }
incremento tramite moltiplicazione:
L'equivalenza la si ottiene partendo da: i*x=i+1, quindi x = (i+1)/i = 1+1/i. Attenzione al dominio ovvero il contatore non può in questo caso partire da zero (altrimenti avrei zero a denominatore) ma lo facciamo partire da 1. Casomai, volessimo poi stampare il valore di "i" ad ogni iterazione, mettiamo i-1 anziché i, essendo partiti da 1 e non da 0 e anche come N prendiamo N+1 essendo tutto traslato in avanti di un'unità.
for(let i=1;i<10;i*=(1+1/i)) { ... }
incremento tramite divisione:
Analogo al caso precedente, all'inverso. i/x=i+1 quindi x=i/(i+1).
for(let i=1;i<10;i/=i/(i+1)) { ... }
incremento tramite elevamento a potenza:
Ok, esageriamo! 😅 ix=i+1 quindi x=log(i+1)/log(i). Ovviamente qui è importante prestare attenzione al dominio, il contatore deve partire da 2 (lo zero non è definito per il logaritmo, con 1 avremmo zero a denominatore).
for(let i=2;i<10;i**=Math.log(i+1)/Math.log(i)){ ... }
Ovviamente il tutto è a puro scopo didattico e di intrattenimento. Come best-practice si invita sempre a scrivere codice chiaro e ordinato. Ma ogni tanto, quando opportuno, ci possiamo anche divertire! Vedi anche Goto: il codice che salta