-
60초안에 살펴보는 F# 문법F# 2015. 12. 5. 00:14
이 글은 http://fsharpforfunandprofit.com/posts/fsharp-in-60-seconds/
문서를 기본으로 하여 작성되었습니다.
표준 C언어와 비슷한 문법을 가진 언어들과 F#의 주요한 차이점.
- 코드 블럭을 구분하기 위해 대괄호를 사용하지 않습니다. 대신 파이썬과 같이 들여쓰기를 사용합니다.
- 컴마가 아닌 공백을 사용하여 파라미터를 구분합니다.
주석
// 한줄 주석은 슬래시 두개
(* 여러줄 주석은 (* ... *) 을 이용하여 입력합니다.
이렇게 말이죠 *)
값 (불변)
let myInt = 5
let myFloat = 3.14
let myString = "hello" //타입을 지정하지 않아도 자유롭게 지정할 수 있습니다.
리스트(목록)
let twoToFive = [2;3;4;5] //중괄호와 세미콜론으로 구분하여 목록을 표현할 수 있습니다.
let oneToFive = 1 :: toToFive // ::을 이용하여 새로운 첫번째 원소를 생성할 수 있습니다.
let zeroToFive = [0;1] @ toToFive // @ 으로 두개의 배열을 합칠수 있습니다.
컴마는 절대 사용되지 않습니다. 오직 세미콜론만으로 구분합니다.
함수
let square x = x * x //괄호가 사용되지 않습니다.
square 3 //함수 실행
let add x y = x + y //(x,y) 처럼 입력하지 않도록 주의 하세요.
add 2 3 //함수실행
//여러줄로 함수 정의하기. 들여쓰기를 하면 됩니다. 세미콜론은 필요치 않아요.
//F#에서 조건문에서의 = 은 비교 연산자입니다. 대입연산자가 아님에 주의하세요.
let evens list =
let isEven x = x%2 = 0 //isEven함수를 내부에 중첩 정의 합니다.
List.filter isEven list //List.filter는 라이브러리 함수로 두개의 인자(비교 boolean 함수, 대상)를 취합니다.
evens oneToFive //함수 실행
괄호
//괄호를 이용하여 함수 실행 우선순위를 명시할 수 있습니다.
//괄호로 인해 List.map 을 먼저실행하고 그 결과를 List.sum에 전달합니다.
//아래에서 괄호가 빠지게 되면, List.sum 의 인자로 곧바로 입력되게 됩니다.
let sumOfSquaresTo100 =
List.sum( List.map square [1..100] )
순방향 파이프 |> (pipe-foward)
// |> (pipe-forward) 연산자를 이용하여 출력된 결과를 다음 함수로 전달할 수 있습니다.
let sumOfSquaresTo100piped =
[1..100] |> List.map square |> List.sum
람다
//fun 키워드를 이용하여 람다(익명함수)를 정의할 수 있습니다.
let sumOfSquaresTo100withFun =
[1..100] |> List.map(fun x->x*x) |> List.sum
match ... with : 더 강력한 기능을 지원하는 switch / case 구문
//F# 에서는 return 키워드가 필요없습니다. 마지막 값을 리턴합니다.
let simplePatternMatch =
let x = "a"
match x with
| "a" -> printfn "x is a"
| "b" -> printfn "x is b"
| _ -> printfn "x is something else" //밑줄은 아무것이나 매칭됩니다.
Some과 None 타입 : 널 값이 가능한 값의 래퍼
//Some(..) 과 None은 널을 허용하는 값과 비슷한 역할을 합니다. [참고]
let validValue = Some(99)
let invalidValue = None
//다음 예는 Some과 None을 사용하는 match ... with의 예로 Some의 값을 바로 꺼내어 사용합니다.
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" }
유니온 타입
type Temp =
| DegreesC of float
| DegreesF of float
let temp DegreesF 98.6
//재귀적으로 구성되어있는 타입도 가능
type Employee =
| Worker of Person
| Manager of Employee list
let jdoe = { First="John";Last="Doe"}
let worker = Worker jdoe
//출력
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
'F#' 카테고리의 다른 글
F# 타이머 예제 (0) 2016.03.11 F# Async Task 예제 (0) 2016.03.11 F# 에서 쓰레드 사용하기 예제 (0) 2016.03.11 웹 데이터 요청하고 xpath로 데이터 추출하기 (1) 2015.12.26 함수형 언어 F# Hello world (0) 2015.12.04