@max em Zig
O @max retorna o maior de dois valores. Funciona com inteiros, floats e valores comptime. Se os dois valores forem conhecidos em comptime, o resultado também é comptime. Complementar ao @min, é usado para garantir valores mínimos, limitar intervalos e encontrar extremos.
Sintaxe
@max(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 maior dos dois valores.
Exemplos práticos
Exemplo 1: Uso básico
const std = @import("std");
pub fn main() void {
std.debug.print("max(10, 20) = {}\n", .{@max(@as(u32, 10), @as(u32, 20))}); // 20
std.debug.print("max(-5, 3) = {}\n", .{@max(@as(i32, -5), @as(i32, 3))}); // 3
std.debug.print("max(1.5, 2.7) = {d}\n", .{@max(@as(f64, 1.5), @as(f64, 2.7))}); // 2.7
}
Exemplo 2: Garantir valor mínimo
const std = @import("std");
const Config = struct {
threads: u32,
buffer_size: usize,
};
fn normalizar(config: Config) Config {
return .{
// Pelo menos 1 thread
.threads = @max(config.threads, 1),
// Buffer de pelo menos 4096 bytes
.buffer_size = @max(config.buffer_size, 4096),
};
}
pub fn main() void {
const config = normalizar(.{ .threads = 0, .buffer_size = 100 });
std.debug.print("Threads: {}, Buffer: {}\n", .{ config.threads, config.buffer_size });
// Threads: 1, Buffer: 4096
}
Exemplo 3: Encontrar máximo em slice
const std = @import("std");
fn maximo(valores: []const i32) ?i32 {
if (valores.len == 0) return null;
var max_val = valores[0];
for (valores[1..]) |v| {
max_val = @max(max_val, v);
}
return max_val;
}
pub fn main() void {
const dados = [_]i32{ 5, -3, 12, 8, -1, 20, 7 };
if (maximo(&dados)) |m| {
std.debug.print("Máximo: {}\n", .{m}); // 20
}
}
Casos de uso comuns
- Valor mínimo garantido: Garantir que configurações não fiquem abaixo de um limite.
- Clamping: Combinar com
@minpara restringir valores a um intervalo. - Redução: Encontrar o maior valor em uma coleção.
- Layout: Calcular tamanho máximo necessário para buffers ou contêineres.
Builtins relacionados
- @min — Retorna o menor de dois valores
- @addWithOverflow — Aritmética com detecção de overflow
- @as — Conversão de tipo