コンピューター サイエンスでは、関数型プログラミングは、計算を数学関数の評価として扱い、状態データや可変データを回避するプログラミング パラダイムです。
http://en.wikipedia.org/wiki/Functional_programming
状態データと可変データとは何か説明できますか? JAVA または JavaScript の例を教えてください。
コンピューター サイエンスでは、関数型プログラミングは、計算を数学関数の評価として扱い、状態データや可変データを回避するプログラミング パラダイムです。
http://en.wikipedia.org/wiki/Functional_programming
状態データと可変データとは何か説明できますか? JAVA または JavaScript の例を教えてください。
mutable 変更可能なもの、つまり int を提案します
int a = 0;
System.out.prtinln(a); //prints 0
a = 2;
System.out.prtinln(a); //now prints 2, so its mutable
Java では、文字列は不変です。文字列値の参照だけを変更することはできません。
String s1 = "Hello";
System.out.println(s1); //prints Hello
String s2 = s1;
s1 = "Hi";
System.out.println(s2); //prints "Hello" and not "Hi"
状態は、クラスのインスタンス (オブジェクト) が持つものです。
オブジェクトがその属性に特定の値を持っている場合、異なる状態にあり、異なる属性値を持つ同じクラスの別のオブジェクト
状態は、オブジェクトの現在のプロパティを決定する、オブジェクトに格納されているデータを集合的に参照します。たとえば、BankAccount
オブジェクトがある場合、アカウントの所有者とその中の金額がアカウントの状態を表します。
ただし、すべての状態が関数型プログラミングにとって悪いわけではありません。ミュータブル+ 1 のみが受け入れられません。たとえば、文字列を構成する文字は、その文字列の状態です。文字列の内容を変更できない場合は、不変の状態にあると言われます。これは、関数型プログラミングのパラダイムにうまく適合します。
可変状態とは、同じ引数で呼び出されたにもかかわらず、関数が異なる値を返すようにするすべてのものです。
Java での簡単な例:
public static double badSqrt(double x) {
double r = Math.sqrt(x);
if (System.currentTimeMillis() % 42L == 0L) return r;
return r + 0.000000001;
}
この関数は、わずかに間違った結果を計算することがあります。badSqrt
その結果はその引数 (および定数) だけに依存するわけではないため、これは不純であると言います。
通常、badSqrt() や不純な関数の呼び出しを含むプログラムをデバッグする人にとって、これは悪夢です。多くの場合、プログラムは機能しているように見えますが、たまに間違った結果が返されることがあります。関数が明確に文書化されているか、ソース コードが利用可能でない限り、バグを追跡するのは困難です。
このような場合、関数の動作はミュータブルな状態に依存すると言われています。これは、プログラムのまったく無関係な部分によって、または例のように別のプログラム (オペレーティング システム) によって変更 (変異) される可能性がある状態です。
int i=5 とします。
これで、変数 i の状態は になり、値 5 が含まれるようになりました。
ここで i=7 に設定したとします。
これで、変数 i の状態は になり、値 7 が含まれ、5 が置換されました。
値の変更が可能な場合は as-mutable と呼ばれ、ここで状態を変更できることを意味します。
値の変更が不可能な場合、それは as-immutable と呼ばれます。