Pular para o conteúdo

O vault de opções

Por que recusar a chave desconhecida — e não avisar sobre ela.

Um vault de opções aceita qualquer chave. É isso que o torna conveniente, e é exatamente por isso que ele precisa de uma guarda.

Recusar, e não avisar#

Um aviso impresso não para nada: o programa segue com o padrão, que é exatamente o estado que se queria evitar. E num servidor o aviso vai para um log que ninguém lê.

dataforge
PADROES := {"tentativas": 3, "prazo": 30, "recuo": 0.5}

action ler_opcoes(recebidas, conhecidas, onde):
    resultado := {}
    cycle k in conhecidas.keys():
        resultado[k] := conhecidas[k]
    cycle k in recebidas.keys():
        given k.startswith("_"):
            skip
        given k not in conhecidas:
            nomes := ", ".join(sorted(conhecidas.keys()))
            trigger $"'{k}' nao e uma opcao de '{onde}'. Aceita: {nomes}"
        resultado[k] := recebidas[k]
    yield resultado

o := ler_opcoes({"prazo": 5}, PADROES, "cliente")
assert o["prazo"] is 5
assert o["tentativas"] is 3

monitor:
    ler_opcoes({"tentativa": 9}, PADROES, "cliente")
    assert no
handle Error as e:
    out e.message
DecisãoPorque
a lista de conhecidas num lugar sóela é a documentação; duas cópias divergem
a mensagem lista o que aceitaquem errou o nome não tem como adivinhar o certo
chave começando com _ passaé a porta de escape para extensão e para teste
o padrão é aplicado pelo chamadora validação e a mesclagem são perguntas diferentes

Continue em Desenhar a API e Os erros.