iPhone
 Computer >> コンピューター >  >> スマートフォン >> iPhone

Swift での関数合成の簡単な紹介

プログラマーは毎日関数に遭遇します。関数は特別なタイプの関係を表します。関数が受け取るすべての入力値は、何らかの出力値に関連付けられています。したがって、より一般的に言えば、関数は、いくつかの入力値を 1 つの出力値にマップする規則です。

関数合成の背後にある基本的な考え方は、ある関数を別の関数の結果に適用することです。つまり、関数を 1 つの関数に結合するという数学的な概念です。

Swift での関数合成の簡単な紹介
関数構成

はじめに

数学的概念と一緒に議論しましょう。上の図では、「f」と「g」が 2 つの関数です。関数は次のように表すことができます:

f: A -> Bg: B -> C

この 2 つの関数を合成すると、「g o of」と表すことができます (g of f と言えます)。

(g o f): A -> C such that (g o f)(a) = g(f(a)) for all a in A

簡単な例で詳しく見てみましょう:

Let f(a) = 2a + 3 & g(a) = 3a + 5, then function composition
(g o f)(a) = g(f(a)) = 3(f(a)) + 5 = 3(2a + 3) + 5 = 6a + 14

この概念は数学だけでなく、プログラミング言語にも適用できます。これらの言語は関数型プログラミング言語と呼ばれます。この概念を理解すると、コードの可読性が向上し、他のプログラマーにとって理解しやすくなります。

関数型プログラミング言語としての Swift の紹介

さて、良いニュースは、swift が関数型プログラミング言語でもあるということです。 Swift プログラミングでは、関数が最も重要な役割を担っているため、毎日それらと対話します。 Swift 関数は値を返すことができ、返された値を別の関数への入力として使用できます。これは一般的なプログラミング方法です。

swift での関数合成の実装

整数の配列があり、出力を一意の偶数の整数の 2 乗配列にしたいとします。そのため、通常は以下のような関数を実装します:

このコードは正しい出力を提供しますが、ご覧のとおり、コードの可読性は高くありません。また、関数の呼び出し順序は私たちが望んでいるものとは逆のように見え、一部の新しいプログラマーにとって混乱を招く可能性があります。このコード ブロックは分析が困難です。

したがって、上記の問題のすべてから私たちを救う関数合成がここにあります。ジェネリック、クロージャ、および中置演算子を利用することで、関数合成を実現できます。

それでは、上記のコード ブロックで何が起こっているか見てみましょう:

<オール>
  • カスタム中置演算子「>>>」を宣言しました。 + 演算子と同じように結合性と優先順位を残しています。
  • 中置演算子の名前と同じ名前の関数を宣言しました。この関数は、T、U、V の 3 つのジェネリックを使用し、入力パラメーターとして 2 つのクロージャーを受け取ります。
  • 左のパラメーターはクロージャーであり、T 型の入力を受け取り、U 型の出力を返します。
  • 右側のパラメーターもクロージャーであり、U 型の入力を受け取り、V 型の出力を返します。
  • ここで、>>> 関数は、(T) → V の型を持つ関数またはクロージャを返します。出力クロージャは、型 T の入力を取り、型 V の出力を返します。ここで、左の出力パラメータは正しいパラメータの入力です。
  • left :  (T) -> U right: (U) -> V
    Output Type: (T) -> V

    関数構成の数学的表現を理解すれば、Swift の実装とまったく同じであることがわかります。

    6. 関数本体では、左パラメーターの右パラメーターの結果を返します。

    同じ結果 (一意の偶数の整数の 2 乗配列) が必要な場合は、関数合成を使用してこれを行うことができます。

    同じ結果を返す一連の関数です。関数の順序は、人間が考えているものと似ています。読みやすさが向上し、誰にとっても理解しやすくなっています。

    読んでくれてありがとう!


    1. CSS rgba()関数

      rgba()は、赤、緑、青、およびアルファのRGBAカラー値を定義します。アルファは色の不透明度、つまり0.0から1.0の間の数値です。ここで、1.0は完全に不透明になります。 例 rgba()関数を実装する例を見てみましょう- <!DOCTYPE html> <html> <head> <style> #demo1 {background-color: hsla(140, 100%, 50%, 0.8);} #demo2 {background-color: hsla(130, 100%, 50%, 0.6);} #demo3 {backgr

    2. Cのfillpoly()関数

      コンセプト ヘッダーファイルgraphics.hには、三角形、長方形、五角形、六角形などのポリゴンを描画して塗りつぶすために実装されたfillpoly()関数が含まれています。したがって、この関数にはdrawpoly()と同じ引数が必要です。 構文 void fillpoly( int number, int *polypoints ); この場合、numberは(n + 1)点の数を示します。ここで、nはポリゴン内の頂点の数であり、polypointsは(n * 2)整数のシーケンスを指します。 入力 arr[] = {320, 150, 400, 250, 250, 350, 32