Multiply

Go to the battlefield

Instructions

The code does not execute properly. Try to figure out why.

function multiply(a, b) {
a * b
}

Test Cases

Test.assertEquals(multiply(1, 1), 1)
Test.assertEquals(multiply(2, 1), 2)
Test.assertEquals(multiply(2, 2), 4)
Test.assertEquals(multiply(3, 5), 15)

Solution

function multiply(a, b) {
return a * b
}

Discourse

这一道题可以说是非常的简单啦,考的就是一个函数的返回值。原题中只进行了计算却没有将计算结果返回。

Improvement

回答到上一步基本上就已经解决了这个问题了,但是作为一个经验丰富的工程师,需要做的远不止只是解决问题,还要对各种边际情况进行考虑和兼容。

function multiply(a, b) {
if (typeof a !== 'number' || typeof b !== 'number' || !a || !b) {
return 0
}
return a * b
}

这里我们对变量 ab 的边际情况进行了处理,我们这里判断如果是非法值返回了 0,你当然也可以选择直接抛出一个错误。

Further improvement

const multiply = function multiply(a, b) {
if (typeof a !== 'number' || typeof b !== 'number' || !a || !b) {
return 0
}
return a * b
}

我们甚至可以更进一步,将函数声明更换为函数表达式,因为总所周知,在 JS 中函数声明的形式会导致『变量提升』,将该函数提升至当前函数级作用域的顶部,有时候会导致容易迷惑,使得代码不便于被理解和调试。