Voltar

Prefácio

Links para você usar

  1. Rust Playground -> Para você pegar o código da documentação e rodar direto no navegador.

Como surgiu o Rust

Ao longo do tempo ela se tornou uma linguagem multi propósito

Pilares do Rust

Ultimamente o Rust tem atendimento muito bem no Backend e Frontend.

Vários desenvolvedores com bastantes criações de respeito para a comunidade diz que o Rust vai ser bastante usado no futuro.

Tipos primitivos:

Os tipos primitivos em Rust são divididos em 2 categorias: Escalares e Compostos

Escalares (scalar types)

Tipos:

Compostos (compound types)

Tipos:

Inteiros

bits signed unsigned
8 i8 u8
16 i16 u16
32 i32 u32
64 i64 u64
128 i128 u128
arch isize usize

Signed

range: -(2^n-1) até ((2^n-1)-1) i8: -128 até 127 [-(2^7) até ((2^7)-1)]

Unsigned

range: 0 até ((2^n)-1) u8: 0 até 255 [0 até ((2ˆ8)-1)]

Testando os tipos - ESCALARES

fn main() {
    let x: u8 = 5;
    let y: u8 = x * 200;
}
fn main() {
    let x = 5;
    let y = 1_193_123_000
}
fn main() {
    let h = 0xff;
    let o = 0o77;
    let b = 0b111_000;
    let by = b'A';

Floats

fn main() {
    let x:f64 = 42.11;
    let y:f32 = 42.1;
}

Boolean

fn main() {
    let x = true;
    let y = false;
}

Character

fn main() {
    let letra1: char = 'a';
    let letra2 = 'b'; 
    let emoji1 = '🥲'; 
}

Testando os tipos - COMPOSTOS

Tuplas

fn main() {
    let numbers = (1, 2, 3);
    // durante a inferência o rust vai criar um tipo assim:
    // let numbers: (i32, i32, i32) = (1, 2, 3)
    println!("{:?}", numbers);

    // pegando um elemento dentro da tupla
    println!("{:?}", numbers.0);
    println!("{:?}", numbers.2);
    println!("{:?}", numbers.1);
}
fn main() {
    let numbers = (1, 2, 3);

    let (a, b, c) = numbers;
    // isso ficaria assim
    // a = 1
    // b = 2
    // c = 3

    println!("{:?}", a);
    println!("{:?}", b);
    println!("{:?}", c);
}
fn main() {
    let mut numbers = (1, 2, 3);

    numbers.0 = 50;
    println!("{:?}", numbers);

    // usando o pattern match podemos mudar a tupla inteira
    // lembrando que precisa estar no mesmo tipo de
    // dos elementos e a mesma quantidade
    numbers = (45, 90, 100);
    println!("{:?}", numbers);
}

Matrizes / Arrays

fn main() {
    let numbers = [1, 2, 3];
    // a inferência que o Rust faz nesse let é assim
    // let numbers: [i32;3] = [1, 2, 3]
    // no tipo a gente passa o array com o tipo e a quantidade de elementos dentro dele
    println!("{:?}", numbers);

    // acessando o valor do array
    println!("{}", numbers[0]);
    println!("{}", numbers[1]);
    println!("{}", numbers[2]);
}
fn main() {
    let mut numbers = [4, 5, 6];
    println!("{:?}", numbers);

    numbers = [10, 20, 30];
    println!("{:?}", numbers);

    numbers[0] = 50;
    println!("{}", numbers[0]);
}

Erros comuns em linguagem de baixo nível

Out of Bound Error

fn main() {
    let numbers = [1.1, 2.0, 3.3];
    println!("{:?}", numbers[3]);
}
fn main() {
    let numbers = [1, 2, 3];
    println!("{:?}", &numbers[1..3]); // output -> [2, 3]
}
fn main() {
    let numbers = [1, 2, 3];
    println!("{:?}", &numbers[1..]); // output -> [2, 3] 
}