@min em Zig — Referência e Exemplos

@min em Zig

O @min retorna o menor de dois valores. Funciona com inteiros, floats e valores comptime. Se os dois valores forem conhecidos em comptime, o resultado também é comptime. Este builtin substitui a necessidade de escrever expressões condicionais if (a < b) a else b.

Sintaxe

@min(a: T, b: T) T

Parâmetros

  • a (T): Primeiro valor.
  • b (T): Segundo valor (mesmo tipo ou coercível).

Valor de retorno

Retorna T — o menor dos dois valores.

Exemplos práticos

Exemplo 1: Uso básico com inteiros e floats

const std = @import("std");

pub fn main() void {
    const a: u32 = 42;
    const b: u32 = 100;

    std.debug.print("min({}, {}) = {}\n", .{ a, b, @min(a, b) }); // 42

    const x: f64 = 3.14;
    const y: f64 = 2.71;
    std.debug.print("min({d}, {d}) = {d}\n", .{ x, y, @min(x, y) }); // 2.71
}

Exemplo 2: Limitar tamanho de buffer

const std = @import("std");

fn copiarLimitado(destino: []u8, origem: []const u8) usize {
    const tamanho = @min(destino.len, origem.len);
    @memcpy(destino[0..tamanho], origem[0..tamanho]);
    return tamanho;
}

pub fn main() void {
    var buffer: [5]u8 = undefined;
    const texto = "Hello, Zig Brasil!";

    const copiados = copiarLimitado(&buffer, texto);
    std.debug.print("Copiados: {s} ({} bytes)\n", .{ buffer[0..copiados], copiados });
    // "Hello" (5 bytes)
}

Exemplo 3: Clamp (limitar a intervalo)

const std = @import("std");

fn clamp(valor: i32, minimo: i32, maximo: i32) i32 {
    return @max(minimo, @min(valor, maximo));
}

pub fn main() void {
    std.debug.print("{}\n", .{clamp(5, 0, 10)});    // 5 (dentro do intervalo)
    std.debug.print("{}\n", .{clamp(-3, 0, 10)});   // 0 (abaixo do mínimo)
    std.debug.print("{}\n", .{clamp(15, 0, 10)});   // 10 (acima do máximo)
}

Casos de uso comuns

  1. Limitar tamanho: Garantir que um índice não exceda o tamanho do array.
  2. Clamping: Combinar com @max para restringir valores a um intervalo.
  3. Processamento de dados: Encontrar mínimo em sequências.
  4. Dimensionamento: Limitar tamanho de buffers, janelas, etc.

Builtins relacionados

  • @max — Retorna o maior de dois valores
  • @addWithOverflow — Aritmética com detecção de overflow
  • @as — Conversão de tipo quando os operandos diferem

Tutoriais relacionados

Continue aprendendo Zig

Explore mais tutoriais e artigos em português para dominar a linguagem Zig.