您的位置:首页 > 其它

F#简明教程三:F#语法精要

2010-06-11 12:55 316 查看
F#基本语法的学习是基于对F#类型系统和类型推断机制的理解的。在本节教程中,我们将学习到F#的变量声明和程序流程结构。

【51CTO独家特稿】在上一节F#教程中,我们对F#的类型系统和类型推断机制有了一个初步的认识。F#的类型推断原理是学习F#的重要基础。本节课程,我们将在F#类型基础上进一步学习F#的一些基本语法。

“let”表达式是F#语法的核心,可以用作定义函数、序列等多种用途。另外,F#使用空格来标记程序块的开始与结束。

定义值

let x = 2

定义函数值

let f a = a + x

定义循环函数

open System.IO
let rec printSubDirFiles dir =
let fles = Directory.GetFiles dir
let dirs =  Directory.GetDirectories dir
printf “%s/n%A/n/n” dir fles
Array.iter printSubDirFiles dirs

此外,F#还提供传统的循环和迭代等流程控制结构,比如if、for、while。但我们需要注意的是,F#中的“if…then”和“if…then…else”与传统的面向对象语言有些不同。在F#中,大多数表达式必须含有一个值,并且控制结构“if…then…else”表达式的两边的值必须是同一类型。注:F#的这种语法约定源自其推断型语言的编译机制,详细请参考上一节教程中关于F#类型推断机制的介绍。

F#中的常用流程控制语句示例




与大多数.NET平台上的编程语言相似,F#也提供一些组织代码的机制。事实上,F#提供模块和命名空间两种方式,下面的一些演示将给出C#和VB的命名空间。F#的模块化不只局限与语法范围,还提供模块化的层级标准,例如集合和函数。

F#的基础代码组织:命名空间、类型和模型

namespace MyFSharpProg
open System.Net
type Foo () =
member x.GetRequest = WebRequest.
Create
module Main = begin
// values and functions here
end

与传统的函数式编程原则相同,多数时候,F#的标识符是不可变的。但F#允许定义和修改使用“mutable”保留字的值,或通过“ref”保留字改变其前面的引用。mutable的值可以通过左箭头操作(“<-”);ref的值可以通过“:=”操作符制指定。我们可以通过“!”获取ref的值。下面来看具体示例:

声明/更新可变值

let mutable x = 0
x <- x + 1


声明/更新参考值

let x = ref 0
x := !x + 1


F#小提示:在习惯了C#或Java等编程语言后,刚刚开始F#编程,阅读F#代码感觉就像乱码一样。因为F#为了保有函数式编程的一些优秀特质,不得不引入一些如“<-”、“:=”、“!”等奇怪的符号作为操作符或运算符;另外,F#在代码中需要通过一些推断机制来评判变量的类型,在阅读F#代码时,应对F#的类型系统做到心中有数,所以,多数时候我们看到的是“let”,而不是传统的“int”、“string”、“float”等。希望大家能充分理解F#的类型系统和类型推断机制,这是F#的重要基础,也是走进函数式编程语言的重要一步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: