@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
- Limitar tamanho: Garantir que um índice não exceda o tamanho do array.
- Clamping: Combinar com
@maxpara restringir valores a um intervalo. - Processamento de dados: Encontrar mínimo em sequências.
- 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