Variabili

Non possiamo iniziare a programmare senza sapere come dichiarare e inizializzare le variabili! Rust è un typed language (grazie a dio), e pertanto deve sempre sapere in ogni momento di che tipo è una variabile, e a meno che non gli diciamo altrimenti il tipo non cambia mai. Per dichiarare una variabile basta scrivere

let <nome_variabile>: <tipo> = <valore>;

Dove per un semplice intero possiamo scrivere i32 (intero a 32 bit), e assegnare un intero:

#![allow(unused)]
fn main() {
let primo_intero: i32 = 3;
}

se volete sperimentare con altri tipi, quelli base sono:

  • i8: intero a 8 bit
  • i16: intero a 16 bit
  • i32: intero a 32 bit
  • u8: intero senza segno a 8 bit
  • u16: intero senza segno a 16 bit
  • u32: intero senza segno a 32 bit
  • f32: float a 32 bit
  • &str: stringhe
  • String: stringhe più belle, ne parliamo più avanti

Esercizi

  • Provate a dichiarare una variabile e a visualizzarla nel println! (consiglio, cercate la documentazione online su come println! funziona )
  • Provate a fare un po' di aritmetica: sommare/dividere interi, e a visualizzare il risultato
  • provate a sommare 2 stringhe (questo è un po' più difficile)

If/Else

Ogni linguaggio ha un modo per definire se questa condizione è valida esegui questo codice. In rust esiste l'if:

// NB le parentesi graffe sono obbligatorie, mentre le parentesi tonde intorno alla condizione sono sconsigliate
if condizione{
    //se la condizione è vera
    //codice
}else{
    //se la condizione è falsa
    //codice
}

Esercizi

  • se un numero è uguale a 0 eseguo del codice altrimenti no
  • TODO altri es

Cicli

E se volessimo ripetere del codice?

while condizione{
    //ripeti codice fino a quando la condizione è vera
    //codice
}


for i in range{
    //ripeti codice per ogni valore dentro a range
    // esempi di range:
    // 0..10 da 0 a 10 con 0 incluso e 10 escluso
    // 0..=10 da 0 a 10 con 0 e 10 inclusi
    //codice
}
loop{
    //ripeti questo codice all'infinito
}
//all'interno di ognuno di questi cicli è possibile usare
break; //esci dal ciclo subito
continue; //salta alla prossima iterazione del ciclo

Esercizi

  • Incrementare un valore per 10 volte
  • eseguire un ciclo fino a quando non viene verificata una condizione

Funzioni

Per chi non conoscesse il concetto delle funzioni, possiamo vederlo come un "insieme di comandi", che prende in input dei parametri e a volte da in output un valore. In rust la sintassi è:


///questa funzione non da in output niente
fn nome_funzione(parametri){

}

///invece questa funzione da in output un intero
fn ritorno_per_due(val: i32)->i32{
    2*val
}

///invece questa funzione da in output un intero (stessa di sopra)
fn ritorno_per_due(val: i32)->i32{
    return 2*val;
}

//per chiamare una funzione basta passare i parametri, e leggere il risultato:
let risultato = ritorno_per_due(4);
///... faccio altro

// il valore di ritorno può essere semplicemente inserito come ultimo valore della funzione (SENZA ;) oppure con un return valore; (vedi esempi sopra)

Esercizi

  • Scrivere una funzione per visualizzare a schermo un testo, e richiamarla più volte
  • Scrivere una funzione che prenda più parametri, e li combini insieme (ad esempio moltiplicazione tra 2 interi)
  • Scrivere una funzione, che chiama altre funzioni, che chiamano altre funzioni... divertitevi
  • (per chi conosce le funzioni) fare una funzione ricorsiva (ad esempio fibonacci ricorsivo)
  • (difficile )provare a mutare un valore preso come argomento (vedi prossimo capitolo)