Repaso: calculadora segura
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy. Lección 47 de 56.
Construye una pequeña calculadora que sobreviva a entradas incorrectas, combinando raise, múltiples cláusulas rescue y ensure.
Desafío
IntermedioDefine un método calc(a, op, b) que:
- Lance un
ArgumentErrorcon el mensaje"unknown operator"siopno es uno de los siguientes:+,-,*,/ - Realice la operación en caso contrario (usa aritmética de enteros para
/)
Luego, lee tres líneas de la entrada, a, op, b: y llama a calc dentro de un bloque begin / rescue / ensure:
- Si tiene éxito, imprime
<a> <op> <b> = <result> - Ante un
ArgumentError, imprimeBad operator - Ante un
ZeroDivisionError, imprimeCannot divide by zero - En el
ensure, imprime siempre--- end ---
Usa Integer(...) para analizar a y b, dentro del mismo bloque begin, de modo que una entrada que no sea un entero también resulte en Bad operator (ArgumentError cubre ambos casos).
Para la entrada 6 / * / 7, la salida es:
6 * 7 = 42
--- end ---Para la entrada 10 / / / 0:
Cannot divide by zero
--- end ---Pruébalo tú mismo
# TODO: definir calc(a, op, b), lanza ArgumentError en caso de op desconocida
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: begin/rescue/ensure como se describió
Todas las lecciones de Lógica y flujo
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datos3Matrices 2D
Fundamentos de matrices 2DAcceso a elementos 2DRecorrido de matrices 2DPatrones comunes en 2DRepaso - Operaciones con matrices6Proyecto - Gestor de biblioteca
Descripción general del proyectoAñadir libro9Manejo de errores
¿Qué es una excepción?begin / rescueMúltiples cláusulas rescueensure y raiseRepaso: calculadora seguraPractica por tu cuenta: Compilador de Ruby online