연습: 첫 번째 F# 프로그램
Visual Studio 2010에는 F#이라는 새 프로그래밍 언어가 포함되어 있습니다.F#은 다중 패러다임 언어로서 함수형 프로그래밍과 기존의 개체 지향 프로그래밍 및 .NET 개념을 지원합니다.다음 예제에서는 이 언어의 기능 및 구문 일부를 소개합니다.예제에서는 단순한 변수를 선언하는 방법, 함수를 작성 및 테스트하는 방법, 튜플과 목록을 만드는 방법, 클래스를 정의하고 사용하는 방법을 보여 줍니다.
[!참고]
다음 지침처럼 컴퓨터에서 Visual Studio 사용자 인터페이스 요소 일부에 대한 이름이나 위치를 다르게 표시할 수 있습니다. 이러한 요소는 사용하는 Visual Studio 버전 및 설정에 따라 결정됩니다. 자세한 내용은 Visual Studio 설정을 참조하십시오.
새 콘솔 응용 프로그램을 만들려면
파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
템플릿 범주 창에서 Visual F#을 볼 수 없으면 다른 언어를 클릭한 다음 **Visual F#**을 클릭합니다.중앙에 템플릿 창이 나타나고 이 창에 F# 템플릿이 나열됩니다.
템플릿 창의 맨 위에 있는 대상 프레임워크 상자에 .NET Framework 4가 표시되는지 확인합니다.
템플릿 목록에서 F# 응용 프로그램을 클릭합니다.
이름 필드에 프로젝트 이름을 입력합니다.
확인을 클릭합니다.
솔루션 탐색기에 새 프로젝트가 나타납니다.
let 키워드를 사용하여 식별자를 선언하고 사용하려면
다음 코드를 복사하여 Program.fs에 붙여 넣습니다.식별자 anInt, aString 및 anIntSquared를 각각 값에 바인딩하게 됩니다.
let anInt = 5 let aString = "Hello" // Perform a simple calculation and bind anIntSquared to the result. let anIntSquared = anInt * anInt
[!참고]
클래식 보기에서 코드를 볼 수 없으면 항목 제목 아래의 머리글에 언어 필터가 F#을 포함하도록 설정되어 있는지 확인합니다.
F# 대화형 창에서 결과를 보려면
이전 절차에서 let을 선택합니다.
선택한 영역을 마우스 오른쪽 단추로 클릭한 다음 Interactive로 보내기를 클릭합니다.또는 Alt+Enter를 눌러도 됩니다.
F# Interactive 창이 열리고 let 식을 해석한 결과가 다음 줄과 같이 표시됩니다.형식은 지정된 값으로부터 유추됩니다.
val anInt : int = 5
val aString : string = "Hello"
val anIntSquared : int = 25
명령 프롬프트 창에서 결과를 보려면
다음 줄을 Program.fs에 추가합니다.
System.Console.WriteLine(anInt) System.Console.WriteLine(aString) System.Console.WriteLine(anIntSquared)
Ctrl+F5를 눌러 코드를 실행합니다.다음 값을 포함하는 명령 프롬프트 창이 나타납니다.
5
Hello
25
이전 WriteLine 문의 식별자 이름인 anInt, aString 및 anIntSquared에 마우스 포인터를 놓으면 유추된 값을 확인할 수 있습니다.
함수를 정의 및 실행하려면
let 식을 사용하여 다음 코드와 같이 제곱 값을 계산하는 함수를 정의합니다.이 함수는 하나의 매개 변수 n을 가지며 n으로 전달된 인수의 제곱을 반환합니다.
let square n = n * n // Call the function to calculate the square of anInt, which has the value 5. let result = square anInt // Display the result. System.Console.WriteLine(result)
Ctrl+F5를 눌러 코드를 실행합니다.결과로 25가 표시됩니다.
재귀적 함수에는 let rec 식이 필요합니다.다음 예제에서는 매개 변수 n의 계승을 계산하는 함수를 정의합니다.
let rec factorial n = if n = 0 then 1 else n * factorial (n - 1) System.Console.WriteLine(factorial anInt)
Ctrl+F5를 눌러 함수를 실행합니다.결과로 5의 계승인 120이 표시됩니다.
목록 및 튜플 같은 컬렉션을 만들려면
값을 집계하는 방법 중 하나는 다음 코드와 같이 튜플을 사용하는 것입니다.
let turnChoices = ("right", "left") System.Console.WriteLine(turnChoices) // Output: (right, left) let intAndSquare = (anInt, square anInt) System.Console.WriteLine(intAndSquare) // Output: (5,25)
값을 집계하는 다른 방법으로는 다음 코드와 같이 목록을 사용하는 것이 있습니다.
// List of best friends. let bffs = [ "Susan"; "Kerry"; "Linda"; "Maria" ]
"cons" 연산자(::)를 사용하여 목록에 새로운 친구를 추가합니다.이 연산은 bffs의 값을 변경하지 않습니다.bffs의 값은 변하지 않으며 변경할 수 없습니다.
// Bind newBffs to a new list that has "Katie" as its first element. let newBffs = "Katie" :: bffs
목록을 표시하려면 printfn을 사용합니다.printfn 함수는 구조화된 값에 포함된 개별 요소를 보여 줍니다.
printfn "%A" bffs // Output: ["Susan"; "Kerry"; "Linda"; "Maria"] printfn "%A" newBffs // Output: ["Katie"; "Susan"; "Kerry"; "Linda"; "Maria"]
결과를 보려면 Ctrl+F5를 누르거나 코드 섹션을 선택한 다음 Alt+Enter를 누르면 됩니다.
클래스를 만들고 사용하려면
다음 코드에서는 Name 및 Age라는 두 가지 속성이 있는 Person 클래스를 만듭니다.Name은 읽기 전용 속성입니다.함수형 프로그래밍에서 사용되는 대부분의 값과 마찬가지로 이 속성의 값 역시 변하지 않습니다.가변 값이 필요한 경우 F#에서 이 값을 만들 수 있지만 이 경우 값이 변할 수 있음을 명시적으로 정의해야 합니다.다음 클래스 정의에서 Age의 값은 변할 수 있는 지역 변수 internalAge에 저장됩니다.internalAge 값은 변경될 수 있습니다.
// The declaration creates a constructor that takes two values, name and age. type Person(name:string, age:int) = // A Person object's age can be changed. The mutable keyword in the // declaration makes that possible. let mutable internalAge = age // Declare a second constructor that takes only one argument, a name. // This constructor calls the constructor that requires two arguments, // sending 0 as the value for age. new(name:string) = Person(name, 0) // A read-only property. member this.Name = name // A read/write property. member this.Age with get() = internalAge and set(value) = internalAge <- value // Instance methods. // Increment the person's age. member this.HasABirthday () = internalAge <- internalAge + 1 // Check current age against some threshold. member this.IsOfAge targetAge = internalAge >= targetAge // Display the person's name and age. override this.ToString () = "Name: " + name + "\n" + "Age: " + (string)internalAge
클래스를 테스트하려면 다음 코드와 같이 Person 개체를 두 개 선언하고, 필요에 맞게 변경하고, 결과를 표시합니다.
// The following let expressions are not part of the Person class. Make sure // they begin at the left margin. let person1 = Person("John", 43) let person2 = Person("Mary") // Send a new value for Mary's mutable property, Age. person2.Age <- 15 // Add a year to John's age. person1.HasABirthday() // Display results. System.Console.WriteLine(person1.ToString()) System.Console.WriteLine(person2.ToString()) // Is Mary old enough to vote? System.Console.WriteLine(person2.IsOfAge(18))
다음 줄이 표시됩니다.
Name: John
Age: 44
Name: Mary
Age: 15
False
F# 자습서의 다른 예제를 보려면
파일 메뉴에서 새로 만들기를 가리킨 다음 프로젝트를 클릭합니다.
템플릿 범주 창에서 Visual F#을 볼 수 없으면 다른 언어를 클릭한 다음 **Visual F#**을 클릭합니다.중앙에 템플릿 창이 나타나고 이 창에 F# 템플릿이 나열됩니다.
템플릿 창의 맨 위에 있는 대상 프레임워크 상자에 .NET Framework 4가 표시되는지 확인합니다.
템플릿 목록에서 F# 자습서를 클릭합니다.
확인을 클릭합니다.
솔루션 탐색기에 자습서가 나타납니다.
다음 단계
함수형 프로그래밍에 대한 자세한 내용과 추가 예제를 보려면 함수를 고급 값으로 상승(F#)을 참조하십시오.튜플, 목록, let 식, 함수 정의, 클래스, 멤버 및 기타 여러 항목에 대한 자세한 내용은 F# 언어 참조를 참조하십시오.