TCL语法详解之if语句

        if语句是计算机语言中最常见的逻辑控制语句,它实现了最基础的判断逻辑。

        TCL语言中的if语句的两种语法如下:

        (1):if expr1 ?then? body1 ?else? ?body2?

        (2):if expr1 ?then? body1 elseif expr2 ?then? body2 elseif ... ?else? ?bodyN?

        第一种语法是单条件判断和单条件全域判断的形式。单条件判断是指只有一个判断条件,但是他可分为半域控制和全域控制两种。半域控制只包含一个if判断和其条件成立时执行的逻辑语句块,全域判断则在此基础上还包含了其条件不成立时需要执行的else逻辑语句块。

        第二种语法则是if语句的一种多分支判断逻辑结构,它的每个判断分支逻辑都互斥,同时在语法上它也有一个判断顺序的存在。

        这两种语法中then关键字都是可以省略的。then关键字除了从自然语义上更让人易懂外,从功能上没有实际的价值。这也许是设计者特意增加的,以便初学者能够更好的理解这个语法。

        if语句实现的逻辑流程如下所示:

        正如我们前面所描述的,if的多条件判断是有执行顺序的。接下来我们将模仿TCL解释器来解释执行if命令。

        首先我们来看一段代码:

proc EvalIfCmd {ifcmd clevel} {
	set res ""
	set newifcmd ""
	foreach ifblock $ifcmd {
		if {$ifblock ne "then"} {
			lappend newifcmd $ifblock
		}
	}
	set elseblock ""
	if {[lindex $newifcmd end-1] eq "else"} {
		set elseblock [lindex $newifcmd end] 
	}
	
	foreach {block1 block2 block3} $newifcmd {
		if {$block1 ne "else"} {
			if {[uplevel $clevel [list expr $block2]]} {
				set res [uplevel $clevel "$block3"]
				set elseblock ""
				break
			}
		}
	}
	
	if {$elseblock ne ""} {
		set res [uplevel $clevel $elseblock]
	}
	return $res
}

        这段代码定义的函数实现了对if命令的解释执行。根据之前我们列举的两种if语句的语法规则,我们可以将if命令看做一个字符串列表(实际上所有的TCL命令我们都可以看做一个字符串列表)。这个时候我们将分析出一个规律,除了else和其对应的逻辑部分,其余部分我们在去除了then关键字之后,它实际上是每3个元素组成一个逻辑分支。于是我们先去除了if语句列表中的then关键字,然后通过foreach语句来三个三个的遍历我们if命令中的元素。

        我们每次遍历的三个元素(除了最后的else逻辑分支外)依次分别是“关键字”(if或者elseif)、“逻辑判断语句”(一个返回值为1或者0的命令、表达式或者变量)以及“判断语句”值为1时需要执行的“逻辑语句块”。当我们知道了这三者在if命令中的作用之后,我们就可以根据之前给出的逻辑流程图来解释执行if命令了。

        当我们了解了if命令的解释执行步骤之后,我们也可以设计类似if语句的新的逻辑控制语句,希望我们的读者能够灵活应用,开拓思维,创造创新。

        感谢你对新爸的关注和支持,你的鼓励和支持是我不断探索和创新的动力源泉!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值