F#程序设计-入门(2)

    在上篇文章中,我们利用"Hello,World"写出了第一个F#程序。接下来的第二个程序是在控制台中接受两个命令行参数的,并在控制台中打印出来。在C、C++以及C#语言中,所有的程序都有一个共同点,即程序的入口都是以静态的Main方法来执行的,然而,在F#中,可能就要打破这种惯例了,回到前次创建的F#项目中,在Program.fs输入以下代码:

 

然后在Build菜单中编译整个项目,编译成功后,让我们看看运行效果吧

运行编译后的程序时,在不输入参数的情况下,抛出了异常"Unhandled Exception: System.Exception: Error: Expected arguments <greeting> and <somebody>",然后再次运行程序,这次我们在后面输入两次参数,程序能正常执行了。看到这,对于没有Main函数,就能执行程序,大家一定感到很奇怪吧,F#程序不需要定义静态Main函数,关键是用到了[<EntryPoint>]这个特性。现在,让我们从几个方面来分析这个程序吧。

    首先,从值的定义上来分析。在上面的程序中,我们定义了三个变量greeting, somebody,dateTime,关键字let的作用是把值绑定到定义好了的变量中。这里需要指出的是,F#的变量在默认情况下一旦初始化后将不允许再进行改变,这点跟Erlang语言一样。因为作为一个并行开发,特别是在用来运行在多核上的程序,如果一个变量可以多次赋值,就不得不应付共享内存带来的问题,要想不破坏共享内存,就必须在访问时对其加锁,程序还要保证在操纵共享内存是不会崩溃,所以F#作为一个函数式编程语言,变量一定赋值,不允许改变,这样以后F#定义的类型将没有可变状态,也就没有共享内存,在多核中就不会存在锁了。F#也是区分大小写的,因此如果两个变量的名称是一样的,仅仅是存在于大小写不同,那么,F#编译器也将视为两个不同的变量,如下面的定义:

    let  a = 65

    let  A = 65

定义一个变量,可以是任何的字母组合,如数字,_,或'。然而,变量的命名必须以字母或者"_"来开头,这点跟其他的开发语言是一样的。

   第二,从代码缩进以及代码块上分析。众所周知,在C#语言中,用大括号({})来区别一个完整的代码块以及用分号(:)来区别代码行之间的结束,对于空格,在C#中除了影响代码的美观外是没有多大的实际意义的。在F#中,则相反,在F#没有大括号以及分号的存在,空格是区别代码段完整的唯一因素,而且稍有不慎,则代码则编译不过。回顾我们的第二个程序,注意在我们的方法programEnter中,下一行的代码if语句缩进了4个空格,而if语句的下一行代码failwith 也缩进了4个空格:

 

let programEnter(args : string[]) =
    if args.Length <> 2 then
        failwith "Error: Expected arguments <greeting> and <somebody>"

 

在日常开发中,对于F#的缩进,我们可以习惯于用一个Tab制表符来控制,正常情况下一个Tab制表符对应4个空格,不过对应多个空格,可以在VS 2010中的选项中进行设置的。如果一个项目存在多人开发,由于个人的爱好或者开发工具的不同,可能利用tab制表符来控制的代码缩进到了另外一个IDE中会出现混乱的地方,比如在当前开发人员的IDE中定义的一个Tab制表符是4个空格,而另外一个程序员的IDE定义的是一个空格,则F#代码到时则可能会出现编译不通过的情况了,所以最好的办法就是尽量少用Tab键来控制代码缩进。在F#中,何时代码缩进,一个普遍的规则就是,在一个方法定义后的下一行代码就要缩进4个空格以及在每个关键字(比如if....then...else)中的代码段内每行代码缩进4个空格。

   第三,对于C#开发者,看到程序一开头的那句"open System",就会想到C#中的using语句了。没错,在F#如果需要引入别的程序集或者命名空间内的模块、函数或者类型,就需要利用到open关键字了,它的作用跟C#的using一样。在F#中,可以实现与.NET类库的相互操作,可以调用.NET类库的方法、类。如"  let dateTime = DateTime.Now.ToString("yyyy-MM-dd")"这句中的DateTime类。不仅如此,F#还可以与C#编写的类型进行互操作,两者之间可以实现相互的调用,这些以后将会慢慢介绍到。

   最后,介绍到的是F#的代码注释。在F#中,主要用三个注释,第一个是我们经常用到的"//",这普通用于在一些关键的代码行中,注释此句的作用;第二个个是以"(*"开头并且以"*)"结尾,这种注释跟C#中的"/*...*/"注释的作用是一样的,都是将多行连在一起的代码注释到。最后一个就是以"///"三个斜杠开始,如果在一个函数或者一个类型中用"///"做了注释时,在类型或者方法引用的地方,当你把鼠标停悬到其上面时,Visual Studio将显示注释的文本

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值