8. O primeiro programa completo
Um jogo de adivinhar o número — com a lógica separada da conversa, e testada.
Tudo junto: o computador sorteia um número de 1 a 100, a pessoa chuta, e ele diz “maior” ou “menor” até ela acertar. O segredo de um programa que dá para testar é separar a regra (comparar o chute) da conversa (perguntar e mostrar).
regras.df
// ── a regra: nao pergunta nada, so decide ──
action avaliar(segredo, chute):
given chute is segredo:
yield "acertou"
given chute smaller segredo:
yield "maior"
yield "menor"
action ler_chute(texto):
monitor:
n := int(texto)
handle Error:
yield void
given n smaller 1 or n bigger 100:
yield void
yield n
// ── o teste da regra, sem ninguem digitando ──
assert avaliar(42, 42) is "acertou"
assert avaliar(42, 10) is "maior"
assert avaliar(42, 90) is "menor"
assert ler_chute("abc") is void
assert ler_chute("500") is void
assert ler_chute("37") is 37
out "a regra do jogo confere"jogo.df (junto de regras.df)
// ── a conversa: usa a regra ──
segredo := randint(1, 100)
tentativas := 0
resposta := ""
persist resposta isnt "acertou":
texto := input("Seu chute (1 a 100): ")
given texto is void:
out ""
out "ate a proxima!"
halt
chute := ler_chute(texto)
given chute is void:
out "digite um numero de 1 a 100"
skip
tentativas += 1
resposta := avaliar(segredo, chute)
given resposta is "acertou":
out $"Acertou em {tentativas} tentativa(s)!"
otherwise:
out $"O numero e {resposta}."Próximo: 9. Ler um erro.