Pular para conteúdo

Quiz 14 - Introdução

1. **Onde encontramos os argumentos passados via terminal no Rust?**
No arquivo Cargo.toml
Na função `std::env::args()`
Em uma variável global `ARGS`
No registro do sistema > **Explicação**: `std::env::args()` fornece um iterador sobre os argumentos fornecidos ao binário.
2. **Qual o primeiro argumento retornado por `std::env::args()`?**
O primeiro parâmetro do usuário
A data atual
O caminho do próprio binário que está sendo executado
O nome do usuário do sistema > **Explicação**: Esta é uma convenção comum em sistemas operacionais.
3. **Para lidar com argumentos complexos de forma profissional, recomendamos a crate:**
`serde`
`clap`
`regex`
`tokio` > **Explicação**: `clap` (Command Line Argument Parser) é o padrão da indústria para CLIs em Rust.
4. **Qual o papel do atributo `#[derive(Parser)]` no Clap?**
Criar um novo arquivo
Gerar automaticamente o código necessário para processar os argumentos baseando-se em uma Struct
Enviar os dados para a nuvem
Compilar o programa mais rápido > **Explicação**: O Clap usa macros de derivação para simplificar a criação de interfaces de linha de comando.
5. **Qual a diferença entre um argumento "posicional" e um "nomeado" (flag)?**
Não há diferença
Posicionais dependem da ordem; nomeados usam prefixos como `--nome` ou `-n`
Posicionais são apenas para números
Nomeados são obrigatórios e posicionais não > **Explicação**: Flags (nomeados) oferecem mais flexibilidade e clareza para o usuário.
6. **Como o Clap gera o menu de ajuda (`--help`)?**
Você precisa escrever o texto manualmente em um arquivo TXT
Ele usa os comentários de documentação (`///`) e metadados da sua Struct
Ele baixa o texto da internet
O Windows gera para você > **Explicação**: O Clap extrai as descrições diretamente do seu código, mantendo a ajuda sempre atualizada.
7. **Qual método do módulo `std::fs` lê o conteúdo de um arquivo inteiro para uma String?**
`fs::open`
`fs::get_text`
`fs::read_to_string`
`fs::load` > **Explicação**: É a maneira mais simples de carregar arquivos de texto pequenos ou médios na memória.
8. **Ao organizar um projeto CLI, por que mover a lógica para `lib.rs`?**
Porque `main.rs` não aceita funções
Para facilitar os testes automáticos e permitir a reutilização como biblioteca
Porque o Cargo exige isso
Para aumentar a performance > **Explicação**: Separar a interface (CLI) da lógica de negócio é uma boa prática de engenharia de software.
9. **O que acontece se uma ferramenta CLI em Rust gera um `panic!` em produção?**
O computador trava
Ela imprime uma mensagem de erro e encerra o processo com código de erro
Ela reinicia automaticamente
Ela apaga o arquivo Cargo.toml > **Explicação**: O `panic!` encerra o programa de forma abrupta, por isso o tratamento com `Result` é preferível para o usuário final.
10. **Como definimos um valor padrão para um argumento no Clap?**
Criando um loop `while`
Usando o atributo `#[arg(default_value_t = ...)]`
Escrevendo o valor no nome da variável
Não é possível definir valores padrão > **Explicação**: Atributos no campo da Struct permitem configurar comportamentos detalhados para cada argumento.