Menu
Coddy logo textTech

Folha de Consulta Rust

Última atualização

Hello World e estrutura

Um programa Rust começa em fn main; as instruções terminam em ponto e vírgula.

OperaçãoSintaxe
Ponto de entradafn main() { ... }
Exibir uma linhaprintln!("Hello, World!");
Exibir com valoresprintln!("{} is {}", name, age);
Exibir forma de debugprintln!("{:?}", value);
Comentário de linha// comment
Usar um item de um módulouse std::collections::HashMap;
Compilar e executarcargo run
Compilar um binário de releasecargo build --release

Variáveis e tipos (let / mut)

As vinculações são imutáveis por padrão; adicione mut para permitir reatribuição.

OperaçãoSintaxe
Vinculação imutávellet x = 5;
Vinculação mutávellet mut count = 0;
Tipo explícitolet age: u32 = 30;
Constanteconst MAX: u32 = 100;
Shadowinglet x = x + 1;
Tipos inteirosi32, u32, i64, usize
Outros escalaresf64, bool, char
Tuplalet pair: (i32, &str) = (1, "a");
Conversão de tipolet f = x as f64;

Controle de fluxo

if é uma expressão, e Rust tem três formas de laço.

OperaçãoSintaxe
If / elseif x > 0 { ... } else { ... }
If como expressãolet y = if x > 0 { 1 } else { -1 };
Laço infinitoloop { ... }
Laço que retorna um valorlet v = loop { break 5; };
Laço whilewhile x < 100 { ... }
For sobre um rangefor i in 0..10 { ... }
For sobre uma coleçãofor item in &items { ... }
Break / continuebreak;, continue;

Funções

A última expressão (sem ponto e vírgula) é o valor de retorno.

OperaçãoSintaxe
Função básicafn add(a: i32, b: i32) -> i32 { a + b }
Retorno explícitofn f() -> i32 { return 5; }
Sem valor de retornofn log(msg: &str) { ... }
Receber uma referênciafn len(s: &String) -> usize { s.len() }
Closurelet add = |a, b| a + b;
Closure com tipolet sq = |x: i32| -> i32 { x * x };
Função como argumentofn apply(f: impl Fn(i32) -> i32) { ... }

Ownership e borrowing

Cada valor tem um único dono; referências o tomam emprestado sem assumir a posse.

OperaçãoSintaxe
Move (transfere a posse)let b = a; (a deixa de ser válido)
Clone (cópia profunda)let b = a.clone();
Empréstimo imutávellet r = &x;
Empréstimo mutávellet r = &mut x;
Empréstimo em uma funçãofn read(s: &String) { ... }
Desreferenciar*r
Regra de borrowingVários & OU um &mut por vez, não ambos
Slice (toma emprestado um intervalo)let part = &arr[1..3];

Structs e enums

Structs agrupam dados relacionados; enums modelam um valor que é uma de várias variantes.

OperaçãoSintaxe
Definir uma structstruct Point { x: i32, y: i32 }
Criar uma instâncialet p = Point { x: 1, y: 2 };
Acessar um campop.x
Tuple structstruct Pair(i32, i32);
Método (bloco impl)impl Point { fn dist(&self) -> f64 { ... } }
Função associadaimpl Point { fn new() -> Self { ... } }
Definir um enumenum Shape { Circle(f64), Rect(f64, f64) }
Enum com campos nomeadosenum Msg { Move { x: i32, y: i32 } }
Derivar traits#[derive(Debug, Clone)]

Correspondência de padrões (match)

match compara um valor com padrões e precisa ser exaustivo.

OperaçãoSintaxe
Corresponder em valoresmatch x { 1 => "one", _ => "other" }
Corresponder a um enummatch shape { Shape::Circle(r) => ... }
Corresponder a um rangematch n { 1..=5 => ..., _ => ... }
Vincular com uma guardamatch x { n if n > 0 => ... }
Corresponder a uma tuplamatch point { (0, y) => ..., (x, _) => ... }
if let (padrão único)if let Some(v) = opt { ... }
while letwhile let Some(v) = stack.pop() { ... }
Desestruturar uma structlet Point { x, y } = p;

Traits e generics

Traits definem comportamento compartilhado; generics fazem o código funcionar com muitos tipos.

OperaçãoSintaxe
Definir um traittrait Area { fn area(&self) -> f64; }
Implementar um traitimpl Area for Circle { fn area(&self) -> f64 { ... } }
Método padrãotrait Greet { fn hi(&self) { ... } }
Função genéricafn largest<T: PartialOrd>(list: &[T]) -> &T { ... }
Struct genéricastruct Wrapper<T> { value: T }
Limite de trait (where)fn f<T>(x: T) where T: Display { ... }
Argumento impl Traitfn print(item: impl Display) { ... }
Trait objectlet shapes: Vec<Box<dyn Area>> = ...;

Tratamento de erros (Result / Option)

Rust modela a ausência com Option e erros recuperáveis com Result.

OperaçãoSintaxe
Valor opcionalOption<T>: Some(v) ou None
Tipo ResultResult<T, E>: Ok(v) ou Err(e)
Retornar um Resultfn read() -> Result<String, Error> { ... }
Propagar com ?let data = read()?;
Unwrap (causa panic em None/Err)opt.unwrap()
Valor padrãoopt.unwrap_or(0)
Mapear um valoropt.map(|v| v + 1)
Tratar ambos os braçosmatch res { Ok(v) => ..., Err(e) => ... }
Converter Option em Resultopt.ok_or("missing")?

Coleções comuns (Vec / HashMap)

Vec é um array que cresce; HashMap é um armazenamento chave-valor.

OperaçãoSintaxe
Criar um vetorlet mut v: Vec<i32> = Vec::new();
Literal de vetorlet v = vec![1, 2, 3];
Push / popv.push(4);, v.pop();
Acesso por índicev[0]
Acesso segurov.get(0) retorna Option<&T>
Iterarfor x in &v { ... }
Comprimentov.len()
Criar um maplet mut m: HashMap<String, i32> = HashMap::new();
Inserir / obterm.insert(k, v);, m.get(&k)
API Entry*m.entry(k).or_insert(0) += 1;

A sintaxe de Rust que você mais usa, em uma única página. Esta folha de consulta Rust é uma referência rápida para o núcleo da linguagem - variáveis e mutabilidade, ownership e borrowing, structs e enums, correspondência de padrões, traits e generics, e os tipos Result e Option por trás do tratamento de erros de Rust.

Tudo aqui é Rust padrão que compila em uma toolchain stable recente. Copie o que precisar ou teste cada trecho ao vivo no playground de Rust - sem necessidade de instalar o cargo.

Perguntas frequentes sobre a folha de consulta Rust

Esta folha de consulta Rust é gratuita?
Sim. Esta folha de consulta Rust é totalmente gratuita, sem necessidade de cadastro. Salve nos favoritos e volte sempre que precisar consultar um padrão de match, um limite de trait ou um método de coleção.
O que são ownership e borrowing em Rust?
Ownership é o modelo de memória de Rust: cada valor tem exatamente um dono, e o valor é liberado quando esse dono sai de escopo. O borrowing permite acessar um valor sem assumir a posse usando uma referência - &x para um empréstimo imutável ou &mut x para um mutável. O compilador impõe uma regra: você pode ter vários empréstimos imutáveis ou exatamente um empréstimo mutável por vez, o que previne disputas de dados em tempo de compilação.
Qual é a diferença entre Result e Option em Rust?
Option<T> representa um valor que pode estar ausente - é Some(v) ou None, e você o usa quando não há erro a relatar, apenas um valor faltando. Result<T, E> representa uma operação que pode falhar - é Ok(v) ou Err(e), carregando um valor de erro quando algo dá errado. Use Option para "talvez exista" e Result para "isto pode falhar"; o operador ? propaga ambos.
Posso praticar Rust online?
Sim. Abra o playground de Rust para compilar e executar qualquer trecho desta folha de consulta no seu navegador - sem cargo nem toolchain para instalar. Quando quiser estrutura, o curso interativo e gratuito de Rust da Coddy leva você passo a passo de variáveis e ownership a traits e tratamento de erros.
Esta folha de consulta é boa para iniciantes?
Sim. Ela está organizada dos tópicos mais comuns (variáveis, controle de fluxo, funções) até os avançados (traits, generics, tratamento de erros), de modo que você pode usar as seções de cima já no primeiro dia e ir avançando para ownership e o resto.
Coddy programming languages illustration

Aprenda Rust com a Coddy

COMEÇAR