functional programming
-
[TCA] Episodes 1 - FunctionsTCA/Episodes 2023. 5. 6. 18:09
Introduce Point-Free๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ Swift๋ฅผ ๋ค๋ฃจ๋ ๋น๋์ค ์๋ฆฌ์ฆ์ ๋๋ค. ์ฌ๊ธฐ์๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ๊ฐ๋ ์ ๋ํด์ ๋ง์ด ๋ค๋ฃจ๊ธฐ ๋๋ฌธ์, ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด์ ์ ์์๋ฌ์ผ ํฉ๋๋ค. Swift์์๋ ์ผ๋ฐ์ ์ผ๋ก free function์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์๋?! free function์ global namespace์ ๋ ๋ค๋๊ณ , ํ์ ์ ๋ฌถ์ฌ์์ง ์์์ messyํ๊ฒ ๋ณด์ผ ์๋ ์์ต๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ์๋ free function์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ ๋๋ค. ์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์ ๋งํ๋ free function์ด๋, ๋ฉค๋ฒ ํจ์๊ฐ ์๋ ํจ์๋ฅผ ์๋ฏธํฉ๋๋ค. struct NotFreeFunction { func hi() { } // Not Free Function } func bye()..
-
[Swift] ํจ์ํ ํ๋ก๊ทธ๋๋ฐ (Functional Programming)Swift 2022. 1. 21. 23:19
๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐจ์งํฅ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์๋ฐ๋๋ ๊ฒ์ด ์๋๋ผ ์ ์ฐจ์งํฅ์ ์์๋ค๊ณผ ๊ณต์กดํ๊ธฐ๋ ํ๊ณ , ์ด๋ค์ ํฌํจํ๊ธฐ๋ ํ๋ ๊ฐ๋ ์ด๋ค. ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ ๊ฐ์ฒด์งํฅ๊ณผ ๋๋ฆฝํ๋ ๊ด๊ณ๋ ์๋๋ค. ํ๋ก๊ทธ๋๋จธ๋ค์ด ์ผํ๋ ์๋ก์ด ํจ๋ฌ๋ค์์ ์ ์ํ ๊ฒ. ใ ค ใ ค ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ์์๋ฅผ ์ด์ฝ๋ ๊ณต์ฅ์ผ๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. ๋น ํจ์ํ ๊ณต์ฅ ํ๋ก์ธ์ค๋ฅผ ๊ฐ ๊ตฌ์ฑ์์ด ์๊ณ ์๋ค. ๋ค๋ฅธ ๊ณณ์ ๋ฌด์ธ๊ฐ๋ฅผ ์ ์ด๋๊ณ ์ฐธ์กฐํ๊ธฐ๋ ํจ. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ฌ๋ฌ ํจ์๋ค์ด ์ฌ์ฉํ๋ ์ธ๋ถ ๋ณ์์ ์ค๋ฅ๊ฐ ์๊ธฐ๋ฉด, ๊ณต์ฅ ํ๋ก์ธ์ค์ ์ฐจ์ง์ด ์๊ธธ ์ ๋ฐ์ ์๋ค. ๊ฐ ๊ตฌ์ฑ์๋ค์ด ๋งก์ ์ญํ ์ ๋ฐ๋ผ ํ๋ ฅํ๋ฉฐ ์ผํจ. ์์คํ ์ ๊ตฌ์ถํ๊ธฐ ์ํ ์ค๊ณ์์ ๊ณ ๋ฏผ์ด ํ์. ใ ค ใ ค ํจ์ํ ๊ฐ ๊ตฌ์ฑ์๋ค์ ๊ณต์ฅ ํ๋ก์ธ์ค์ ๋ํด ์์ง ๋ชปํจ. ์ธํ๊ณผ ์์ํ์ด ์๋ค. ๊ฐ ๊ตฌ์ฑ..
-
[Swift] ๊ณ ์ฐจํจ์ (map, filter, reduce)Swift 2022. 1. 20. 22:30
Swift์ ํจ์๋ First-Class Citizen (์ผ๊ธ๊ฐ์ฒด)์ด๋ค. ๋ฐ๋ผ์ ํจ์๋ 1. ๋ณ์๋ ์์์ ์ ์ฅ 2. ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ 3. ํจ์๋ ๋ฉ์๋์์ ๋ฆฌํด ํ ์ ์๋ค. ๊ณ ์ฐจ ํจ์ (Higher-order Function) ๋ ์ธ์๋ก ํจ์๋ฅผ ์ ๋ฌ๋ฐ๊ฑฐ๋, ํจ์๋ฅผ ๊ฒฐ๊ณผ๋ก ๋ฐํํ๋ ํจ์๋ฅผ ๋งํ๋ค. Swift์์ ์ ๊ณตํ๋ ๋ํ์ ์ธ ๊ณ ์ฐจํจ์๋ก๋ ๋งต (map), ํํฐ (filter), ๋ฆฌ๋์ค (reduce)๊ฐ ์๋๋ฐ, ์ด์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค. 1. map (๋งต) Swift์์ map์ ๋ฐฐ์ด (Array), ๋์ ๋๋ฆฌ (Dictionary), ์ (Set), ์ต์ ๋ ๋ฑ ์์ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ฐ, ์ฌ๊ธฐ์๋ ๋ฐฐ์ด์์ ์ฌ์ฉํ๋ map์ ๋ํด์ ์์๋ณด๊ณ ์ ํ๋ค. map(_:) ์ ํด๋ก์ ๋ก ์ ๋ฌ๋ ์ํ์ค์ ์์๋ค์ ๋งต..
-
[Swift] ๋จ๋ฝ ํ๊ฐ (Short-circuit Evaluation), Side EffectSwift 2022. 1. 20. 14:21
(๋ชจ๋ ์ฝ๋๋ Playground์์ ์์ฑ๋์์ต๋๋ค.) ์ด๋ฒ์ ๋จ๋ฝ ํ๊ฐ (Short-circuit Evaluation) ์ ๋ํด์ ๊ณต๋ถํด๋ณด๋ ค๊ณ ํ๋ค. ๋จ๋ฝ ํ๊ฐ (Short-circuit Evaluation) ๋? ๋จ๋ฝ ํ๊ฐ๋, ๋ ผ๋ฆฌ์์์ ๊ฒฐ๊ณผ๋ฅผ ์ป๋๋ฐ ํ์ํ ์ต์ํ์ ์ฝ๋๋ง ์คํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์๋ฅผ ๋ค๋ฉด, Logical AND (&&) ์ฐ์ฐ์์ ์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ false์ธ ๊ฒฝ์ฐ, ๋๋ฒ์งธ ํผ์ฐ์ฐ์๋ ๋ณผ ํ์๋ ์์ด ๋ฌด์กฐ๊ฑด false์ด๋ค. Logical OR (||) ์ฐ์ฐ์์ ์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ true์ธ ๊ฒฝ์ฐ, ๋๋ฒ์งธ ํผ์ฐ์ฐ์๋ ๋ณผ ํ์๋ ์์ด ๋ฌด์กฐ๊ฑด true์ด๋ค. ํ์ง๋ง! ๋ง์ฝ Logical AND (&&) ์ฐ์ฐ์์ ์ฒซ๋ฒ์งธ ํผ์ฐ์ฐ์๊ฐ true๋ผ๋ฉด, ๋๋ฒ์งธ ํผ์ฐ์ฐ์์ ๊ฐ์ ๋ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ ๋ฌ๋ผ์ง๊ธฐ ๋..