「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Effect-TS のフィルタリング オプション: 実践ガイド

Effect-TS のフィルタリング オプション: 実践ガイド

2024 年 11 月 6 日に公開
ブラウズ:208

Filtering Options in Effect-TS: A Practical Guide

Effect-TS は、オプション内の値をフィルターするさまざまなメソッドを提供し、オプションの値に変換、述語、またはチェックを適用できるようにします。これらの関数は、None 値や指定された条件を満たさない値を破棄しながら、関連するデータのみを確実に保持するのに役立ちます。この記事では、オプションをフィルタリングするための 4 つの主要な関数、O.partitionMap、O.filterMap、O.filter、および O.exists.

について説明します。

例 1: O.partitionMap を使用したオプションのパーティション化

コンセプト

O.partitionMap 関数を使用すると、Either を返すマッピング関数に基づいて、オプションを 2 つのオプションのタプルに分割できます。 Each.left 値は最初のオプションに分割され、Either.right 値は 2 番目のオプションに分割されます。元のオプションが None の場合、両方のパーティションは None になります。

コード

function filtering_ex01() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const toEither = (n: number) => (n % 2 === 0 ? E.left(n) : E.right(n));

  console.log(pipe(some, O.partitionMap(toEither))); // Output: [None, Some(1)] (1 is odd, so it goes to the right)
  console.log(pipe(none, O.partitionMap(toEither))); // Output: [None, None] (since the Option is None)
}

説明

  • pipe(some, O.partitionMap(toEither)): 1 は奇数であるため、toEither 関数は E.right(1) を返し、2 番目のオプションに 1 を入れます。結果は [None, Some(1) ].
  • pipe(none, O.partitionMap(toEither)): 元の Option が None であるため、両方のパーティションが None となり、[None, None] となります。

この関数は、値を 2 つのグループ (条件を満たすグループと満たさないグループ) に分けながら分類するマッピングを適用する必要がある場合に便利です。

例 2: O.filterMap を使用したマッピングとフィルタリング

コンセプト

O.filterMap 関数は、Option 内の値に変換関数を適用します。関数が Some を返した場合、値は保持されます。 None が返された場合、値はフィルターで除外されます。元のオプションが None の場合、結果は None のままになります。

コード

function filtering_ex02() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const toEven = (n: number) => (n % 2 === 0 ? O.some(n) : O.none());

  console.log(pipe(some, O.filterMap(toEven))); // Output: None (since 1 is not even)
  console.log(pipe(O.some(2), O.filterMap(toEven))); // Output: Some(2) (since 2 is even)
  console.log(pipe(none, O.filterMap(toEven))); // Output: None (since the original Option is None)
}

説明

  • pipe(some, O.filterMap(toEven)): 1 は偶数ではないため、toEven 関数は None を返し、結果は None になります。
  • pipe(O.some(2), O.filterMap(toEven)): 値 2 は偶数であるため、toEven 関数は Some(2) を返し、結果は Some(2).
  • pipe(none, O.filterMap(toEven)): 元の Option が None であるため、結果は None のままです。

この関数は、特定の条件に基づいてオプション内の値を変換およびフィルター処理する場合に役立ちます。

例 3: O.filter を使用した述語によるオプションのフィルター処理

コンセプト

O.filter 関数は、オプション内の値が指定された述語を満たすかどうかをチェックします。述語が満たされる場合、元のオプションを返します。それ以外の場合は、None を返します。元のオプションが None の場合、None のままになります。

コード

function filtering_ex03() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const isEven = (n: number) => n % 2 === 0;

  console.log(pipe(some, O.filter(isEven))); // Output: None (since 1 is not even)
  console.log(pipe(O.some(2), O.filter(isEven))); // Output: Some(2) (since 2 is even)
  console.log(pipe(none, O.filter(isEven))); // Output: None (since the original Option is None)
}

例 4: O.exists を使用した述語のチェック

コンセプト

O.exists 関数は、Option 内の値が述語を満たすかどうかをチェックし、述語を満たす場合は true、満たさない場合は false を返します。 Option が None の場合、false を返します。

コード

function filtering_ex04() {
  const some = O.some(1); // Create an Option containing the value 1
  const none = O.none(); // Create an Option representing no value
  const isEven = (n: number) => n % 2 === 0;

  console.log(pipe(some, O.exists(isEven))); // Output: false (since 1 is not even)
  console.log(pipe(O.some(2), O.exists(isEven))); // Output: true (since 2 is even)
  console.log(pipe(none, O.exists(isEven))); // Output: false (since the original Option is None)
}

説明

  • pipe(some, O.exists(isEven)): 1 が偶数ではないため、述語が満たされないため、結果は false になります。
  • pipe(O.some(2), O.exists(isEven)): 値 2 は述語を満たすため、結果は true になります。
  • pipe(none, O.exists(isEven)): Option が None であるため、結果は false になります。

この関数は、オプション自体を変換またはフィルタリングせずに、オプション内の値が条件を満たすかどうかを簡単に確認する必要がある場合に便利です。

結論

Effect-TS の

フィルタリング オプションを使用すると、条件または変換に基づいてオプションの値を柔軟に処理できます。 O.partitionMap で値を分割する場合でも、O.filterMap で変換を適用する場合でも、O.filter で述語をチェックする場合でも、単に O.exists で条件を検証する場合でも、これらのツールはオプションの処理方法を制御するための堅牢な方法を提供します。これらの関数を使用すると、オプションのデータを効率的に管理し、関連する値のみを保持または処理することができます。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/almaclaine/filtering-options-in-effect-ts-a-practical-guide-96l?1 侵害がある場合は、削除するために[email protected]に連絡してください。それ
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3