🍛 一体何をしているのかジャバスクリプト


私は、あなたが唾液を吸っているということを知っています、多分、devの世界はJamstackであまりにおいしくなりました、そして、現在、私はカレーについて話しています?だから、あなたがdevの世界のこれらの驚異で死んで餓死する前に、私はあなたが一般的にどのようなものであるかを紹介しましょう.
後に名前を挙げたHaskell Curry , 基本的には、複数のパラメータを取り、1つのパラメータだけを取り、次のパラメータをとる関数を返す関数に変換する関数をとります.
CurryingはJavaScriptの特定ではない、それはまた、数学のようなものですfunction (良いol ' f ( x ) ?)
// Not curried
const add = (x, y) => x + y

// Curried
const add = x => y => x + y
const addFive = add(5)
addFive(6) // 11
Curryingを使用して見ることができるように、私たちは、彼らがすることでより明確である機能を持つことができました.
Curryingの助けを借りて、私たちは本質的にそれらの引数を覚えている新しい機能を受け取るために引数で関数をプレロードすることができます.
他の関数を使う際に役立つ関数を作りましょう.
今すぐ注意深く支払う.
この関数は関数fn 関数を返す$curry これは単一の引数を取り、関数の操作を行いますfn .
一歩一歩しましょう
// This function takes a function `fn` as a parameter.
function curry(fn) {
  // Let us determine the arity of `fn`
  // Arity is the number of parameter taken by `fn`
  const arity = fn.length

  // ...
}
function curry(fn) {
  const arity = fn.length

  // Let's return the $curry function.
  // Let's have all the arguments ( ...args ) being passed in $curry
  // Remember we are returning a function so we can pass args in it.
  return function $curry(...args) {
    // ...
  }
}
function curry(fn) {
  const arity = fn.length
  return function $curry(...args) {
    // Let's return the function with all the passed arguments.
    // This code maybe stupid until you read the next para...
    return $curry.bind(null, ...args)

    // ...
  }
}
我々は、結果を必要とする関数と関数を維持し続けることはできません.一緒に数字を追加し、出力を取得してみましょう.
これに条件を加えましょう.
function curry(fn) {
  const arity = fn.length
  return function $curry(...args) {
    if (args.length < arity) {
      return $curry.bind(null, ...args)
    }
    return fn.call(null, ...args)
  }
}
引数の長さを比較することによってargs.length 関数の引数がどれだけ渡されたかを知ることができます.
私たちがどのように使用しているかを示すように、物事はより明確になりますcurry 機能は、複数のパラメータを取る他の機能をカレーに.
簡単にしてあげましょうadd 関数は、3つの値を取ると一緒に追加します.
const add = (x, y, z) => x + y + z

const curriedAdd = curry(add)

const addFive = curriedAdd(5) // args.length = 1

const addFiveAndSix = addFive(6) // args.length = 2

const output = addFiveAndSix(8) // args.length = 3

// The funciton can be called now as `args.length` < arity is false.
console.log(output) // 19
args.length のための引数の数を与えることができますreturn $curry.bind(null, ...args) . The $curry 関数は、与えられたインスタンスの上に渡された全ての引数を含む.
私は、これが機能が働いている方法についてのすべてをクリアすることを望みます.あなたが他の疑いを持っているならば、あなたは私に彼らをさえずることができます.
(@ )

あなたのコードに味を加えること.
Curryingは、部分的なアプリケーションと呼ばれる素晴らしい現象を許します.
ウィキペディアによると、部分的なアプリケーションとして定義することができます

Partial Application refers to the process of fixing a number of arguments to a function, producing another function of smaller arity.


定義は非常に簡単です、私たちは関数がそれを代入することによって取るパラメータの数を減らします.
ましょうcurry 周知の機能map そして、それが我々の人生を変える方法を見てください.
// Before Currying
const allTheChildren = elements => map(elements, getChildren)

// Let's curry map
const map = curry((fn, f) => f.map(fn))

// AFter Currying
const allTheChildren = map(getChildren)
効果は本当にあなたが使用しているときに明らかになりますmap 複数回.そして、それは我々がBoilerplateコードのトンを減らす方法です.
あなたは1つ以上のパラメータを取る任意の関数をかなりカレーをすることができます.と部分的なアプリケーションを使用します.
それは驚くべきではないか.私は、それをエキサイティングに共有することを発見した初心者ですが.何かを共有したり質問をしたり、解決したり、一緒に何かを理解したい場合は、Twitterで私をフックすることができます.私はインターネットにいます.
私はTwitterで私は機能的なプログラミングと私のExperinceについてつぶやき私に従ってください.