说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

第一个F#入门程序Hello world

HTML文档下载 WORD文档下载 PDF文档下载
Visual Studio 2010 包含一种新的编程语言,它就是 F#。 F# 是一种多范例语言,它除了支持传统的面向对象的编程和 .NET 概念外,还支持函数编程。 本文介绍了它的一些功能和语法,演示如何声明简单变量,编写和测试函数,创建元组和列表,以及定义和使用类。

Visual Studio 2010 包含一种新的编程语言,它就是 F#。 F# 是一种多范例语言,它除了支持传统的面向对象的编程和 .NET 概念外,还支持函数编程。 下面的示例介绍了它的一些功能和语法。 该示例演示如何声明简单变量,编写和测试函数,创建元组和列表,以及定义和使用类。

 

创建新的控制台应用程序
在"文件"菜单上,指向"新建",再单击"项目"。
如果您在“模板类别”窗格中看不到 Visual F#,请单击“其他语言”,然后单击“Visual F#”。 中央的“模板”窗格将列出 F# 模板。
的顶部查找模板以确保 .net Framework 4显示在目标框架框中。
在模板列表中,单击“F# 应用程序”。
在“名称”中键入项目的名称。
单击“确定”。
新项目出现在“解决方案资源管理器”中。
使用 let 关键字声明和使用标识符
将以下代码复制并粘贴到“Program.fs”中。 您要将每个标识符(anInt、aString 和 anIntSquared)绑定到一个值。

创建新的控制台应用程序

 

1. 在"文件"菜单上,点"新建",再单击"项目"。

 

2. 如果您在“模板类别”窗格中看不到 Visual F#,请单击“其他语言”,然后单击“Visual F#”。 中央的“模板”窗格将列出 F# 模板。

 

3. 在顶部查找模板以确保 .net Framework 4显示在目标框架框中。

 

4. 在模板列表中,单击“F# 应用程序”。

 

5. 在“名称”中键入项目的名称。

 

6. 单击“确定”。

 

新项目出现在“解决方案资源管理器”中。

 

使用 let 关键字声明和使用标识符

 

将以下代码复制并粘贴到“Program.fs”中。 您要将每个标识符(anInt、aString 和 anIntSquared)绑定到一个值。

 

let anInt = 5let aString = "Hello world"// Perform a simple calculation and bind anIntSquared to the result.let anIntSquared = anInt * anInt
在 F# Interactive 窗口中查看结果
选择前面过程中的 let 表达式。
右击所选区域,然后单击“发送到 Interactive”。 另外,也可以按 Alt+Enter。
“F# Interactive”窗口将打开,并显示解释 let 表达式的结果,如下列代码行所示。 类型是从指定的值推断的。
val anInt : int = 5
val aString : string = "Hello world"
val anIntSquared : int = 25
在命令提示窗口中查看结果
1. 将下列代码行添加到“Program.fs”中。
System.Console.WriteLine(anInt)System.Console.WriteLine(aString)System.Console.WriteLine(anIntSquared)
2. 按 Ctrl+F5 运行代码。 将显示命令提示窗口,其中包含下列值。
5
Hello world
25
可以通过将鼠标指针停留在前面 WriteLine 语句中的标识符名称 anInt、aString 和 anIntSquared 上,验证推断的类型。
定义并运行函数
1. 使用 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)
2. 按 Ctrl+F5 运行代码。 显示的结果为 25。
3. 递归函数需要 let rec 表达式。 下面的示例定义了计算参数 n 的阶乘的函数。

 

let rec factorial n =     if n = 0     then 1     else n * factorial (n - 1)System.Console.WriteLine(factorial anInt)
4. 按 Ctrl+F5 运行该函数。 显示的结果为 120,即 5 的阶乘。
创建集合:列表和元组
1. 聚合值的一种方法是使用元组,如下面的代码所示。

 

let turnChoices = ("right", "left")System.Console.WriteLine(turnChoices)// Output: (right, left)let intAndSquare = (anInt, square anInt)System.Console.WriteLine(intAndSquare)// Output: (5,25)

2. 聚合值的另一种方法是使用列表,如下面的代码所示。

 

// 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"]
3. 可以通过按 Ctrl+F5 或选择一段代码再按 Alt+Enter,查看结果。
创建和使用类
1. 下面的代码创建 Person 类,该类具有两个属性 Name 和 Age。 Name 为只读属性。 像函数编程中的大多数值一样,该属性的值不可变。 如果需要,可以在 F# 中创建可变值,但是您必须显式将其定义为可变。 在下面的类定义中,Age 的值存储在可变局部变量 internalAge 中。 可以更改 internalAge 的值。
// The declaration creates a constructor that takes two values, name and age.type Person(name:string, age:int) =    //  Person 对象的 age 值可变. 这使下面定义的 mutable变量internalAge也可变。    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)    // 只读属性    member this.Name = name    // 可读写属性.    member this.Age        with get() = internalAge        and set(value) = internalAge <- value    // 方法实例    // 增加person的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
2. 若要测试该类,请声明两个 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# 教程”。
单击“确定”。
该教程将显示在“解决方案资源管理器”中。
本文来自微软网站。

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘