JavaScriptでは、レンズは関数型プログラミングの概念のひとつで、データへのアクセスと変更を、モジュール化された不変の方法で行えるようにしてくれます。レンズは要するに、オブジェクト内の特定のフィールドに注目する、純粋なゲッター関数とセッター関数の組み合わせ可能なペアです。
レンズを使うと、コードを簡潔にし、再利用しやすくし、よくあるプログラミングの間違いを避けることができます。たとえば、レンズは次のようなことに使えます。
レンズを使って、入れ子のレコードを更新します(イミュータブルなデータを扱うプログラミング言語向け)。
入れ子になったイミュータブルなレコードのフィールドを更新するのは、なかなか面倒です。 こうした場合のコードは、構造が深くなるほど煩雑になります。 たとえば、Personの中にAddressがあり、そのAddressにStreetがあり、さらにそのStreetにNumberがあるとします。このNumberを更新するには、新しいNumberを持つStreetを新しく作り、次にその新しいStreetを持つAddressを新しく作り、最後にその新しいAddressを持つPersonを新しく作る必要があります。 もう混乱してきましたか?
この問題を解決する方法の1つが、レンズを使うことです。
レンズを使って、レコードにアクセスする関数をいくつか実装してみましょう。 テストスイートは、レンズをまったく使わないやり方にも対応しているので、別のアプローチを試すこともできます。
Exercismに登録すれば、37個のコンセプト159個の演習、そして本物の人間によるメンタリングとともに、JavaScriptを学んでマスターできます。すべて無料です。