F# - 基本语法

您已经看到了F#程序的基本结构,因此很容易理解F#编程语言的其他基本构建块.

F#中的标记

F#程序由各种令牌组成.令牌可以是关键字,标识符,常量,字符串文字或符号.我们可以将F#标记分为两种类型和减号;

  • 关键字

  • 符号和运算符

F#关键字

下表显示了关键字的关键字和简要说明.我们将在后续章节中讨论这些关键字的使用.

namespace
关键字描述
abstract 表示一种方法,该方法在声明它的类型中没有实现,或者是虚拟的并且具有默认实现.
and 用于相互递归绑定,属性声明和泛型参数的多个约束.
as 用于为当前类对象提供对象名称.也用于在模式匹配中为整个模式命名.
assert 用于在调试期间验证代码.
base 用作基类对象的名称.
begin 在详细语法中,表示代码块的开始.
class 在详细语法中,表示类定义的开始.
default 表示抽象方法的实现;与抽象方法声明一起使用以创建虚方法.
delegate 用于声明委托.
do 用于循环结构或执行命令式代码.
done 在详细语法中,表示循环表达式中代码块的结束.
downcast 用于转换为继承链中较低的类型.
downto for 表达式中,在计数时使用反向.
elif 用于条件分支. if的一个简短形式.
else 用于条件分支.
end

在类型定义和类型扩展中,表示成员定义部分的结尾.

在详细语法中,用于指定以代码块开头的代码块的结尾开始关键字.

exception 用于声明异常类型.
extern 表示声明的程序元素是在另一个二进制文件或程序集中定义的.
false 用作布尔文字.
finally 与try一起使用,引入一个代码块,无论是否发生异常都会执行.
for 用于循环结构.
fun 用于lambda表达式,也称为匿名函数.
function 用作较短的替代品有趣的关键字和一个lambda表达式中的匹配表达式,它在一个参数上有模式匹配.
global 用于引用顶级.NET命名空间.
if 用于条件分支结构.
in 用于序列表达式,在详细语法中用于将表达式与绑定分开.
inherit 用于指定基类或基本接口.
inline 用于表示应直接集成到来电者的功能代码.
interface 用于声明和实现接口.
internal 用于指定成员在程序集中可见但不在其外部.
lazy 用于指定仅在需要结果时才执行的计算.
let用于将名称与值或函数关联或绑定.
let! 用于异步将名称绑定到异步计算结果的工作流,或者,在其他计算表达式中,用于将名称绑定到结果的计算类型.
match 用于通过将值与模式进行比较来进行分支.
member 用于声明对象类型中的属性或方法.
module 用于将名称与一组相关类型,值和函数相关联,从逻辑上将其与其他代码分开.
mutable 用于声明变量,即可以更改的值.
用于关联名称与一组相关的类型和模块,从逻辑上将其与其他代码分开.
new

用于声明,定义或调用创建或创建对象的构造函数.

也用于泛型参数约束以指示类型必须具有某个构造函数.

not 实际上不是关键字.但是,组合中的结构不是用作通用参数约束.
null

表示没有对象.

也用于通用参数约束.

of 在受歧视的联合中用于指示值类别的类型,以及在委托和异常声明中.
open 用于使命名空间或模块的内容可用而无需限定.
or

与布尔条件一起用作布尔值或运算符.相当于||.

也用于成员约束.

override 用于实现与基本版本不同的抽象或虚拟方法的版本.
private 限制成员访问相同类型或模块的代码.
public 允许从外部访问会员类型.
rec 用于表示函数是递归的.
return 用于指示作为计算表达式结果提供的值.
return! 用于表示计算表达式,在计算时,它提供包含计算表达式的结果.
select 在查询表达式中使用指定要提取的字段或列.请注意,这是一个上下文关键字,这意味着它实际上不是一个保留字,它只在适当的上下文中表现为关键字.
static 用于指示可以在没有类型实例或共享的值成员的情况下调用的方法或属性一个类型的所有实例.
struct

用于声明结构类型.

也用于通用参数约束.

用于模块定义中的OCaml兼容性.

then

用于条件表达式.

也用于在对象构造后执行副作用.

to 用于for循环以表示范围.
true 用作布尔文字.
try 用于引入可能生成异常的代码块.与一起使用或最终.
type 用于声明类,记录,结构,区别联合,枚举类型,度量单位或类型缩写.
upcast 用于转换为继承链中较高的类型.
use 对于需要调用Dispose的值,使用而不是let免费资源.
use 使用而不是让!在异步工作流和其他计算表达式中,需要调用Dispose来释放资源.
val 在签名中用于表示值,或在有限情况下用于声明成员的类型.
void 表示.NET void类型.在与其他.NET语言互操作时使用.
when 用于模式匹配的布尔条件(当守卫时)并为泛型类型参数引入约束子句.
while 介绍一个循环结构.
with 与模式匹配表达式中的match关键字一起使用.还用于对象表达式,记录复制表达式和类型扩展以引入成员定义,并引入异常处理程序.
yield 在序列表达式中用于生成序列的值.
yield! 在计算表达式中用于将给定计算表达式的结果附加到包含的结果集合中计算表达式.

一些保留的关键字来自OCaml语言 :

asrlandlorlsllsrlxormodsig

保留一些其他保留关键字以供将来扩展F#.

atomicbreakcheckedcomponentconstconstraintconstructor
continueeagereventexternalfixedfunctorinclude
methodmixinobjectparallelprocessprotectedpure
sealedtailcalltraitvirtualvolatile

F#提供两种类型的评论 :F#中的评论

  • 一行注释以//符号开头.

  • 多行注释以(*结尾*结尾)开头).

F#中的基本程序和应用程序入口点

一般来说,你没有任何明确的入口点对于F#程序.编译F#应用程序时,提供给编译器的最后一个文件成为入口点,该文件中的所有顶级语句都是从上到下执行.

编写良好的程序应该有一个顶级语句可以调用程序的主循环.

一个极简主义的F#程序,它会在屏幕上显示'Hello World':

(* This is a comment *)
(* Sample Hello World program using F# *)
printfn "Hello World!"

编译并执行程序时,它会产生以下输出 :

Hello World!