Rutas
/
C#
C#
/
Ejercicios
/
Instrumentos de Texas
Instrumentos de Texas

Instrumentos de Texas

Ejercicio de aprendizaje

Introducción

Filtrado de excepciones

when es la palabra clave para filtrar excepciones. Se coloca después de la sentencia catch y puede tomar una expresión Boolean que contenga cualquier valor que haya en el scope en ese momento. Si la expresión se evalúa como verdadera, se ejecuta el bloque asociado a esa sentencia catch; en caso contrario, se comprueba la siguiente sentencia catch, si la hay.

try
{
    // do stuff
}
catch (Exception ex) when (ex.Message != "")
{
    // output the message when it is not empty
}
catch (Exception ex)
{
    // show stack trace or something.
}

Excepciones definidas por el usuario

Una excepción definida por el usuario es cualquier clase definida en tu código que derive de System.Exception. Está sujeta a todas las reglas de la herencia de clases, pero además el compilador y el entorno de ejecución del lenguaje tratan esas clases de forma especial, lo que permite lanzar y capturar sus instancias fuera del flujo de control normal, como se explica en el ejercicio exceptions.

Las excepciones definidas por el usuario se usan a menudo para llevar información adicional, como un mensaje y otros datos relevantes, que esté disponible para las rutinas que capturan la excepción.

Instrucciones

Mientras trabajas en Instruments of Texas, tienes la tarea de trabajar en una calculadora experimental escrita en C#. Estás creando un arnés de pruebas para verificar varias funciones de la calculadora, empezando por la multiplicación. Verás que hay una especial preocupación cuando los dos operandos de la multiplicación son negativos.

La clase Calculator ya se te ha proporcionado y no debes modificarla.

1. Completa la definición de la excepción definida por el usuario CalculationException

Completa la definición del constructor de CalculationException, que deberá almacenar (envolver) cualquier excepción lanzada por la calculadora, así como los operandos que se estén procesando en el momento en que se lanza la excepción.

2. Gestiona las condiciones de desbordamiento en la calculadora y proporciona información ampliada a quien la llama

Implementa el método CalculatorTestHarness.Multiply(), que debe llamar al método Calculator.Multiply() de la instancia de Calculator que se pasa al constructor, pasando los valores enteros x e y. Si se produce un desbordamiento en el método Calculator.Multiply(), se lanzará una OverflowException. Esta excepción debe capturarse en el método CalculatorTestHarness.Multiply() y envolverse en una CalculationException, y los valores x e y que se están pasando deben almacenarse como los operandos de la excepción. El objeto CalculationException recién creado debe lanzarse. Puedes ignorar el valor devuelto por el método Calculator.Multiply() si la operación tiene éxito.

var cth = new CalculatorTestHarness(new Calculator());
cth.Multiply(Int32.MaxValue, Int32.MaxValue);
// => throws an instance of CalculationException

var cth2 = new CalculatorTestHarness(new Calculator());
cth2.Multiply(3, 2);
// => silently exits

3. Prueba la operación de multiplicación con entradas válidas

Implementa el método CalculatorTestHarness.TestMultiplication(), que recibe dos números enteros y llama al método CalculatorTestHarness.Multiply(). Se devuelve "Multiply succeeded".

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(6, 7);
// => "Multiply succeeded"

4. Prueba la operación de multiplicación con entradas negativas

Modifica el método CalculatorTestHarness.TestMultiplication() para que devuelva "Multiply failed for negative operands. <INNER_EXCEPTION_MESSAGE>" si ambos argumentos enteros son negativos (menores que cero).

El marcador <INNER_EXCEPTION_MESSAGE> debe sustituirse por el mensaje de la excepción interna de CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(-2, -Int32.MaxValue);
// => "Multiply failed for negative operands. " + innerException.Message

5. Prueba la operación de multiplicación con entradas positivas

Modifica el método CalculatorTestHarness.TestMultiplication() para que devuelva "Multiply failed for mixed or positive operands. <INNER_EXCEPTION_MESSAGE>" si al menos uno de los argumentos enteros no es negativo.

El marcador <INNER_EXCEPTION_MESSAGE> debe sustituirse por el mensaje de la excepción interna de CalculationException.

var cth = new CalculatorTestHarness(new Calculator());
cth.TestMultiplication(Int32.MaxValue, Int32.MaxValue);
// => "Multiply failed for mixed or positive operands. " + innerException.Message
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
C# Exercism

¿Listo para empezar Instrumentos de Texas?

Regístrate en Exercism para aprender y dominar C# con 62 conceptos178 ejercicios y mentoría humana real, todo gratis.