← Todos los tutoriales
language-deep-dive 5 min

Contratos con require

Una declaración require es una precondición — una regla que debe ser verdadera cuando se llama a una función. En lugar de ocultar comprobaciones defensivas en lo profundo del cuerpo de la función, require declara el contrato en la parte superior donde todo lector lo ve inmediatamente.

require aplica las reglas que una función necesita para funcionar correctamente:

functions:\n    number divide(number a, number b)\n        require b != 0.0\n        return a / b\n\n    string repeat(string text, integer times)\n        require times > 0\n        require text.length() > 0\n        string result = ""\n        iterate i in 0 to times - 1\n            result = result + text\n        return result\n\nstart:\n    print(divide(10.0, 4.0).toString())\n    print(repeat("ab", 3))
2.5\nababab

require b != 0.0 establece que divide requiere que b sea distinto de cero. Si alguien llama a divide con 0.0, se señala un error antes de la división — sin fallo críptico en tiempo de ejecución. Se permiten múltiples sentencias require y se comprueban en orden.

require hace que el rango de entrada válido sea inmediatamente visible:

functions:\n    string grade(integer score)\n        require score >= 0\n        require score <= 100\n        if score >= 90\n            return "A"\n        if score >= 80\n            return "B"\n        if score >= 70\n            return "C"\n        if score >= 60\n            return "D"\n        return "F"\n\nstart:\n    print(grade(95))\n    print(grade(73))\n    print(grade(55))
A\nC\nF

Cualquiera que lea grade ve inmediatamente: esta función funciona con puntuaciones de 0 a 100. Las sentencias require son el contrato de la función — documentan las entradas esperadas y las aplican. El código que pasa valores inválidos falla en la línea require, no en algún lugar dentro de la lógica.

Resumen rápido

  • require condición señala un error si la condición es falsa
  • Coloca las sentencias require al principio de la función, antes de cualquier lógica
  • Se permiten múltiples líneas require — cada una se comprueba en orden
  • require es documentación Y aplicación — el contrato es visible para cualquier lector
¡Copiado!