Proseguiamo questa serie di articoli dedicati alla programmazione andando ad introdurre i cicli, e non solo. Il ciclo è per l’informatica un passaggio fondamentale perchè permette al programmatore di far ripetere innumerevoli volte una serie di comandi scrivendo poche righe di codice. Il primo approccio al ciclo parte quasi sempre dal comando “for”, grazie al quale si comincia a percepire quanto il computer sia un suddito instancabile ai nostri comandi.
Andiamo con ordine e scopriamo quello che vedremo nel codice di oggi. L’obiettivo finale è far costruire un quadrato colorando le celle del foglio di calcolo. Oltre al comando “for” vedremo come poter interagire da codice Google Apps Script con il foglio di calcolo di Google.
DISEGNAMO UN QUADRATO
Copiate le seguenti righe, ed andate ad incollarle nell’editor, sostituendo per intero l’esistente.
function onOpen() { SpreadsheetApp.getUi() .createMenu("Programmi miei") .addItem("quadrato", "quadrato") .addToUi(); } function quadrato() { var dimensione_lato = input("Quanto grande vuoi il quadrato?") for(colonna=1; colonna<=dimensione_lato; colonna=colonna+1){ for(riga=1; riga<=dimensione_lato; riga=riga+1){ colora_cella(riga,colonna,"red") } } put("Quadrato completato!") } function colora_cella(colonna,riga,colore) { SpreadsheetApp.getActiveSheet().getRange(riga,colonna).setBackground(colore); SpreadsheetApp.flush(); // visualizza le modifiche effettuate } function put(s) { Browser.msgBox(s) } function input(s) { var ui = SpreadsheetApp.getUi(); var result = ui.prompt(s,ui.ButtonSet.OK_CANCEL); var button = result.getSelectedButton(); var text = result.getResponseText() return(text) }
Salvate, fate girare la funzione onOpen() chiudendo e riaprendo il foglio di calcolo, e poi dal menu “Programmi miei” lanciate “quadrato”.
LA FUNZIONE COLORA_CELLA
function colora_cella(colonna,riga,colore) {
SpreadsheetApp.getActiveSheet().getRange(riga,colonna).setBackground(colore);
SpreadsheetApp.flush(); // visualizza le modifiche effettuate
}
Un comando molto importante contenuto in questa funzione è il seguente:
“SpreadsheetApp.getActiveSheet().getRange(riga,colonna).setBackground(colore)”
Quest’ultimo permette di colorare la cella alla specifica nr.riga/nr.colonna del colore specificato dalla variabile colore: i colori vanno espressi in lingua inglese. La riga contenente “SpreadsheetApp.flush()” induce la visualizzazione a video del comando appena dato, in questo modo potremo vedere la creazione del quadrato progressivamente cella dopo cella.
LA FUNZIONE PRINCIPALE
Nella funzione principale abbiamo in sostanza due cicli “for” nidificati, necessari per completare la colorazione di tutte le celle del quadrato. Per il potente concetto del “divide et impera” cominciamo con il semplificare la questione ad un unico ciclo per comprenderne bene il funzionamento :
for(riga=1; riga<=dimensione_lato; riga=riga+1){
colora_cella(riga,colonna,”red”)
}
Questo comando è molto semplice prevede infatti l’uso del comando “for” seguito dai seguenti tre argomenti:
“riga=1” chiamata inizializzazione del ciclo “for” e determina il valore iniziale della variabile riga che sarà appunto = a 1
riga<=dimensione_lato chiamata test di uscita, permette di decidere quando il ciclo “for” deve proseguire, in questo caso specifico stiamo dicendo che il ciclo “for” dovrà continuare finchè la variabile riga ha un valore minore ed uguale della variabile dimensione_lato.
riga=riga+1 chiamata incremento indica che la variabile riga dovrà aumentare di un unità ad ogni ciclo.
Ora vediamo il codice completo con entrambi i cicli.
for(colonna=1; colonna<=dimensione_lato; colonna++){
for(riga=1; riga<=dimensione_lato; riga++){
colora_cella(riga,colonna,”red”)
}
}
Il primo ciclo “for” permette alla variabile colonna di acquisire i valori 1,2,3 … fino a dimensione_lato. Per ognuno di questi valori viene richiamato il secondo “for”, che espresso in questa maniera si definisce appunto come nidificato, il quale farà in modo che la variabile riga possa acquisire i valore 1,2,3 … fino a dimenzione_lato. In questo modo il comando colora_cella(riga,colonna,”red”) verrà eseguito per tante volte quante sono le celle interne al quadrato e per ognuna eseguirà appunto la colorazione della rispettiva cella.
CONCLUSIONI
Vi consiglio di giocare un po’ con questo programma e per esempio modificarlo per fare in modo che si possa disegnare un rettangolo chiedendo all’utente la lunghezza di entrambi i lati. Potete anche provare, per curiosità, a sostituire il valore dell’incremento da “riga=riga+1” con “riga=riga+2” e controllare il risultato.
Nel prossimo articolo vedremo come scrivere valori nelle celle andando a realizzare la matrice delle tabelline del dieci.
Massimiliano Brambilla
Works at B-Software