Playlist: https://youtube.com/playlist?list=PLjSf4DcGBdiGCNOrCoFgtj0KrUq1MRUME
hello.rs
:
fn main() {
println!("Hello World!");
}
Compilar:
# isso vai gerar um binário chamado 'hello'
rustc hello.rs
Compilar desta 👆 forma só é utilizado para coisinhas rápidas.
Normalmente usamos o cargo
para gerenciar pacotes e outras coisas relacionadas ao projeto.
Iniciando um novo projeto:
cargo new my_project
# isso vai criar um dir com essa estrutura:
# my_project
# ├── Cargo.toml
# └── src
# └── main.rs
NOTA: sempre que um diretório tiver um Cargo.toml
válido, podemos dizer que é um workspace do Rust.
Fazer build do projeto:
# faz o build do projeto:
cargo build
# isso vai criar o dir 'target/'
# o binário vai para 'target/debug/my_project'
# executa o projeto
cargo run
# formatar o código
cargo fmt
Ferramenta útil:
cargo install cargo-watch
# agora conseguimos usar
cargo watch -x run
mut
// hours será do tipo inteiro
let hours = 30;
// se quiser mutável, precisa usar 'mut'
let mut counter = 0;
É possível recriar uma variável sem problema algum:
fn main() {
let hours = 30;
// do something...
let hours = "quarenta";
// this 👆 is perfectly fine
}
Definindo constantes:
// coding convention: ALL_CAPS_SNAKE_CASE
const SECONDS_IN_MINUTES: u32 = 60
Observações sobre constantes:
Tipos primitivos são divididos em dois tipos:
Detalhando:
[1, 2, 3, 4, 5]
(5, true, 42.1, 'a')
bits | signed | unsigned |
---|---|---|
8 | i8 | u8 |
16 | i16 | u16 |
32 | i32 | u32 |
64 | i64 | u64 |
128 | i128 | u128 |
arch | isize | usize |
Observação: se não for definido, o compilador irá inferir um inteiro como i32
.
Existem duas formas de definir o tipo na declaração da variável:
let x: u8 = 5;
let y = 5_u8;
Também é possível usar _underline_
para melhorar a legibilidade:
let price = 112_899;
Números em diferentes bases:
let hexadecimal = 0xff;
let octal = 0o77;
let binario = 0b1111_0000;
let byte = b'A'; // NOTA: isso é diferente de char!
Observação: se não for definido, o compilador irá inferir um ponto-flutuante como f64
.
let isSomething = true;
let isCorrect: bool = false;
Qualquer caracter Unicode, ou seja, aceita emojis!
https://youtu.be/IEFrj4znVIU?t=920
.
ponto: ex.: my_tuple.0
// declaração com inferência de tipo
let numbers = (1, 2, 3);
let my_stuff = (1, 2.3, false);
// declaração com tipagem explícita
let numbers: (i32, i32, i32) = (1, 2, 3);
let my_stuff (i32, f64, bool) = (1, 2.3, false);
// desserialiazação
let (a, b, c) = numbers;
my_array[0]
&my_array[1..2]
1..2
, o 1
é inclusive e o 2
é exclusivo...2
se omitir o início, considere 0
1..
se omitir o final, considere que é até o fim// inferência de tipo
let numbers = [1, 2, 3];
// tipagem explícita
let numbers: [i32:3] = [1, 2, 3];