Identação em Rust

Arquivo: exemplo.rs
use std::io;

fn x_input(texto: &str) -> String {
    println!("{}", texto);
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Falha ao ler a linha");
    input.trim().to_string()
}

fn x_int(inteiro: &str) -> i32 {
    inteiro.parse::<i32>().expect("Falha ao converter para inteiro")
}

fn main() {
    let numero = x_int(&x_input("Digite um número: "));
    if numero % 2 == 0 {
        println!("O número é par!");
        println!("asdfdsa");
    } else {
        println!("O número é impar!");
        println!("asdfasdf");
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Digite um número:
4
O número é par!
asdfdsa

Tipos de Comentários

Arquivo: exemplo.rs
fn main() {
    // Comentário de uma linha
    /*
    Comentário
    Com mais de
    uma linha
    */
    println!("Resultado");
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Resultado

Concatenação de String

Existe 1 tipos de concatenação

Arquivo: exemplo.rs
fn main() {
    let texto1 = "texto 1";
    let texto2 = "texto 2";

    println!("{} {}", texto1, texto2);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
texto 1 texto 2

Campo Imput

Arquivo: exemplo.rs
use std::io;

// Funções
fn x_input(texto: &str) -> String {
    println!("{}", texto);
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Falha ao ler a entrada");
    input.trim().to_string()
}

fn x_int(inteiro: &str) -> i32 {
    inteiro.trim().parse().expect("Falha ao converter para inteiro")
}

fn x_float(decimal: &str) -> f64 {
    decimal.trim().parse().expect("Falha ao converter para decimal")
}

fn main() {
    // Qual é o seu nome?
    let name = x_input("Qual é seu nome?");

    // Saída
    println!("Olá, {}!", name);

    // Digite um número inteiro
    let num_str = x_input("Digite um número inteiro:");
    let num: i32 = x_int(&num_str);
    let add = num + 1;

    // Saída
    println!("{} + 1 = {}", num, add);

    // Digite um número decimal
    let num_str = x_input("Digite um número decimal:");
    let num: f64 = x_float(&num_str);
    let div = num / 2.0;

    // Saída
    println!("{} / 2 = {}", num, div);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Qual é seu nome?
Joao
Olá, Joao!
Digite um número inteiro:
10
10 + 1 = 11
Digite um número decimal:
2.345
2.345 / 2 = 1.1725

Comando

if... else if... else

Arquivo: exemplo.rs
use std::io;

fn x_input(texto: &str) -> String {
    println!("{}", texto);
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Falha ao ler a linha");
    input.trim().to_string()
}

fn x_int(inteiro: &str) -> i32 {
    inteiro.parse::<i32>().expect("Falha ao converter para inteiro")
}

fn main() {
    let idade = x_int(&x_input("Qual sua idade: "));

    let acompanhado = true;

    if idade >= 18 {
        println!("Pode entrar e divirta-se!!!");
    } else if idade >= 16 && acompanhado {
        println!("Entre com o seu responsável!!!");
    } else {
        println!("Vai pra casa dormir criança!!!");
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Qual sua idade:
15
Vai pra casa dormir criança!!!

Tipos de Variáveis

(Inteiro, Flutuante, Booleano, String)

Arquivo: exemplo.rs
fn main() {
    let numero_inteiro = 1;
    let numero_flutuante = 5.8;
    let verdadeiro = true;
    let falso = false;
    let caracteres = "SRB - Centro de Tecnologia";

    println!("Variáveis e tipos mais comuns");
    println!("Tipo inteiro: {}", numero_inteiro);
    println!("Tipo float ou ponto flutuante: {}", numero_flutuante);
    println!("Tipo verdadeiro: {}", verdadeiro);
    println!("Tipo falso: {}", falso);
    println!("Tipo caracteres/string: {}", caracteres);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Variáveis e tipos mais comuns
Tipo inteiro: 1
Tipo float ou ponto flutuante: 5.8
Tipo verdadeiro: true
Tipo falso: false
Tipo caracteres/string: SRB - Centro de Tecnologia

Operadores Aritméticos ( + , -, * , /)

Arquivo: exemplo.rs
fn main() {
    println!("Operador de adição (+): 10 + 4 = {}", 10 + 4);
    println!("Operador de subtração (-): 10 - 4 = {}", 10 - 4);
    println!("Operador de multiplicação (*): 10 * 4 = {}", 10 * 4);
    println!("Operador de divisão (/): 10 / 4 = {}", 10 / 4);
    println!("Operador de potenciação (**): 10 ^ 4 = {}", i32::pow(10, 4));
    println!("Operador de resto da divisão (%): 10 % 4 = {}", 10 % 4);
    println!("Operador de negação (-): -10 - 4 = {}", -10 - 4);
}
Resultado
~$ rustc exemplo.rs
~$ ./exemplo
Operador de adição (+): 10 + 4 = 14
Operador de subtração (-): 10 - 4 = 6
Operador de multiplicação (*): 10 * 4 = 40
Operador de divisão (/): 10 / 4 = 2
Operador de potenciação (**): 10 ^ 4 = 10000
Operador de resto da divisão (%): 10 % 4 = 2
Operador de negação (-): -10 - 4 = -14

Operadores Relacionais (<, >, ==, <= , >= )

Arquivo: exemplo.rs
fn main() {
    let a = 3;
    let b = 4;

    let c = a < b; // c recebe o valor da comparação a < b
    let d = a > b; // d recebe o valor da comparação a > b
    let e = a == b; // e recebe o valor da comparação a == b
    let f = a <= b; // f recebe o valor da comparação a <= b
    let g = a >= b; // g recebe o valor da comparação a >= b

    println!("Valor de c: {}", c);
    println!("Valor de d: {}", d);
    println!("Valor de e: {}", e);
    println!("Valor de f: {}", f);
    println!("Valor de g: {}", g);
}
Resultado:

~$ rustc exemplo.rs
~$ ./exemplo
Valor de c: true
Valor de d: false
Valor de e: false
Valor de f: true
Valor de g: false

Operadores Booleanos (And, Or, Not)

Arquivo: exemplo.rs
fn main() {
    let a = true;
    let b = false;

    println!("Valor de A and B: {}", a && b);
    println!("Valor de A or B: {}", a || b);
    println!("Valor de not A: {}", !a);
    println!("Valor de not B: {}", !b);
}
Resultado:

~$ rustc exemplo.rs
~$ ./exemplo
Valor de A and B: false
Valor de A or B: true
Valor de not A: false
Valor de not B: true

Comando

For

Conte até 10

Arquivo: exemplo.rs
fn main() {
    for numero in 0..10 {
        println!("O número da vez é: {}", numero * 2);
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
O número da vez é: 0
O número da vez é: 2
O número da vez é: 4
O número da vez é: 6
O número da vez é: 8
O número da vez é: 10
O número da vez é: 12
O número da vez é: 14
O número da vez é: 16
O número da vez é: 18

Conte de 0 a 100

pulando de 2 em 2

Arquivo: exemplo.rs
fn main() {
    for numero in (0..=100).step_by(2) {
        println!("O número da vez é: {}", numero);
    }
}
Resultado:

~$ rustc exemplo.rs
~$ ./exemplo
O número da vez é: 0
O número da vez é: 2
O número da vez é: 4
O número da vez é: 6
O número da vez é: 8
O número da vez é: 10
O número da vez é: 12
O número da vez é: 14
O número da vez é: 16
O número da vez é: 18
O número da vez é: 20
<...>
O número da vez é: 96
O número da vez é: 98
O número da vez é: 100

Conte de 0 a 100

Arquivo: exemplo.rs
fn main() {
    for numero in 0..=100 {
        if numero % 2 == 0 {
            println!("O número da vez é: {}", numero);
        }
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
O número da vez é: 0
O número da vez é: 2
O número da vez é: 4
O número da vez é: 6
O número da vez é: 8
O número da vez é: 10
O número da vez é: 12
O número da vez é: 14
O número da vez é: 16
O número da vez é: 18
O número da vez é: 20
<...>
O número da vez é: 96
O número da vez é: 98
O número da vez é: 100

Conte de 0 a 100

Arquivo: exemplo.rs
fn main() {
    for numero in 0..=100 {
        if numero % 2 == 0 {
            println!("Este número é par: {}", numero);
        } else {
            println!("Este número é ímpar: {}", numero);
        }
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Este número é par: 0
Este número é impar: 1
Este número é par: 2
Este número é impar: 3
Este número é par: 4
Este número é impar: 5
Este número é par: 6
Este número é impar: 7
Este número é par: 8
Este número é impar: 9
Este número é par: 10
Este número é impar: 11
Este número é par: 12
Este número é impar: 13
Este número é par: 14
Este número é impar: 15
<...>
Este número é impar: 97
Este número é par: 98
Este número é impar: 99
Este número é par: 100

Conte de 0 a 100

Arquivo: exemplo.rs
fn main() {
    for numero in 0..=100 {
        if numero % 2 == 0 {
            println!("{} é par: {}", numero, numero);
        } else {
            println!("{} é ímpar: {}", numero, numero);
        }
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
0 é par: 0
1 é impar: 1
2 é par: 2
3 é impar: 3
4 é par: 4
5 é impar: 5
6 é par: 6
7 é impar: 7
8 é par: 8
9 é impar: 9
10 é par: 10
11 é impar: 11
<...>
95 é impar: 95
96 é par: 96
97 é impar: 97
98 é par: 98
99 é impar: 99
100 é par: 100

Comando

While

Arquivo: exemplo.rs
fn main() {
    let mut controle = 0;

    while controle <= 10 {
        println!("O número da vez é: {}", controle);
        controle += 1;
    }
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
O número da vez é: 0
O número da vez é: 1
O número da vez é: 2
O número da vez é: 3
O número da vez é: 4
O número da vez é: 5
O número da vez é: 6
O número da vez é: 7
O número da vez é: 8
O número da vez é: 9
O número da vez é: 10

Tipos de Importações

Arquivo: exemplo.rs
use std::thread;
use std::time::Duration;

fn main() {
    let mut controle = 0;
    let mut numero = true;

    while numero {
        println!("O número da vez é: {}", controle);
        controle += 1;
        numero = true;
        thread::sleep(Duration::from_secs(1));
    }
}
Resultado:

~$ rustc exemplo.rs
~$ ./exemplo
O número da vez é: 0
O número da vez é: 1
O número da vez é: 2
O número da vez é: 3
O número da vez é: 4
O número da vez é: 5
O número da vez é: 6
^C

Estrutura de Dados

Arrays

Arquivo: exemplo.rs
fn main() {
    let sexo = ["masculino", "feminino"];

    let numero = [1, 2, 3, 4, 5, 6, 7, 8, 9];

    let vogais = ['A', 'E', 'I', 'O', 'U'];

    let frutas = ["Banana", "Laranja", "Maçã", "Mamão"];

    let cursos = ["Português", "Matemática", "Física", "Química", "Biologia", "Inglês", "Geografia", "História"];

    let estado_civil = ["solteiro", "casado", "divorciado", "viúvo"];

    println!("{}", sexo[0]);
    println!("{}", numero[0]);
    println!("{}", vogais[0]);
    println!("{}", frutas[0]);
    println!("{}", cursos[0]);
    println!("{}", estado_civil[0]);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
masculino
1
A
Banana
Português
solteiro
Arquivo: exemplo.rs
fn main() {
    let mut sexo = ["", ""];
    sexo[0] = "masculino";
    sexo[1] = "feminino";

    let mut numero = [0; 10];
    numero[0] = 0;
    numero[1] = 1;
    numero[2] = 2;
    numero[3] = 3;
    numero[4] = 4;
    numero[5] = 5;
    numero[6] = 6;
    numero[7] = 7;
    numero[8] = 8;
    numero[9] = 9;

    let mut vogais = [' '; 5];
    vogais[0] = 'A';
    vogais[1] = 'E';
    vogais[2] = 'I';
    vogais[3] = 'O';
    vogais[4] = 'U';

    let mut frutas = ["", "", "", ""];
    frutas[0] = "Banana";
    frutas[1] = "Laranja";
    frutas[2] = "Maçã";
    frutas[3] = "Mamão";

    let mut cursos = ["", "", "", "", "", "", "", ""];
    cursos[0] = "Português";
    cursos[1] = "Matemática";
    cursos[2] = "Física";
    cursos[3] = "Química";
    cursos[4] = "Biologia";
    cursos[5] = "Inglês";
    cursos[6] = "Geografia";
    cursos[7] = "História";

    let mut estado_civil = ["", "", "", ""];
    estado_civil[0] = "solteiro";
    estado_civil[1] = "casado";
    estado_civil[2] = "divorciado";
    estado_civil[3] = "viúvo";

    println!("{}", sexo[0]);
    println!("{}", numero[0]);
    println!("{}", vogais[0]);
    println!("{}", frutas[0]);
    println!("{}", cursos[0]);
    println!("{}", estado_civil[0]);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
masculino
0
A
Banana
Português
solteiro

Matrizes

Arquivo: exemplo.rs
fn main() {
    let mut texto = String::new();

    /*
    Em matrizes:
    Não podemos usar dois tipos de variáveis int e String ao mesmo tempo numa matriz.
    Só é possível usar um tipo de variável que é a String.
    */

    let mut matriz = vec![vec![""; 6], vec![""; 6]];

    matriz[0][0] = "Beatriz";
    matriz[1][0] = "19";
    matriz[0][1] = "Pedro";
    matriz[1][1] = "32";
    matriz[0][2] = "Cláudio";
    matriz[1][2] = "23";
    matriz[0][3] = "Susana";
    matriz[1][3] = "27";
    matriz[0][4] = "Marcos";
    matriz[1][4] = "16";
    matriz[0][5] = "Celina";
    matriz[1][5] = "35";

    for i in 0..=5 {
        if matriz[1][i].parse::<f32>().unwrap() < 20.0 {
            texto.push_str(matriz[0][i]);
            texto.push(' ');
        }
    }

    println!("{}", texto);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Beatriz Marcos
Arquivo: exemplo.rs
fn main() {
    let mut texto = String::new();

    /*
    Em matrizes:
    Não podemos usar dois tipos de variáveis int e String ao mesmo tempo numa matriz.
    Só é possível usar um tipo de variável que é a String.
    */

    let matriz = [
        ["Beatriz", "19"],
        ["Pedro", "32"],
        ["Cláudio", "23"],
        ["Susana", "16"],
        ["Marcos", "16"],
        ["Celina", "35"],
    ];

    for i in 0..=5 {
        if matriz[i][1].parse::<f32>().unwrap() < 20.0 {
            texto.push_str(matriz[i][0]);
            texto.push(' ');
        }
    }

    println!("{}", texto);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Beatriz Susana Marcos

Funções

Arquivo: exemplo.rs
use std::io;

fn x_input(texto: &str) -> String {
    println!("{}", texto);
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Falha ao ler a linha");
    input.trim().to_string()
}

fn x_int(inteiro: &str) -> i32 {
    inteiro.parse::<i32>().expect("Falha ao converter para inteiro")
}

// Funções

fn soma(n1: i32, n2: i32) -> i32 {
    n1 + n2
}

fn main() {
    let n1 = x_int(&x_input("Digite o primeiro número: "));
    let n2 = x_int(&x_input("Digite o segundo número: "));

    let resultado = soma(n1, n2);

    println!("O resultado da soma: {}", resultado);
}
Resultado:
~$ rustc exemplo.rs
~$ ./exemplo
Digite o primeiro número:
10
Digite o segundo número:
40
O resultado da soma: 50