ホームページ ウェブフロントエンド jsチュートリアル javascript_javascript スキルにおける典型的な高階関数アプリケーションの紹介

javascript_javascript スキルにおける典型的な高階関数アプリケーションの紹介

May 16, 2016 pm 05:43 PM
高次関数

理由
私はこれまで JavaScript 言語を使用したことがありましたが、結局のところ、それは JavaScript プロジェクトどころか、バックエンドと連携するために書かれたいくつかの散在する「コード スニペット」のためでした。先月この会社に着任したばかりで、私たちのチームは以前のバージョンを改善し、それを超えるという非常に明確な目的を持って、アーキテクチャと実装をゼロから開始しました。これは実際の JavaScript の「プロジェクト」です。もちろん、私たちのチームはサーバー側の責任を負いません。私が本格的に JavaScript でプログラミングを本格的に始めたのもこの頃です。学校では形式手法に興味があり、JavaScript は関数型言語なので、JavaScript を使ってより関数的なものを表現したいと考えていました。

いくつかの関数
これらのメソッドはすべて、JavaScript 1.6 配列の新しいメソッドです。非常に典型的な機能であり、もちろん実用性も非常に高いです。次の関数の定義は JavaScript からのものではありません。

filter: セット Xs (X は型を表し、s はセットを表します) と述語を受け入れます。この述語は X から bool へのマッピング (関数) です。次に、このセットをフィルターし、述語が true である要素のセットを返します。以下は簡単な実装です:

コードをコピー コードは次のとおりです:

関数フィルター(arr,callback ){
var i,out=[];
for(i=0;iif(callback(arr[i]))
out.push (arr[i]);
}
return out
}

簡単なテストを追加します:
コードをコピーします コードは次のとおりです:

var arr = [1,2,3,4,5,6,7,8, 9,10];
var Even = function(item){
if(typeof item !== "number") return
return !(item & 1); 🎜>var filtered = filter(arr,even);
console.log(filtered);


結果:
2,4,6,8,10
マップ:セット Xs、関数 f を受け入れ、f を使用して Xs セット内の各要素を順番にマップし、セット f x1、f x2、f x3... f xn を返します。実装は次のとおりです。


function map( arr,callback){
var i,l= arr && arr.length || 0,out = new Array(l);
for(i=0;iout[ i]=callback(arr [i]);
return out
}


コードをコピーします。


コードは次のとおりです。 11,12,13,14,15,16,17,18,19,20
さらに、JavaScript 1.6 で登場した forEach、every、some という 3 つの関数があります。 。しかし、使っているうちに、まだ強力な機能が欠けていると感じます。それが、折り畳み機能です。 「map-reduce」ということわざがあるように、「reduce」のないマップがあるのは残念ではないでしょうか。この「減らす」について考えてみましょう。


Reduce の実装

上記の Reduce は、実際にはfold 関数 (fold) です。 X のセットと二項演算子 f を受け入れます。次に、セット内の隣接する 2 つの要素ごとに f が挿入されます。たとえば、fold plus [1,2,3,4] は 1 2 3 4 を意味します。より正確には、「開始要素」は通常、f の先頭の 2 番目のパラメーターとして必要です。たとえば、fold plus [1,2,3,4] は (1 (2 (3 (4 0))) を意味します。実装は次のとおりです:



Copy code


コードは次のとおりです。 x=b,i= 0; else x=arr[0],i=1; for(;ix=callback(arr[i],x) );
return x;
コードをコピーします


コードは次のとおりです:


var arr = [1,2,3,4,5,6,7,8,9,10];
var plus = function(a,b) ){
戻り値
};
var フォールドプラス = 折り畳み(arr,plus,0);
結果:
55

この関数は ECMAScript 5 ではreduce と呼ばれますが、関数式では通常、fold と呼ばれます。これは非常に鮮やかな名前です。
まとめ
実は、JavaScript 言語にはループ文があるため、上記の関数関数を実装する際の書き方は機能的ではありません。ループ文がない場合はどうなるでしょうか?次の探索に任せてください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPで関数型プログラミングを行う方法 PHPで関数型プログラミングを行う方法 Jun 06, 2023 am 08:21 AM

PHP は広く使用されているサーバーサイド言語であり、多くの Web 開発者が PHP の使用を好む理由の 1 つは、その豊富な関数ライブラリとシンプルで使いやすい関数構文です。関数型プログラミングは、データと動作を適切にカプセル化し、コードをよりモジュール化し、保守とテストを容易にするプログラミング パラダイムです。この記事では、PHPを使った関数型プログラミングの方法を紹介します。関数型プログラミングの基本 関数型プログラミングの中心的な考え方は、関数を第一級市民として扱うことです。関数自体は、変数のように渡したり、返したり、構成したりできます。

Python で高階関数を作成するにはどうすればよいですか? Python で高階関数を作成するにはどうすればよいですか? Sep 05, 2023 pm 07:29 PM

Python では、別の関数を引数として受け取る関数、または関数を出力として返す関数を高階関数と呼びます。その機能を見てみましょう - 関数は変数に格納できます。この関数はパラメータとして別の関数に渡すことができます。高階関数はリスト、ハッシュ テーブルなどの形式で保存できます。関数は関数から返すことができます。いくつかの例を見てみましょう - オブジェクトとしての関数 Example の中国語訳は次のとおりです。 Example この例では、これらの関数はオブジェクトとして扱われます。ここでは、関数demo()が変数に割り当てられています - #Creatingafunctiondefdemo(mystr):returnmystr.swapcase()#swappingthecase

Python の高階関数とは何ですか? Python の高階関数とは何ですか? Nov 10, 2023 pm 04:42 PM

高階関数には、map()、filter()、reduce()、lambda 関数、partial() などが含まれます。詳細な紹介: 1. map(): この組み込み関数は、関数と 1 つ以上の反復可能オブジェクトを入力として受け取り、入力関数を反復可能オブジェクトの各要素に適用する反復子を返します。 2. filter():この組み込み関数は、関数と反復可能なオブジェクトを入力として受け取り、入力関数が True などを返す要素を生成する反復子を返します。

PHP アロー関数: 高階関数へのネストされた呼び出しを処理する方法 PHP アロー関数: 高階関数へのネストされた呼び出しを処理する方法 Sep 13, 2023 am 08:27 AM

PHP アロー関数: 高階関数のネストされた呼び出しを処理する方法、具体的なコード例が必要 はじめに: PHP7.4 バージョンでは、アロー関数 (arrowfunction) の概念が導入されました。高階関数へのネストされた呼び出し。この記事では、アロー関数の基本的な使用法を紹介し、具体的なコード例を通じて高階関数の入れ子になった呼び出しを処理する方法を示します。 1. アロー関数とは何ですか?アロー関数は、PHP7.4バージョンで導入された新機能です。

Python の高階関数 Python の高階関数 Sep 13, 2023 pm 06:53 PM

Python の高階関数の世界の紹介 Python プログラミング スキルを向上させ、より表現力豊かで効率的なコードを生成したい場合は、ここが正しい場所です。 Python の関数は、単なる特殊なコード ブロックではありません。また、移動、転送、さらには動的に生成できる強力なものでもあります。高次関数は、他の関数を処理することでこの汎用性を高めます。この記事では、高階関数の原理について詳しく説明します。最高級のオブジェクトとしてのプロセスの基本を探り、高階関数の実際の例を詳しく調べ、明確で美しいコードを実現するラムダ関数の力を奨励します。関数型プログラミング モデルと、Python で使用する場合のその利点についても説明します。この記事を読むと、高階関数をしっかりと理解し、

Golangにおける高階関数の応用シナリオの分析 Golangにおける高階関数の応用シナリオの分析 May 17, 2023 pm 05:40 PM

Golang 言語の人気と発展に伴い、関数型プログラミングのアイデアを使用しようとする開発者がますます増えています。 Golang の高階関数は関数型プログラミングに大きな利便性をもたらし、実際の開発で広く使用されています。では、Golang における高階関数の応用シナリオにはどのようなものがあるのでしょうか?次にこれを分析していきます。関数のパラメータと戻り値の処理 Golang では、関数を他の関数のパラメータや戻り値として使用できます。これは、関数をパラメータとして別の関数に渡すことができることを意味します。

PHPで関数型プログラミングを行う方法 PHPで関数型プログラミングを行う方法 Jun 06, 2023 am 08:21 AM

PHP は広く使用されているサーバーサイド言語であり、多くの Web 開発者が PHP の使用を好む理由の 1 つは、その豊富な関数ライブラリとシンプルで使いやすい関数構文です。関数型プログラミングは、データと動作を適切にカプセル化し、コードをよりモジュール化し、保守とテストを容易にするプログラミング パラダイムです。この記事では、PHPを使った関数型プログラミングの方法を紹介します。関数型プログラミングの基本 関数型プログラミングの中心的な考え方は、関数を第一級市民として扱うことです。関数自体は、変数のように渡したり、返したり、構成したりできます。

Python の高階関数を理解するのに役立つ記事 Python の高階関数を理解するのに役立つ記事 Jul 25, 2023 pm 04:07 PM

高階関数とは Python では非常に便利な関数関数で、別の関数をパラメータとして受け取ることができる関数のことを高階関数と呼びます。

See all articles