」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Effect-TS 中的壓縮選項:實用指南

Effect-TS 中的壓縮選項:實用指南

發佈於2024-11-07
瀏覽:916

Zipping Options in Effect-TS: A Practical Guide

Effect-TS 中的壓縮選項:實用指南

在函數式程式設計中,以安全且可預測的方式組合多個可選值(表示為選項)是一項常見任務。 Effect-TS 提供了多種將選項「壓縮」在一起的方法,讓您可以組合它們的值或根據特定規則選擇一個。在本文中,我們將探討壓縮選項的三個關鍵函數:O.zipRight、O.zipLeft 和 O.zipWith。

範例 1:使用 O.zipRight 傳回第二個選項

概念

O.zipRight 函數可讓您組合兩個選項,丟棄第一個並傳回第二個。如果兩個選項均為 Some,則此操作成功;否則,傳回 None。

程式碼

function zipping_ex01() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(pipe(some1, O.zipRight(some2))); // Output: Some(2) (returns the second Option)
  console.log(pipe(some1, O.zipRight(none))); // Output: None (since the second Option is None)
  console.log(pipe(none, O.zipRight(some2))); // Output: None (since the first Option is None)
}

解釋

  • pipe(some1, O.zipRight(some2)): some1和some2都是Some,所以函數回傳第二個Option,即Some(2)。
  • pipe(some1, O.zipRight(none)): 由於第二個 Option 為 None,因此函數傳回 None。
  • pipe(none, O.zipRight(some2)): 第一個 Option 為 None,因此無論第二個 Option 如何,該函數都會傳回 None。

當您想要執行結果僅取決於第二個選項的操作時,此函數特別有用。

範例 2:使用 O.zipLeft 傳回第一個選項

概念

O.zipLeft 函數與 O.zipRight 相對應,讓您可以組合兩個選項,同時丟棄第二個選項並傳回第一個選項。同樣,如果兩個選項均為 Some,則此操作成功;否則,返回 None。

程式碼

function zipping_ex02() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value

  console.log(pipe(some1, O.zipLeft(some2))); // Output: Some(1) (returns the first Option)
  console.log(pipe(some1, O.zipLeft(none))); // Output: None (since the second Option is None)
  console.log(pipe(none, O.zipLeft(some2))); // Output: None (since the first Option is None)
}

解釋

  • pipe(some1, O.zipLeft(some2)): 由於兩個 Options 都是 Some,所以函數傳回第一個 Option,即 Some(1)。
  • pipe(some1, O.zipLeft(none)): 第二個Option是None,所以函數回傳None。
  • pipe(none, O.zipLeft(some2)): 由於第一個 Option 為 None,因此函數傳回 None。

當結果應由第一個選項決定,但您仍想確保第二個選項有效時,此功能很有用。

範例 3:使用 O.zipWith 將選項與函數組合

概念

O.zipWith 函數提供了最大的靈活性,讓您可以使用提供的函數組合兩個選項的值。如果兩個選項都是 Some,則套用該函數,並將結果包裝在新選項中。如果任一 Option 為 None,則函數傳回 None。

程式碼

function zipping_ex03() {
  const some1 = O.some(1); // Create an Option containing the value 1
  const some2 = O.some(2); // Create an Option containing the value 2
  const none = O.none(); // Create an Option representing no value
  const add = (a: number, b: number) => a   b;

  console.log(pipe(some1, O.zipWith(some2, add))); // Output: Some(3) (since 1   2 = 3)
  console.log(pipe(some1, O.zipWith(none, add))); // Output: None (since the second Option is None)
  console.log(pipe(none, O.zipWith(some2, add))); // Output: None (since the first Option is None)
}

解釋

  • pipe(some1, O.zipWith(some2, add)): 兩個選項都是 Some,所以應用了 add 函數,結果是 Some(3).
  • pipe(some1, O.zipWith(none, add)): 由於第二個 Option 為 None,因此函數傳回 None。
  • pipe(none, O.zipWith(some2, add)): 第一個 Option 為 None,因此函數傳回 None。

當您需要對兩個選項的值執行操作時,此函數非常理想,因為它可以確保在執行操作之前兩個值都存在。

結論

Effect-TS 中的壓縮選項是安全組合可選值的強大方法。無論您對第一個選項、第二個選項還是兩者的組合感興趣,O.zipRight、O.zipLeft 和 O.zipWith 函數都提供了有效處理這些場景所需的工具。透過理解和應用這些模式,您可以編寫更健全且可預測的功能程式碼。

版本聲明 本文轉載於:https://dev.to/almaclaine/zipping-options-in-effect-ts-a-practical-guide-72h?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在 PHP 中使用 cURL 取得 API 回應?
    如何在 PHP 中使用 cURL 取得 API 回應?
    在PHP 中使用cURL 取得API 回應在PHP 中,您可以建立一個獨立的類,其中包含透過cURL 呼叫API的函數並獲得響應。以下是實現此目的的方法:class ApiRequest { public function getResponse($url) { // Set cURL ...
    程式設計 發佈於2024-11-08
  • Ansible 入門 - 初學者指南:日復一日的 DevOps 工具系列
    Ansible 入門 - 初學者指南:日復一日的 DevOps 工具系列
    欢迎来到我们的“50 天 50 个 DevOps 工具”系列的第 30 天!今天,我们将探索 Ansible,它是 DevOps 工具包中最重要的工具之一。本博客将向您介绍 Ansible 的基础知识,分解其关键组件并向您展示如何从简单的示例开始。我们会让事情简单明了,使其成为初学者的完美起点。 ...
    程式設計 發佈於2024-11-08
  • 什麼是CPU暫存器
    什麼是CPU暫存器
    什麼是暫存器: 電腦暫存器是電腦中央處理單元 (CPU) 內的小型高速儲存單元,用於暫時保存資料和指令,以便在處理過程中快速存取。它們是直接影響 CPU 運算速度和效率的重要元件。 暫存器的存取速度比記憶體更快,因為它們位於 CPU 內部。這種接近性允許更快的資料檢索和處理。 暫存器記憶體是電腦...
    程式設計 發佈於2024-11-08
  • 折疊還是雙折?這是一個技術問題!
    折疊還是雙折?這是一個技術問題!
    我們現在不能停下來,因為我們已經投資了 1 倍,但多年來讓我們繼續投入 100 倍!斯托克斯! JavaScript 範例 你可能以前聽說過,但 Javascript 是在 10 天內寫成的。它的採用率迅速增長,即使在使用該語言幾年後,他們也不想引入重大變化……所以,現在該語言已經...
    程式設計 發佈於2024-11-08
  • 動態 Getter 和 Setter 如何增強 JavaScript 的靈活性?
    動態 Getter 和 Setter 如何增強 JavaScript 的靈活性?
    在 JavaScript 中實作動態 Getter 和 Setter:指南在傳統 JavaScript 中,getter 和 setter 是為特定屬性名稱定義的。但是,可以使用 ES2015 中引入的代理程式建立更靈活的動態 getter 和 setter。 使用代理的動態 getter 和 se...
    程式設計 發佈於2024-11-08
  • 如何在 Go 中將類型變數傳遞給函數進行類型斷言?
    如何在 Go 中將類型變數傳遞給函數進行類型斷言?
    將類型變數傳遞給函數進行型別斷言您希望透過將型別傳遞給函式來執行型別斷言。本質上,您的目標是實現以下目標:// Note that this is pseudocode, because Type isn't valid here func myfunction(mystring string, m...
    程式設計 發佈於2024-11-08
  • 從輸入欄位取得文字..
    從輸入欄位取得文字..
    Java代碼 public class MainActivity extends AppCompatActivity { Button btn; TextView textView; @Override protected void onCreate(Bundle s...
    程式設計 發佈於2024-11-08
  • PSD 批次編輯器
    PSD 批次編輯器
    大家好!我正在分享我在過去幾個月開發的這個新軟體。 我希望它可以幫助一些人,有些人可能有興趣幫助我改進它。我想添加很多功能,所以請隨時告訴我您希望在軟體中看到什麼。 在技術方面,我開始這個專案是為了嘗試在我的程式碼中實現一些設計模式,並更好地建立架構。這也是我第一次使用QT(我在過去的GUI專案...
    程式設計 發佈於2024-11-08
  • 為什麼 WinAPI Sleep(1) 會導致 15 毫秒暫停?
    為什麼 WinAPI Sleep(1) 會導致 15 毫秒暫停?
    了解WinAPI Sleep() 函數持續時間的差異當以1 毫秒為參數呼叫WinAPI Sleep() 函數時,據觀察,執行緒實際上暫停的時間要長得多,通常約為15 毫秒。這種現象引起了人們對潛在系統問題的擔憂。 Windows 中的時間量化Windows 採用時間量化機制進行執行緒調度。這意味著系...
    程式設計 發佈於2024-11-08
  • 以下是一些符合條件的標題選項: 

* JavaScript 中的相對路徑與絕對路徑:何時使用哪一個?
* JavaScript 路徑:絕對路徑還是相對路徑?性能和安全指南。
* 瓦時
    以下是一些符合條件的標題選項: * JavaScript 中的相對路徑與絕對路徑:何時使用哪一個? * JavaScript 路徑:絕對路徑還是相對路徑?性能和安全指南。 * 瓦時
    澄清 JavaScript 中的相對路徑和絕對路徑相對路徑和絕對路徑是 Web 開發中的基本概念,理解它們的差異至關重要。 定義絕對路徑指定相對於根目錄的位置(例如,/images/kitten.png)。另一方面,相對路徑指定相對於目前工作目錄的位置(例如,kitten.png)。 效能注意事項相...
    程式設計 發佈於2024-11-08
  • 如何處理 MySQL 查詢中的外鍵插入:兩種常見場景
    如何處理 MySQL 查詢中的外鍵插入:兩種常見場景
    如何處理MySQL 查詢中的外鍵插入為了有效地將值插入到具有外鍵的表中,讓我們探討兩個常見的場景:場景1:新增學生和現有教師要將新學生連結到現有教師,請使用教師姓名檢索外鍵:INSERT INTO TAB_STUDENT(name_student, id_teacher_fk) SELECT 'Jo...
    程式設計 發佈於2024-11-08
  • std::lock_guard 與 std::scoped_lock:何時選擇哪一個?
    std::lock_guard 與 std::scoped_lock:何時選擇哪一個?
    考慮std::lock_guard 與std::scoped_lockC 17 標誌著引入了一個新穎的鎖類std::scoped_lock ,它與古老的std::lock_guard 有相似之處。本文深入探討了這兩種鎖定機制之間的區別,引導您選擇適合您特定需求的最佳工具。 何時使用std::lock...
    程式設計 發佈於2024-11-08
  • 如何使用 Java 和 Apache Tika 從 Zip 檔案中的檔案中提取內容?
    如何使用 Java 和 Apache Tika 從 Zip 檔案中的檔案中提取內容?
    如何使用Java 和Apache Tika 從Zip 檔案中的檔案讀取和提取內容實作從Zip 檔案中讀取和提取內容的任務使用Java 和Apache Tika 壓縮zip 檔案中的檔案涉及幾個關鍵步驟。 1。初始化輸入首先從要處理的檔案建立輸入流:InputStream input = new Fi...
    程式設計 發佈於2024-11-08
  • 當公式存在時,如何使用 Openpyxl 從 Excel 電子表格中檢索實際儲存格值?
    當公式存在時,如何使用 Openpyxl 從 Excel 電子表格中檢索實際儲存格值?
    如何使用 Openpyxl 忽略公式並檢索實際單元格值使用包含公式的 Excel 電子表格時,檢索基礎單元格值可能具有挑戰性。 Openpyxl 是一個用於讀寫 Excel 檔案的熱門 Python 函式庫,可讓您存取儲存格值而無需計算公式結果。 問題:公式而不是實際值使用 Openpyxl 時的一...
    程式設計 發佈於2024-11-08
  • 如何使用 JavaScript 的 StructuredClone() 進行深度物件克隆
    如何使用 JavaScript 的 StructuredClone() 進行深度物件克隆
    目錄 介紹 理解並使用 StructuredClone 結論 介紹 您是否曾經嘗試過使用擴展運算符 (...) 在 Javascript 中複製對象,卻發現對原始對象的更改仍然會影響副本?當您期望一份獨立於原件的副本但最終卻有一個連結到原件時,這可能會令人沮喪。這是...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3