Menu
Coddy logo textTech

Structs como Parâmetros de Função

Parte da seção Logic & Flow do Journey de Rust da Coddy — lição 24 de 66.

Agora que você sabe como criar e modificar structs, vamos explorar como usá-las com funções. Assim como qualquer outro tipo de dado em Rust, você pode passar instâncias de structs para funções e retorná-las de funções.

Para passar uma struct para uma função, você simplesmente a inclui como um parâmetro na definição da função:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

Esta função recebe uma struct Rectangle como parâmetro e retorna um i32. Dentro da função, você pode acessar os campos da struct usando a notação de ponto, assim como faria em qualquer outro lugar.

Você também pode retornar structs de funções especificando o tipo da struct como o tipo de retorno:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

O uso de structs com funções torna seu código mais organizado e significativo. Em vez de passar vários parâmetros individuais, você pode agrupar dados relacionados e passá-los como uma unidade única e bem definida.

challenge icon

Desafio

Fácil

Você receberá quatro entradas: a largura de um retângulo (como um número inteiro), a altura de um retângulo (como um número inteiro), o comprimento do lado de um quadrado (como um número inteiro) e um número de escolha (1 ou 2). Defina uma struct Rectangle com dois campos: width: i32 e height: i32. Crie duas funções: uma que recebe um Rectangle e calcula sua área, e outra que recebe um comprimento de lado e retorna um Rectangle representando um quadrado. Com base na escolha informada, calcule e imprima a área apropriada.

Requisitos:

  • Defina uma struct Rectangle com os campos: width: i32 e height: i32
  • Crie uma função calculate_area que recebe um Rectangle como parâmetro e retorna um i32 (a área)
  • Crie uma função create_square que recebe um i32 (comprimento do lado) como parâmetro e retorna um Rectangle com largura e altura iguais
  • Leia a primeira entrada e converta-a para i32 para a largura do retângulo
  • Leia a segunda entrada e converta-a para i32 para a altura do retângulo
  • Crie uma instância de Rectangle com essas dimensões
  • Leia a terceira entrada e converta-a para i32 para o comprimento do lado do quadrado
  • Leia a quarta entrada e converta-a para i32 para a escolha (1 ou 2)
  • Se a escolha for 1: calcule e imprima a área do retângulo
  • Se a escolha for 2: crie um quadrado usando create_square, então calcule e imprima sua área

Entrada:

  • Primeira linha: Largura do retângulo como um número inteiro (ex: 8)
  • Segunda linha: Altura do retângulo como um número inteiro (ex: 5)
  • Terceira linha: Comprimento do lado do quadrado como um número inteiro (ex: 6)
  • Quarta linha: Escolha como um número inteiro, sendo 1 ou 2 (ex: 1)

Saída:

  • Se a escolha for 1: Rectangle area: [area]
  • Se a escolha for 2: Square area: [area]

Folha de consulta

Structs podem ser passadas para funções como parâmetros e retornadas de funções.

Para passar uma struct para uma função, inclua-a como um parâmetro:

fn calculate_area(rect: Rectangle) -> i32 {
    rect.width * rect.height
}

Para retornar uma struct de uma função, especifique o tipo da struct como o tipo de retorno:

fn create_square(size: i32) -> Rectangle {
    Rectangle {
        width: size,
        height: size,
    }
}

Dentro de funções, acesse os campos da struct usando a notação de ponto. O uso de structs com funções permite agrupar dados relacionados em vez de passar múltiplos parâmetros individuais.

Experimente você mesmo

use std::io;

// TODO: Defina a struct Rectangle aqui


// TODO: Defina a função calculate_area aqui


// TODO: Defina a função create_square aqui


fn main() {
    // Ler a largura do retângulo
    let mut width_input = String::new();
    io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: i32 = width_input.trim().parse().expect("Invalid input");
    
    // Ler a altura do retângulo
    let mut height_input = String::new();
    io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: i32 = height_input.trim().parse().expect("Invalid input");
    
    // Ler o comprimento do lado do quadrado
    let mut side_input = String::new();
    io::stdin().read_line(&mut side_input).expect("Failed to read line");
    let side: i32 = side_input.trim().parse().expect("Invalid input");
    
    // Ler a escolha
    let mut choice_input = String::new();
    io::stdin().read_line(&mut choice_input).expect("Failed to read line");
    let choice: i32 = choice_input.trim().parse().expect("Invalid input");
    
    // TODO: Escreva seu código abaixo
    // Crie uma instância de Rectangle, verifique a escolha e calcule a área apropriada
    
    
    // Exibir o resultado com base na escolha
    // Use: println!("Rectangle area: {}", area); ou println!("Square area: {}", area);
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Logic & Flow