条件分歧 java_F#入门-第二章 F#基础-第七节 条件分歧

■ 条件分歧

F#中,关于条件分歧有几种表达方法,if语句为其中之一。使用if语句,可以编程表达“如果...就...”的条件。

F#中对于if语句的定义如下所示。

用[]括起来的地方为可选项,表达式后加*的地方表示该表达式可重复书写。

ifif语句 := if 表达式1 then 表达式2 [elif 表达式3 then 表达式4]* [else 表达式5]

上面这段语句的意思是

如果if表达式1条件成立(表达式1的值为true),则继续执行表达式2。

否则(elseif)如果表达式3条件成立(表达式3的值为true),则继续执行表达式4。

否则继续(else)执行表达式5。

如果条件成立,执行了后续表达式之后,不再执行其他不符合条件的表达式。

表达式1与表达式3为条件判断表达式,判断表达式中的条件是否成立(返回true或false)。

同时,表达式2,表达式4,表达式5必须返回同样的数据类型。

if语句默认返回unit型的值,所以如果省略“else 表达式5",则表达式2与表达式4必须要将返回值写成unit类型的值(),因为省略的表达式5返回unit类型,这一点请注意。

同时,整段语句返回程序真正执行到的表达式所返回的值。

if语句示例

if a=1 then print_endline "hello world";;

上面这段语句表示,如果a的值为1,则显示"hello world"。

“=“符号判断等式两边是否相等。

相等返回true

不相等返回false

请注意在c语言及Java语言中,=表示赋值,==才表示条件判断。

多条件分歧示例

let time = 15 in

if time < 11 then printfn "Good morning"

elif time < 16 then printfn "Good afternoon"

elif time < 20 then printfn "Good evening"

else printfn "Good night";;

以上这段语句根据不同的time值,显示相对应的字符串。将time修改成15之外的值,将显示与之相对应的字符串。

因为语句2与语句3的数据类型不同所产生的错误

if true then 1 else "one";; /这句将产生错误

请注意以下示例。

语句2与语句5的数据类型不同,所以也会产生错误。

省略else时也须注意

if true then 1;; //这句也是错误的

if true then 1 else 2;; //这样写是正确的

上面这个示例中,因为else被省略了,所以else语句返回(),1为int型,所以引发编译错误。

在没有熟悉F#的时候,有很多特别容易忽略而引发错误的地方,所以请特别注意.

if语句返回值的利用

let kekka = if 1=2 then "OK" else "NG" in

print_endline kekka;;

上述示例中,1与2如果相等,kekka变量值绑定为OK,如果不相等,变量值绑定为NG,然后将该变量值显示。

习惯使用C语言或Java语言的人可能会看不懂,但是F#中是可以这样直接利用if语句所返回的值的。

■ 单分号与双分号

双分号用来表示语句结束。

单分号用来在语句中作分隔。

分号的使用

let str = "hello" in

print_string str;

print_endline "world";;

在介绍基本类型的时候,我们已解释过任何语句都会返回某个值,哪怕是unit值()。用单分号做分隔时,语句返回分隔符“;”前的最后一句语句的返回值,单分号分隔符前面的语句的返回值均被舍弃,同时,不完全语句(单分号前的语句或加了括号的语句)如果返回()以外的值,均被判断为错误,所以,这种情况下需要使用到ignore函数。

ignore函数示例

open System.Windows.Forms;;

let debug = true in

if debug then ignore (MessageBox.Show "in debug");;

执行以上这段代码,将显示“in debug"对话框,MessageBox.Show函数返回的值为DialogResult类型,所以为了让它返回unit类型,需要使用ignore函数。

另外,如果使用管道运算符,可以编写类似以下代码。

管道运算符使用示例

MessageBox.Show "in debug" |> ignore;;

另外,因为if语句后面紧跟语句,所以编写复杂的语句时需要用括号括起来。

设想的结果与实际结果不一致的例子

let debug = false in

if debug then

print_string "now ";

print_endline "in debug";;

正确写法

let debug = false in

if debug then

(print_string "now ";

print_endline "in debug");;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值