当前位置: 首页 > 文档资料 > F# 中文教程 >

Basic 语法

优质
小牛编辑
127浏览
2023-12-01

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

F#中的标记

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

  • Keywords
  • 符号和运算符

F#关键词

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

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

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

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

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

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

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

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

表示没有对象。

也用于通用参数约束。

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

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

也用于成员约束。

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

用于声明结构类型。

也用于通用参数约束。

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

then

用于条件表达式。

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

to用于for循环以指示范围。
true用作布尔文字。
try用于引入可能生成异常的代码块。 with或一起使用。
type用于声明类,记录,结构,区分联合,枚举类型,度量单位或类型缩写。
upcast用于转换为继承链中较高的类型。
use对于需要调用Dispose以释放资源的值,使用而不是let。
use!用而不是让! 在异步工作流和其他计算表达式中,需要调用Dispose来释放资源。
val在有限的情况下,在签名中用于指示值,或用于声明成员的类型。
void表示.NET void类型。 与其他.NET语言互操作时使用。
when用于模式匹配的布尔条件(when guards) ,并为泛型类型参数引入约束子句。
whileIntroduces a looping construct.
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!