F# ๋ฌธ๋ฒ ์ตํ๊ธฐ (60์ด)
C#๊ณผ์ ์ค์ํ ์ฐจ์ด์
- ์ค๊ดํธ ๋์ ๋์ด์ฐ๊ธฐ
- ๋งค๊ฐ๋ณ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ผํ ๋์ ๊ณต๋ฐฑ ์ฌ์ฉ
- ํจ์๋ ๋ฐ๋์ ์ฌ์ฉ ์ ์ ์ ์๋์ด์ผ ํจ
let myInt = 5
let myFloat = 3.14
let myString = "hello"
๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ์ผ๋ก ์ ์ ๋ฉ๋๋ค.
let twoToFive = [2; 3; 4; 5]
let twoToFive2 = [
2
3
4
5
]
let twoToFive3 = [2..5]
let twoToFive4 = [for i in 2..5 -> i]
printfn "%A" twoToFive
printfn "%A" twoToFive2
printfn "%A" twoToFive3
printfn "%A" twoToFive4
๊ฒฐ๊ณผ๋? ๋ชจ๋ [2; 3; 4; 5]
์ด๋ค.
(๋ฌผ๋ก ์ด๋ค ๊ฒ์ด ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ปดํ์ผ ํ์์ธ์ง ๋ฐํ์์ธ์ง๋ ์์ง์ ์ ๋ชจ๋ฅด๊ฒ ๋ค.)
๊ทธ๋ฆฌ๊ณ โฆ [1;2;3]
์ด๋ฐ ํํ์ ์ผ๋ฐ์ ์ธ ์ฐ์ ๋ฐฐ์ด์ด ์๋๋ผ ๋งํฌ๋๋ฆฌ์คํธ์ด๋ค!
(๋ฌผ๋ก ๋ด๋ถ์ ์ผ๋ก ์ฐ์ ๋ฐฐ์ด๋ค์ ์งํฉ์ด ๋๋๋ก ์ต์ ํ ๋๊ธด ํ ๊ฒ์ด๋ค. ์ ๋ชจ๋ฅด๊ฒ ๋ค)
์ผ๋ฐ ์ฐ์ ๋ฐฐ์ด์ [|1; 2; 3|]
๋ผ๊ณ ์ฌ์ฉํ๋ค.
let oneToFive = 1 :: twoToFive
printfn "%A" oneToFive
์์ 1์ ์ถ๊ฐํ์ฌ ์๋ก์ด ๋ชฉ๋ก์ ์์ฑํ๋ค. ์๋ก ์์ฑํ ๋ชฉ๋ก์ ๋ด๋ถ์ ์ผ๋ก ๋ณต์ฌ๊ฐ ์๋๋ผ ๋งํฌ๋๋ฆฌ์คํธ๋ก ์ฐธ์กฐํ์ฌ ๋น ๋ฅด๊ฒ ์์ฑํ๋ค.
let zeroToFive = [0;1] @ twoToFive
๋ ๋ชฉ๋ก์ ์ฐ๊ฒฐํด์ ์๋ก์ด ๋ชฉ๋ก์ ๋ง๋ค ์๋ ์๋ค.
let square x = x * x
square 3
let add x y = x + y
add 2 3
ํจ์๋ฅผ ์ด๋ ๊ฒ ๋ง๋ค๊ณ ์ฌ์ฉํ ์ ์๋ค.
let evens list =
let isEven x = x%2 = 0
List.filter isEven list
evens oneToFive
ํจ์ ์์ ํจ์๋ฅผ ์ฌ์ฉํด์ ์ฝ๋๋ฅผ ์ค์ด๊ฑฐ๋ ๊ฐ๋
์ฑ์ ์ฌ๋ฆด ์ ์๋ค.
let sumOfSquaresTo100 =
List.sum ( List.map square [1..100] )
์ด๋ ๊ฒ ํจ์๋ฅผ ๋ง๋ค ์ ์์ง๋ง ํ์ดํ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ์ข ๋ ์์ฐ์ค๋ฝ๋ค.
let sumOfSquaresTo100piped =
[1..100] |> List.map square |> List.sum
square ํจ์ ๋์ ๋๋ค ํจ์๋ก ๋ฐ๋ก ํํํ ์ ๋ ์๋ค.
let sumOfSquaresTo100withFun =
[1..100] |> List.map (fun x->x*x) |> List.sum
ํจํด ๋งค์นญ์ ์๋ F#์์ ์ ๊ณต๋๋ ๊ฒ์ด๋ค.
let simplePatternMatch =
let x = "a"
match x with
| "a" -> printfn "x is a"
| "b" -> printfn "x is b"
| _ -> printfn "x is something else"
F#์์๋ Option ํ์
์ ์ํด ๊ฐ์ด ์์์๋ ์๊ณ ์์ ์๋ ์๋ ์ํ๋ฅผ ์ข ๋ ๋ช
ํํ๊ฒ ํํํ ์ ์๋ค.
let validValue = Some(99)
let invalidValue = None
Option์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ํจํด ๋งค์นญ์ ํ ์ ์๋ค.
let optionPatternMatch input =
match input with
| Some i -> printfn "input is an int=%d" i
| None -> printfn "input is missing"
optionPatternMatch validValue
optionPatternMatch invalidValue
ํํ์ ์ปด๋ง๋ก ํํํ๋ค.
let twoTuple = 1,2
let threeTuple = "a",2,true
๋ ์ฝ๋ ์ ํ์ ์ด๋ฆ ํ๋๋ก ์ธ๋ฏธ์ฝ๋ก ์ผ๋ก ๊ตฌ๋ถํ์ฌ ํํํ๋ค.
type Person = {First:string; Last:string}
let person1 = {First="john"; Last="Doe"}
C#์์ ๊ทธ๋ ๊ฒ ์ฌ์ฉํ๊ณ ์ถ์ ์ ๋์จ ์ ํ์ด๋ค.
type Temp =
| DegreesC of float
| DegreesF of float
let temp = DegreesF 98.6
Temp ์ ํ์ DegreesC
์ผ ์๋ ์๊ณ DegreesF
์ผ ์๋ ์๋ค.
๋ค์๊ณผ ๊ฐ์ด ์ ํ์ ์ฌ๊ท์ ์ผ๋ก ์ ์๋ ์ ๋ ์๋ค.
type Employee =
| Worker of Person
| Manager of Employee list
let jdoe = {First="John";Last="Doe"}
let worker = Worker jdoe
์ถ๋ ฅ์ %A
์ ์ค์ ๊ฐ์ ์ด์๊ฒ ์ถ๋ ฅํ ์ ์๋ค.
printfn "Printing an int %i, a float %f, a bool %b" 1 2.0 true
printfn "A string %s, and something generic %A" "hello" [1;2;3;4]
printfn "twoTuple=%A,\nPerson=%A,\nTemp=%A,\nEmployee=%A"
twoTuple person1 temp worker