Tracks
/
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 esté en el ámbito en ese momento. Si la expresión se evalúa como true, se ejecuta el bloque asociado a esa sentencia catch; de lo contrario, se revisa 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 una manera especial 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 transportar información adicional, como un mensaje y otros datos relevantes, que quede 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 construyendo un arnés de pruebas para verificar varias funciones de la calculadora, empezando por la multiplicación. Verás que hay un interés especial 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. Maneja las condiciones de desbordamiento en la calculadora y proporciona información ampliada a quien llama

Implementa el método CalculatorTestHarness.Multiply(), que debe llamar al método Calculator.Multiply() de la instancia de Calculator que se pasó al constructor, pasando los valores enteros x e y. Si ocurre un desbordamiento en el método Calculator.Multiply(), este 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 que devuelve el método Calculator.Multiply() si 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 argumentos válidos

Implementa el método CalculatorTestHarness.TestMultiplication(), que recibe dos 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 argumentos negativos

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

El marcador <INNER_EXCEPTION_MESSAGE> debe reemplazarse con 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 argumentos positivos

Modifica el método CalculatorTestHarness.TestMultiplication() para que se 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 reemplazarse con 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 una pestaña nuevas
C# Exercism

¿Todo 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.