
193
7.2 純粋と不純を分離する
ことができる
JavaScript
では、このような問題は非常にやっかいなものです。つま
り、コントロールできる範囲の外のデータに頼るような関数を書くことは、わざわざ
混乱を招くためのレシピと言えます。通常は、予測できない外部条件に頼るテスト関
数を書く場合は、すべてのテストケースはテスト目的のために全く同じ条件を設定す
る必要があります。可能な限り純粋性のルールに則った関数型スタイルは、テストが
より簡単なだけではなく、一般的に理解しやすいプログラムを書くことの一助となり
ます。
7.2
純粋と不純を分離する
そもそも
JavaScript
の
Math.rand
メソッドは純粋関数ではないため、このメソッド
を使用するすべての関数は純粋ではなくなり、多くの場合はテストがより複雑になり
ます。純粋な関数は、入力値とそれに対応する予測出力値のテーブルデータを作成し
てテストします。純粋性を損なう原因となる他の
JavaScript
のメソッドや関数とし
ては、
Date.now
や
console.log
、そして
this
やグローバル変数の使用も同じく原因と
して挙げられます(原因はこれらの他にも存在します)。しかし
JavaScript
は参照で
オブジェクトの受け渡しを行うため、実際には、オブジェクトもしくは配列を引数に
取るすべての関数が純粋性を損う可能性を持っています。本章で後ほど、このような
問題をどのように低減できるかを紹介します。
JavaScript
は決して完全な純粋性を持
つことはありませんが(そして我々もそれを必要としません) ...