let 바인딩(F#)
바인딩은 값이나 함수에 식별자를 연결합니다. 값이나 함수에 이름을 바인딩하려면 let 키워드를 사용합니다.
// Binding a value:
let identifier-or-pattern [: type] =
expression
body-expression
// Binding a function value:
let identifier parameter-list [: return-type ] =
expression
body-expression
설명
let 키워드는 하나 이상의 이름에 대해 값 또는 함수 값을 정의하는 바인딩 식에 사용됩니다. 가장 단순한 형식의 let 식은 다음과 같이 단순 값에 이름을 바인딩하는 식입니다.
let i = 1
줄 바꿈을 사용하여 식별자로부터 식을 구분하는 경우 다음 코드에서와 같이 식의 각 줄을 들여써야 합니다.
let someVeryLongIdentifier =
// Note indentation below.
3 * 4 + 5 * 6
단순한 이름 대신 다음 코드에서와 같이 튜플 등 이름이 포함된 패턴을 지정할 수 있습니다.
let i, j, k = (1, 2, 3)
body-expression은 이름이 사용되는 식입니다. 본문 식은 별도의 줄에 표시됩니다. 이 줄은 let 키워드의 첫 글자와 나란히 정렬되도록 들여써야 합니다.
let result =
let i, j, k = (1, 2, 3)
// Body expression:
i + 2*j + 3*k
let 바인딩은 모듈 수준에서 클래스 형식의 정의에 사용되거나 함수 정의 같은 로컬 범위에 사용될 수 있습니다. 모듈이나 클래스 형식의 최상위 수준에 사용되는 let 바인딩에는 본문 식이 없어도 되지만 다른 범위 수준에 사용되는 바인딩에는 본문 식이 필요합니다. 바인딩된 이름은 다음 코드에서와 같이 정의 시점 이후에 사용할 수 있지만 이 이름을 사용하기 위해서는 let 바인딩이 먼저 등장해야 합니다.
// Error:
printfn "%d" x
let x = 100
// OK:
printfn "%d" x
함수 바인딩
함수 바인딩은 값 바인딩의 규칙을 따르지만 함수 바인딩의 경우 다음 코드에서와 같이 함수 이름 및 매개 변수가 포함된다는 점에서 차이가 있습니다.
let function1 a =
a + 1
일반적으로 매개 변수는 튜플 패턴 같은 패턴입니다.
let function2 (a, b) = a + b
let 바인딩 식에서는 마지막 식의 값을 구합니다. 따라서 다음 코드 예제의 경우 result의 값은 100 * function3 (1, 2)의 계산 결과로 구해집니다. 이 경우 그 결과는 300입니다.
let result =
let function3 (a, b) = a + b
100 * function3 (1, 2)
형식 주석
콜론(:) 뒤에 형식 이름을 추가하고 이 전체를 괄호로 묶어 매개 변수의 형식을 지정할 수 있습니다. 마지막 매개 변수 뒤에 콜론과 형식을 추가하여 반환 값의 형식을 지정할 수도 있습니다. 정수가 매개 변수 형식인 function1의 전체 형식 주석은 다음과 같습니다.
let function1 (a: int) : int = a + 1
명시적 형식 매개 변수가 없으면 형식 유추를 통해 함수 매개 변수의 형식을 결정합니다. 여기에는 매개 변수의 형식을 제네릭으로 자동 일반화하는 경우가 포함될 수 있습니다.
자세한 내용은 자동 일반화(F#) 및 형식 유추(F#)를 참조하십시오.
클래스의 let 바인딩
let 바인딩은 클래스 형식에 사용될 수 있지만 구조체 또는 레코드 형식에는 사용될 수 없습니다. 클래스 형식에 let 바인딩을 사용하려면 클래스에 기본 생성자가 있어야 합니다. 생성자 매개 변수는 클래스 정의의 형식 이름 뒤에 나와야 합니다. 클래스 형식의 let 바인딩은 해당 클래스 형식의 전용 필드 및 멤버를 정의합니다. 이 바인딩은 형식의 do 바인딩과 함께 형식의 기본 생성자 코드를 구성합니다. 다음 코드 예제에서는 전용 필드 field1과 field2가 있는 MyClass 클래스를 보여 줍니다.
type MyClass(a) =
let field1 = a
let field2 = "text"
do printfn "%d %s" field1 field2
member this.F input =
printfn "Field1 %d Field2 %s Input %A" field1 field2 input
field1 및 field2의 범위는 이를 선언한 형식으로 제한됩니다. 자세한 내용은 클래스의 let 바인딩(F#)을 참조하십시오.
let 바인딩의 형식 매개 변수
모듈 수준의 let 바인딩은 형식이나 계산 식에서 명시적 형식 매개 변수를 가질 수 있습니다. 함수 정의 내에 있는 경우 등과 같은 식의 let 바인딩은 형식 매개 변수를 가질 수 없습니다. 자세한 내용은 제네릭(F#)을 참조하십시오.
let 바인딩에 대한 특성
다음 코드에서와 같이 모듈의 최상위 let 바인딩에 특성을 적용할 수 있습니다.
[<Obsolete>]
let function1 x y = x + y