Swift での関数合成の簡単な紹介
プログラマーは毎日関数に遭遇します。関数は特別なタイプの関係を表します。関数が受け取るすべての入力値は、何らかの出力値に関連付けられています。したがって、より一般的に言えば、関数は、いくつかの入力値を 1 つの出力値にマップする規則です。
関数合成の背後にある基本的な考え方は、ある関数を別の関数の結果に適用することです。つまり、関数を 1 つの関数に結合するという数学的な概念です。
はじめに
数学的概念と一緒に議論しましょう。上の図では、「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 乗配列にしたいとします。そのため、通常は以下のような関数を実装します:
このコードは正しい出力を提供しますが、ご覧のとおり、コードの可読性は高くありません。また、関数の呼び出し順序は私たちが望んでいるものとは逆のように見え、一部の新しいプログラマーにとって混乱を招く可能性があります。このコード ブロックは分析が困難です。
したがって、上記の問題のすべてから私たちを救う関数合成がここにあります。ジェネリック、クロージャ、および中置演算子を利用することで、関数合成を実現できます。
それでは、上記のコード ブロックで何が起こっているか見てみましょう:
<オール>left : (T) -> U right: (U) -> V
Output Type: (T) -> V
関数構成の数学的表現を理解すれば、Swift の実装とまったく同じであることがわかります。
6. 関数本体では、左パラメーターの右パラメーターの結果を返します。
同じ結果 (一意の偶数の整数の 2 乗配列) が必要な場合は、関数合成を使用してこれを行うことができます。
同じ結果を返す一連の関数です。関数の順序は、人間が考えているものと似ています。読みやすさが向上し、誰にとっても理解しやすくなっています。
読んでくれてありがとう!
-
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
-
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