院卒新人サラリーマンのメモ代わり

備忘としてのメモを記載

カリー化

カリー化とは
「引数を複数受け取る関数」を「引数を段階的に受け取る関数」に分解する

let add = (n, m) => {
  return n + m
}

let addCurry = n => {
  return m => {
    return n + m
  }
}

//呼び出し方
add(3,4)
addCurry(3)(4)

これだけだとあんまり利点を感じないがmapとかで大切

// 配列の要素をn倍する関数
let arr = [1, 2, 3, 4]
let n = 3

// ダメな例
let sub1 = (n, el) => {
  return el * n
}
arr.map(sub1(n)) //これは呼べない
arr.map(sub1) // こんなふうにしたら(el,idx)が渡されちゃう

// カリー化すると
let sub2 = n => {
  return el => {
    return el * n
  }
}
arr.map(sub2(n)) //これは期待どおり動く

ちなみにReasonMlでは自動でカリー化してくれるからsub1のままでも動くはず