Max/Min

Dupla classica pra escolher maior/menor entre dois valores. Tambem funciona com datas, strings. Util pra clamp de valor em range.

Assinatura: Max(a, b) -> nMaior // Min(a, b) -> nMenor

Retorna: Numeric/Date/Character

Dupla minimalista mas onipresente em codigo. Max retorna o maior, Min retorna o menor. Funciona com numericos, datas e strings (comparacao lexicografica).

Sintaxe

Max(a, b)  --> valor maior
Min(a, b)  --> valor menor

Exemplos

// Numericos
Max(10, 20)              // 20
Min(10, 20)              // 10
Max(-5, 3)               // 3
Min(-5, 3)               // -5

// Datas
Max(CtoD("13/05/2026"), CtoD("01/06/2026"))    // 01/06/2026

// Strings (lexicografica)
Max("abc", "xyz")        // "xyz"
Min("abc", "xyz")        // "abc"

Casos praticos

1. Limitar valor a um teto (clamp superior)

// Desconto maximo de 10%
nDescTotal := nValor * 0.20                    // 20% calculado
nDescAplic := Min(nDescTotal, nValor * 0.10)   // mas limita a 10%

2. Limitar valor a um piso (clamp inferior)

// Quantidade minima 1
nQtd := Max(nQtdSolicitada, 1)

3. Range clamp (entre piso e teto)

// Idade entre 18 e 65
nIdade := Min(Max(nIdadeBruta, 18), 65)
// Equivalente a "clamp(nIdadeBruta, 18, 65)"

4. Data limite — entre hoje e data fim

// Vencimento nao pode passar de 31/12 nem ser anterior a hoje
dVencto := Max(Min(dVenctoSolic, CtoD("31/12/2026")), dDataBase)

5. Encontrar maior valor em array

Static Function MaiorValor(aArr)
    Local nRet := aArr[1]
    Local i
    For i := 2 To Len(aArr)
        nRet := Max(nRet, aArr[i])
    Next
Return nRet

Pegadinhas

Veja também