RozdziałyPodstawowe konstrukcje językaZmienne i stałe

Zmienne i stałe

⚠️

Uwaga

Fragmenty kodu podawane w konspekcie należy przepisać lub wkleić do środka metody main. Dotyczy to wszystkich fragmentów, które nie zawierają kontekstu metody, struktury lub jasno nie wskazano, że mają być wpisane do danego pliku.

Zmienne i ich przesłanianie

Domyślnie wszystkie zmienne są niemutowalne (immutable), ale mogą być przesłaniane (shadowed). Nazwy zmiennych są definiowane zgodnie z konwencją snake_case.

Zmienne niemutowalne

  1. Zdefiniuj nową zmienną całkowita i wypisz jej wartość:

    let number : u32 = 12;
    println!("{}", number);
  2. Inferencja typu: Możesz pominać definicję typu, jeśli kompilator będzie w stanie wywnioskować typ zmiennej

    let number = 12; // type inference
    println!("{}", number);
  3. Spróbuj przypisać nową wartość do zmiennej:

    let number : u32 = 12;
    number = 6; // error, cannot assign a new value to an unmutable variable
    println!("{}", number);

Nadpisywanie zmiennych

  1. Nadpisywanie zmiennych (ang. variables shadowing) polega na utworzeniu nowej zmiennej o takiej samej nazwie jak zdeklarowana wcześniej zmienna. Poprzednia zmienna jest usuwana z bieżącego kontekstu.

    let spaces = "    "; // &str
     
    let spaces = spaces.len(); // spaces variable now points to len of text and its type is usize
     
    println!("Size of spaces is {}", spaces);
  2. 🤔 Jaką wartości wypisze poniższy kod? Wyjaśnij dlaczego? (zastanów się nad odpowiedzią zanim uruchomisz kod)

    fn main() { 
        let x = 5; 
        let x = x + 1; 
        { 
            let x = x * 2; 
            println!("The value of x in the inner scope is: {}", x); 
        } 
        
        println!("The value of x is: {}", x); }

Zmienne mutowalne

  1. Zdefiniuj zmienną mutowalną za pomocą słowa kluczowego mut

    let mut number : u32 = 12;
    number = 6;
     
    println!("{}", number);

Chcesz wiedzieć więcej?

Dokumentacja Rust: Variables and mutability

Zmienne mutowalne vs. redefiniowanie zmiennych

Redefiniowanie zmiennych (ang. shadowing), w odróżnieniu od zmiennej mutowalnej, spowoduje błąd kompilacji, jeśli przypadkowo spróbujemy przypisać do niej nową wartość bez użycia słowa kluczowego let.

Ponadto w przypadku redefinicji zmiennej możemy zmienić jej typ - w praktyce tworzona jest nowa zmienna więc nie ma przeciwskazań, aby posiadała inny typ.

Stałe

const DB_PORT : u32 = 5432;
  1. Zgoodnie z konwencją nazwy stałych pisane są dużymi literami (SCREAMING_SNAKE_CASE).
  2. Różnice pomiędzy zmiennymi i stałymi:
    • stałe nie mogą być mutowalne (sic!)
    • przy definicji stałej zawsze należy podać typ wartości
    • stałe mogą być zdefiniowane w dowolnym zasięgu, również w zasięgu globalnym,
    • wartością stałej może być tylko stałe wyrażenie, którego wartość jest znana na etapie kompilacji

Chcesz wiedzieć więcej?

Dokumentacja Rust: Constant evaluation