javascriptの引数について
javascriptの引数についてです。
引数のチェックをjavascriptでは行ってくれません。
ES2015からは改善されているようです。
引数のチェックはしない
function showName(name) { console.log(name); } showName('foo'); =>foo showName('foo', 'bar'); =>foo showName(); =>undefined
これはrubyだと、引数が合わないよって怒ってくるところですね。
def show(name) name end [4] pry(main)> show('foo') => "foo" [5] pry(main)> show('foo', 'bar') ArgumentError: wrong number of arguments (given 2, expected 1) from (pry):5:in `show' [6] pry(main)> show() ArgumentError: wrong number of arguments (given 0, expected 1) from (pry):5:in `show'
引数を持つオブジェクト
arguments
が持っています。
argumentsオブジェクトを利用して、引数の数を確認することができます。
下のような感じですね。
function showName(name) { if (arguments.length !== 1) { console.log(`given ${arguments.length}, expected 1`) }else { console.log(name); } }
可変長引数のように書く
可変長引数の場合は、配列で回していくことになります。
下のような感じになります。
function sum() { var result = 0; for(var i = 0, len = arguments.length; i < len; i++) { var tmp = arguments[i] if (typeof tmp !== 'number') { throw new Error('引数が数値ではありません'); } result += tmp; } return result; } sum(1, 3, 5, 7, 9);
こういうのを見ると、rubyは簡潔に書ける言語だなって感じてしまう。