次の方法で共有


概念と用語 (関数型変換) (LINQ to XML)

この記事では、純粋関数型変換の概念と用語について説明します。 データ変換に対する関数型変換アプローチでは、多くの場合、従来の命令型プログラミングよりもプログラミングが速く、表現力が高く、デバッグと保守が容易なコードが生成されます。

このセクションの記事は、関数型プログラミングを完全に説明するためのものではありません。 代わりに、これらの記事では、XML を 1 つの図形から別の図形に簡単に変換できるようにする関数型プログラミング機能の一部を特定します。

純粋関数型変換とは

純粋関数型変換では、純粋関数と呼ばれる関数のセットで、構造化データのセットを元の形式から別の形式に変換する方法を定義します。 "pure" という単語は、関数が 構成可能であることを示します。そのためには、次のものが必要です。

  • 自己完結型。プログラムの残りの部分とエンタングルメントや相互依存関係を持たずに自由に順序付けおよび再配置できるようにします。 純粋な変換には、その環境に関する知識も影響もありません。 つまり、変換で使用される関数には 副作用はありません。
  • ステートレス。同じ入力で同じ関数または特定の関数セットを実行すると、常に同じ出力になります。 純粋な変換には、以前の使用のメモリがありません。

Von Bedeutung

このチュートリアルの残りの部分では、"純粋関数" という用語は、特定の言語機能ではなく、プログラミングアプローチを示すために一般的な意味で使用されます。

純粋関数は C# のメソッドとして、Visual Basic では関数として実装する必要があることに注意してください。

純粋関数を C++ の純粋仮想メソッドと混同しないでください。 後者は、包含クラスが抽象であり、メソッド本体が指定されていないことを示します。

関数型プログラミング

関数型プログラミング は、純粋な関数型変換を直接サポートするプログラミング アプローチです。

従来、ML、Scheme、Haskell、F# などの汎用関数型プログラミング言語は、主に学術界にとって関心を持っています。 C# と Visual Basic で純粋な関数型変換を記述することは常に可能でしたが、これを行うのが難しいため、ほとんどのプログラマにとって魅力的な選択肢ではありません。 ただし、これらの言語の最近のバージョンでは、ラムダ式や型推論などの新しい言語コンストラクトにより、関数型プログラミングがはるかに簡単になり、生産性が向上します。

関数型プログラミングの詳細については、「 関数型プログラミングと命令型プログラミング」を参照してください。

ドメイン固有の関数型プログラミング言語

一般的な関数型プログラミング言語は広く採用されていませんが、一部のドメイン固有の関数型プログラミング言語の方が成功しています。 たとえば、カスケード スタイル シート (CSS) は多くの Web ページの外観を決定するために使用され、拡張スタイルシート言語変換 (XSLT) スタイル シートは XML データ操作で広く使用されます。 XSLT について詳しくは、「XSLT 変換」をご覧ください。

用語

次の一覧では、関数型変換に関連するいくつかの用語を定義します。

上位 (ファーストクラス) 関数
プログラム オブジェクトとして扱うことができる関数。 たとえば、上位の関数を他の関数に渡したり、他の関数から返したりすることができます。 C# と Visual Basic では、デリゲートとラムダ式は上位の関数をサポートする言語機能です。 上位の関数を記述するには、デリゲートを受け取る 1 つ以上の引数を宣言します。多くの場合、ラムダ式を呼び出すときに使用します。 標準クエリ演算子の多くは、上位の関数です。

詳細については、「 標準クエリ演算子の概要 (C#) 」および 「標準クエリ演算子の概要 (Visual Basic)」を参照してください。

ラムダ式
基本的には、デリゲート型が必要な場所であればどこでも使用できるインライン匿名関数です。 これはラムダ式の簡略化された定義ですが、このチュートリアルでは適切です。

詳細については、「 ラムダ式 (C# プログラミング ガイド) 」および 「ラムダ式 (Visual Basic)」を参照してください。

徴収
通常は均一型の構造化されたデータ セット。 LINQ と互換性を持つには、コレクションで、 IEnumerable インターフェイスまたは IQueryable インターフェイス (またはその一般的な対応する一般的なインターフェイス、 IEnumerator<T> 、または IQueryable<T>) を実装する必要があります。

tuple (匿名型)
数学的概念であるタプルは、オブジェクトの有限シーケンスであり、それぞれが特定の型です。 タプルは、順序付きリストとも呼ばれます。 匿名型は、名前のないクラス型を宣言し、その型のオブジェクトを同時にインスタンス化できるようにする、この概念の言語実装です。

詳細については、「 匿名型 (C# プログラミング ガイド) 」および 「匿名型 (Visual Basic)」を参照してください。

型推論 (暗黙的な型指定)
明示的な型宣言がない場合に変数の型を判断するコンパイラの機能。

詳細については、「 暗黙的に型指定されたローカル変数 (C# プログラミング ガイド) 」と 「ローカル型推論 (Visual Basic)」を参照してください。

遅延実行と遅延評価
解決された値が実際に必要になるまで、式の評価の遅延。 遅延実行はコレクションでサポートされています。

C# の詳細については、「 LINQ クエリの概要 (C#) 」および「 LINQ to XML での遅延実行と遅延評価 (C#)」を参照してください。

Visual Basic の詳細については、LINQ to XML (Visual Basic) での基本的なクエリ操作 (Visual Basic)と遅延実行と遅延評価に関する説明を参照してください。

これらの言語機能は、このセクション全体のコード サンプルで使用されます。

こちらも参照ください