1. ホーム
  2. javascript

[解決済み] Math.random()を呼び出す関数は純粋か?

2022-05-17 22:41:08

質問

以下のものは純粋関数でしょうか?

function test(min,max) {
   return  Math.random() * (max - min) + min;
}

私の理解では、純粋な関数はこれらの条件に従うと思います。

  1. パラメータから計算された値を返す
  2. 戻り値を計算する以外の仕事はしない

この定義が正しいのであれば、私の関数は純粋関数なのでしょうか?それとも、純粋な関数を定義するものに対する私の理解が正しくないのでしょうか?

どのように解決するのですか?

いいえ、そうではありません。同じ入力を与えても、この関数は異なる値を返します。そして、入力と出力を対応させる「表」を作ることができません。

のWikipedia記事より 純粋関数 :

この関数は、同じ引数値が与えられると常に同じ結果値を評価します。 を評価します。関数の結果値は、プログラムの実行中に変化する可能性のある プログラムの実行中に変化する可能性のある隠された情報や状態に依存することはできません。 また、I/Oデバイスからの外部入力に依存することはできません。 また、I/Oデバイスからの外部入力に依存することもできません。

また、もうひとつ、純粋な関数は、以下の説明のように、入力と出力の対応を表すテーブルに置き換えることができます。 このスレッド .

この関数を書き換えて純粋な関数にしたい場合は、ランダムな値も引数として渡す必要があります

function test(random, min, max) {
   return random * (max - min) + min;
}

というように呼び出します(例:2と5をminとmaxとした場合)。

test( Math.random(), 2, 5)