17.4. Exercises: Exceptions

17.4.1. Zero Division: Throw

Write a function called divide that takes two parameters: a numerator and a denominator.

Your function should return the result of numerator / denominator.

However, if denominator is zero you should throw the error, "Attempted to divide by zero."

Note

Hint: You can use an if / throw statement to complete this exercise.

Code your function at this repl.it.

Check your solution.

17.4.2. Test Student Labs

A teacher has created a gradeLabs function that verifies if student programming labs work. This function loops over an array of JavaScript objects that should contain a student property and runLab property.

The runLab property is expected to be a function containing the student's code. The runLab function is called and the result is compared to the expected result. If the result and expected result don't match, then the lab is considered a failure.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 function gradeLabs(labs) {
   for (let i=0; i < labs.length; i++) {
      let lab = labs[i];
      let result = lab.runLab(3);
      console.log(`${lab.student} code worked: ${result === 27}`);
   }
 }

let studentLabs = [
   {
      student: 'Carly',
      runLab: function (num) {
         return Math.pow(num, num);
      }
   },
   {
      student: 'Erica',
      runLab: function (num) {
         return num * num;
      }
   }
];

gradeLabs(studentLabs);

The gradeLabs function works for the majority of cases. However, what happens if a student named their function incorrectly? Run gradeLabs and pass it studentLabs2 as defined below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
let studentLabs2 = [
   {
      student: 'Blake',
      myCode: function (num) {
         return Math.pow(num, num);
      }
   },
   {
      student: 'Jessica',
      runLab: function (num) {
         return Math.pow(num, num);
      }
   },
   {
      student: 'Mya',
      runLab: function (num) {
         return num * num;
      }
   }
];

gradeLabs(studentLabs2);

Upon running the second example, the teacher gets TypeError: lab.runLab is not a function.

Add a try/catch block inside of gradeLabs to catch an exception if the runLab property is not defined. If the exception is thrown, result should be set to the text "Error thrown".