iT邦幫忙

鐵人檔案

2022 iThome 鐵人賽
回列表
Software Development

Functional Programming with C# 系列

C#作為一個OOP語言拿來寫FP? 有沒有搞錯?
其實C#有不少FP的特性,像是寫C#不可不知的Linq
本系列打算從C#的delegate、pattern match、record等等開始
慢慢了解FP的設計風格
讓我習慣OO的腦袋突破舒適圈

鐵人鍊成 | 共 30 篇文章 | 9 人訂閱 訂閱系列文 RSS系列文 團隊問一下神奇海螺叫什麼
DAY 1

Day1. 前言

說到C#,大多數的人都會想到這是一門物件導向(OOP)的語言,作為我入門的程式語言,當初我傻傻的以為世界上所有的人都寫OO,真是汗顏。後來慢慢接觸到其他的範式像...

2022-09-12 ‧ 由 marvinhsu 分享
DAY 2

Day2. 函數的定義域與值域

1. 函數是什麼? 我們先回到昨天的程式碼: int pi = 3.14159; 相信大家看一眼就知道,如果把3.14159放到一個int型別的參數,程式理所...

2022-09-13 ‧ 由 marvinhsu 分享
DAY 3

Day3. Option

昨天講到了定義域,今天換來討論值域。理想上一個方法都希望有一個回傳值,但現實中很難做到,就算已經在先驗條件中把所有未定義的輸入都排除了,仍然會有狀況是導致沒辦法...

2022-09-14 ‧ 由 marvinhsu 分享
DAY 4

Day4. Pattern Match

第一次聽到Pattern,我以為是設計模式,難以理解為什麼都是pattern好像在講兩件事。這邊的模式意謂資料的型態,FP的函數需要關注的是輸入的資料格式,然後...

2022-09-15 ‧ 由 marvinhsu 分享
DAY 5

Day5. Higher Order Function

再把map方法貼過來一次 public static Option Map<TSource, TResult>(this Option source...

2022-09-16 ‧ 由 marvinhsu 分享
DAY 6

Day6. Currying

昨天談到利用委派把函數最為另一個函數的參數,不知道大家有沒有注意到一見事情,當透過委派傳遞的時候,函數的內容其實並不馬上被執行。當我們傳遞委派的時候,目的是希望...

2022-09-17 ‧ 由 marvinhsu 分享
DAY 7

Day7. Closure

Closure(閉包)是一種特殊的函數,可以讀取外面環境中的資料,而外部無法修改函數內部的資料。這樣的介紹有如天書,實際上Closure是一個C#工程師幾乎天天...

2022-09-18 ‧ 由 marvinhsu 分享
DAY 8

Day8. 試試看用函數思考

今天來試試看函數式的思考吧,碎念一下當初選這個題目是因為發現自己OO中毒,沒有繼承不會寫程式。想要深入學習的FP話推薦Haskell趣學指南,我就拿裡面的題目來...

2022-09-19 ‧ 由 marvinhsu 分享
DAY 9

Day9. Linq and Immutable

先從一個小故事開始 我記得我剛開始學C#的時候,先碰到了迴圈,假設有一個數列,我希望將數列中的每一項加1: var array = new int[] { 1,...

2022-09-20 ‧ 由 marvinhsu 分享
DAY 10

Day10. ImmutableCollection

昨天的例子其實不需要特別轉成ImmutableList,因為linq的操作本身就具有不可變的概念,不可變得集合在多執行緒的時候具有很大的優勢,我們不需要考慮當共...

2022-09-21 ‧ 由 marvinhsu 分享