跳到主要內容

Functional Reactive Programming

1. FP, Functional Programming

不是有 function 的程式語言就叫做 functional programming language 唷?
https://ihower.tw/blog/archives/6305
讀完, 還是很難體會 FP。

* FP 精髓

http://www.codedata.com.tw/social-coding/paradigm-shift-to-functional-programming

  • map - 尋訪每個元素,加以處理,並且回傳處理後的元素。
  • filter - 回傳 布林值,以決定是否處理該元素。
  • reduce - 尋訪每個元素,依序組合元素,轉換成結果,丟給下個元素運算組合,然後產生最終組合的結果。

* Lazy

Call by Need

2. FRP, Functional Reactive Programming

http://www.ithome.com.tw/voice/91328

Reactive 的重點在於辨識出資料流,例如可以在欄位C1輸入=B1+5,然後在欄位D1輸入=C1+10,
此時,B1可以視為C1的資料來源,C1又可視為D1的資料來源,
每個欄位可以與其他欄位自由組合,形成資料流延續下去。
Reactive 是其目的,也就是強調必須即時地反應變化,非同步是達到此目的之手段,
為了能讓客戶端訂閱感興趣的資料流,採用了觀察者模式,
為了能讓開發者不落入如何處理(事件)資料的繁雜程式邏輯中,
採用了函數式的典範,隱藏了(事件)資料的迭代、轉換等細節,
從而能讓開發者根據規格進行宣告,以突顯出程式本身的意圖。

留言

這個網誌中的熱門文章

Parse URI query string to Key Value

Parse URI query String to Map 做 urlDecode 處理 沒有任何 query String 回傳 Empty Map 確保只處理 key-value 結構的 query String package com.example.util; import lombok.extern.slf4j.Slf4j; import org.apache.http.client.utils.URIBuilder; import java.io.UnsupportedEncodingException; import java.net.URI; import java.net.URISyntaxException; import java.net.URLDecoder; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; /** * Created by jerry on 2017/12/28. * * @author jerry */ @Slf4j public class UriUtil { private UriUtil() { } public static Map splitQuery(final String uri) { Map queryPairs = new LinkedHashMap (); try { final URI uri = new URIBuilder(uri).build(); final String rawQuery = uri.getRawQuery(); log.info("CurrentUrl Query: {}", rawQuery); // 過濾沒有 query string // 還有過濾無法成對 keyValue 的 query, e.g. http://host/path?123 if (Objects.isNull(rawQuery) |...

Spring-boot Thymeleaf Html5 SAXParseException 解析錯誤

thymeleaf 解析 html5 出錯 <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="description" content=""> <meta name="author" content=""> <title>SB Admin - Start Bootstrap Template</title> <!-- Bootstrap core CSS--> <link href="../static/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <!-- Custom fonts for this template--> <link href="../static/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> <!-- Page level plugin CSS--> <link href="../static/vendor/datatables/dataTables.bootstrap4.css" rel="stylesheet"> <!-- Custom styles for this template--> <li...

Google Compute Engine‎ - AccessDeniedExceptions 403

原因 打算從 instance 打包 logs 到 google cloud storage 發生了 AccessDeniedException: 403 Insufficient OAuth2 scope to perform this operation. , 看起來是 instance 沒有 storage 權限 解決 Reference: https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances#changeserviceaccountandscopes 重新設定 service account 權限 instance 上內建有 gcloud , 就直接用現有的工具查詢一下 instance 的 account. $ gsutil info 或者在本機直接 gcloud compute instances describe INSTANCE_NAMES Account: [alpha-number-compute@developer.gserviceaccount.com] Project: [our-project-name] 會看到 instance 的一些狀態, 接下來就簡單多了, 按照下列的說明, 要先 stop instance, 更改 storage scope 再重新 start 。 To change an instance's service account and access scopes, the instance must be temporarily stopped. To stop your instance, read the documentation for Stopping an instance. After changing the service account or access scopes, remember to restart the instance. # Stop Instance gcloud compute instances stop INSTANCE_NAMES # 設定 storage scope 為 full (Read, Write) gcloud co...