引数はシンプルのほうがいいのかも
- カテゴリ:
- JavaScript
- コメント数:
- Comments: 0
◆ 引数にデフォルト引数や分割代入機能を組み合わせすぎるとわけわからなくなる
最近の JavaScript は引数にデフォルト値や分割代入の機能が使えて便利です
かといってできること引数で全部やろうとすると引数定義がすごく複雑になります
例えばこんなのもおっけいです
引数の数が多い関数だともっとすごいことになったこともあります
あまり複雑になるようなら関数内で昔ながらの初期化をしたほうが見やすいかもしれませんね
logonerror は関数実行時にエラーがでたらログしてそのままつづけるためのものです
中身はこれだけ
かといってできること引数で全部やろうとすると引数定義がすごく複雑になります
例えばこんなのもおっけいです
function fn({opt: {x, y} = {y: 2}, ...z} = {opt: {x: 1}}){
logonerror(e => console.log(opt))
logonerror(e => console.log(x))
logonerror(e => console.log(y))
logonerror(e => console.log(z))
}
logonerror(e => console.log(opt))
logonerror(e => console.log(x))
logonerror(e => console.log(y))
logonerror(e => console.log(z))
}
引数の数が多い関数だともっとすごいことになったこともあります
あまり複雑になるようなら関数内で昔ながらの初期化をしたほうが見やすいかもしれませんね
くいず
ところで↑の関数に対して↓を実行するとそれぞれどうなるでしょうconsole.log("-- fn() ------------------------------")
fn()
console.log("-- fn(1) -----------------------------")
fn(1)
console.log("-- fn({}) ----------------------------")
fn({})
console.log(`-- fn({foo: "bar"}) ------------------`)
fn({foo: "bar"})
console.log("-- fn({opt: null}) -------------------")
fn({opt: null})
console.log("-- fn({opt: {x: 100}}) ---------------")
fn({opt: {x: 100}})
console.log("-- fn({opt: {y: 200}}) ---------------")
fn({opt: {y: 200}})
console.log("-- fn({opt: {x: 100, y: 200}}) -------")
fn({opt: {x: 100, y: 200}})
fn()
console.log("-- fn(1) -----------------------------")
fn(1)
console.log("-- fn({}) ----------------------------")
fn({})
console.log(`-- fn({foo: "bar"}) ------------------`)
fn({foo: "bar"})
console.log("-- fn({opt: null}) -------------------")
fn({opt: null})
console.log("-- fn({opt: {x: 100}}) ---------------")
fn({opt: {x: 100}})
console.log("-- fn({opt: {y: 200}}) ---------------")
fn({opt: {y: 200}})
console.log("-- fn({opt: {x: 100, y: 200}}) -------")
fn({opt: {x: 100, y: 200}})
logonerror は関数実行時にエラーがでたらログしてそのままつづけるためのものです
中身はこれだけ
function logonerror(fn){
try{
return fn()
}catch(err){
console.log(err.message)
}
}
try{
return fn()
}catch(err){
console.log(err.message)
}
}
こたえ
-- fn() ------------------------------
opt is not defined
1
undefined
{}
-- fn(1) -----------------------------
opt is not defined
undefined
2
{}
-- fn({}) ----------------------------
opt is not defined
undefined
2
{}
-- fn({foo: "bar"}) ------------------
opt is not defined
undefined
2
{foo: "bar"}
-- fn({opt: null}) -------------------
Uncaught TypeError: Cannot destructure property `x` of 'undefined' or 'null'.
-- fn({opt: {x: 100}}) ---------------
opt is not defined
100
undefined
{}
-- fn({opt: {y: 200}}) ---------------
opt is not defined
undefined
200
{}
-- fn({opt: {x: 100, y: 200}}) -------
opt is not defined
100
200
{}