TCL基本语法1语言简介TCL缩短工具命令语言的形式。
由加州大学伯克利分校的约翰Ousterhout设计它。
它是一种脚本语言,由其自身的解释器,它被嵌入到开发应用程序的组合。
TCL最初在Unix平台中。
后来移植到Windows,DOS,OS/2和Mac OSX。
TCL非常类似于其他UNIX的shell语言,类似Bourne Shell (Sh), the C Shell (csh), the Korn Shell (sh), 和Perl。
它的目的是提供程序与其他程序,也是作为一个可嵌入的翻译相互作用的能力。
虽然原来的目的是为了使程序能够进行交互,可以找到由Tcl/Tk 编写的完全成熟的应用。
1.1TCL特性TCL的特点如下:1、减少开发时间。
2、功能强大和简单的用户界面工具包整合传统知识。
3、一次编写,随处运行。
它可以运行在Windows,Mac OS X和几乎所有的Unix平台。
4、有经验的程序员很容易上手,因为语言就是这么简单,可以在几个小时或几天学习Tcl就可以搞定。
5、可以轻松地用Tcl扩展现有的应用程序。
另外,也可以包括Tcl的用C,C++或Java 来扩展Tcl,或反之亦然。
6、有一组功能强大的网络功能。
7、最后,它的开源,免费的,可以用于其他无任何限制商业应用。
2基本语法2.1命令结构commandName空格arguments。
每条命令之间通过换行或者;隔开。
例如:#设置变量foo为0set foo 0set bar 1;puts $bar; #设置(set 为一个Tcl命令)变量bar为1,输出(puts也是一个Tcl命令)bar2.2注释使用#注释,不过要注意的是下面的注释是错误的:set foo 0 #设置变量foo为0,这种注释是错误的因为tcl解析器总是认为一条命令应该以换行或者分号结束,其他的在同一行中都认为是参数。
所以正确的应该是:set foo 0#设置变量foo为0,这种注释是正确的set foo 0; #设置变量foo为0,这种注释是正确的3变量定义及基本操作tcl可以定义两种类型的变量:变量和数组。
3.1变量1、在tcl变量不需要声明就可以直接赋值。
给变量赋值的例子:set foo 0;set foo “zero is 0”; #加引号的作用是为了告诉编译器包括空格2、取得变量的值可以在对应的变量名前面加$来取得,例如:puts $foo; #表示打印foo的值3.2数组1、数组也不需要声明,直接赋值,例如:set arr(0) 0;set arr(1) 1;一个比较有意思的地方是数组下标可以不按照顺序来写,也不一定是数字,可以是字符串。
例如:set arr(3) a;set arr(num) b;当然tcl数组也支持多维数组,声明形式为:set arrs(1,1,1,1,1) a; #随便多少维2、可以使用puts $arr(3);的形式来获得数组某个元素的内容,也可以使用parray命令:parray arr; #将打印出arr数组所有元素内容4变量高级操作4.1字符串操作string命令基本语法如下(这里的string1,string2可以是字符串也可以是变量,option 是下列选项之一)string option string1 string2;option的操作选项:compare 按照字典的排序方式进行比较。
根据string1 <,=,>string2分别返回-1,0,1first 返回string2中第一次出现string1的位置,如果没有出现string1则返回-1last 和first相反trim 从string1中删除开头和结尾的出现在string2中的字符tolower 返回string1中的所有字符被转换为小写字符后的新字符串toupper 返回string1中的所有字符串转换为大写后的字符串length 返回string1的长度例子:set str “hello world!”string length $str; #将返回变量str的长度4.2数字操作因为tcl中只有一个string类型的变量,所以当要操作数字进行运算的时候,tcl提供了incr和expr两个操作命令。
1、incr的基本用法为:incr variable integer(variable必须为数字)例如我要将一个数字加3set a 3;incr a 3; #将a加3,如果要减3,则为incr a -3;默认的incr a等同于a++的意思,即本身自增1。
2、expr的基本语法为:expr function numberexpr是为了提供更加复杂的操作而设计的一个语法,比如运算乘除法等等。
在执行算术操作的时候必须将expr命令放在算术操作之前。
例如:set a 20; set b 4;set c [expr $a/$b]; #此时的c的值为5#当[]出现在一组命令中,Tcl把中括号之间的所有语句当做一组Tcl命令。
Tcl对这组命令进行解释,并用结果代替[]之间的文字。
除此之外,expr还能够识别一些函数及其返回值如下:abs(x) x的绝对值round(x) x舍入后得到的整数值sin(x) x的正弦…………………………………举个例子:set a [expr sin(0.3)]; #计算0.3的正弦5运算符运算符是一个符号,告诉编译器执行特定的数学或逻辑操作。
Tcl语言有丰富的内置运算符,运算符提供的以下几种类型:算术运算符、关系运算符、逻辑运算符、位运算符、三元运算符。
下表列出了所有Tcl语言支持的算术运算符。
假设变量A=10,变量B=20,则:5.2关系运算符下表列出了所有Tcl语言支持的关系运算符。
假设变量A=10,以及变量B=20,则:5.3逻辑运算符下表列出了所有Tcl语言支持的逻辑运算符。
假设变量A=1和变量B=0,则:位运算符适用于位并进行逐位操作。
&, |, 和^ 的真值表如下:假设,如果A =60;且B =13;现在以二进制格式它们将如下:A = 0011 1100B = 0000 1101-----------------A&B = 0000 1100A|B = 0011 1101A^B = 0011 0001通过Tcl语言支持位运算符列在下表中。
假设变量A=60和变量B=13,则:5.5三元运算符6流控制Tcl提供两种流(条件判断)控制语句if、switch。
判断条件可以是运算符操作结果、数字0或非0、true或false6.1if控制流基本语法:if { 表达式} {#运算;} else {#其他运算;}需要注意的是if…else、if…elseif…中的else、elseif必须要和if的后面一个{在同一行。
例如:set a 3if {$a > 4} {puts "3>4";} else {puts "4>3";}6.2switch控制流基本语法:switch $x {数值1 { 操作1; }数值2 { 操作2; }}例如:set a 6switch $a {0 { puts "a is 0" }1 { puts "a is 1" }2 { puts "a is 2" }3 { puts "a is 3" }4 { puts "a is 4" }default { puts "a is $a" }}7循环TCL语言提供循环以下类型来处理循环。
循环控制语句改变其正常的顺序执行。
当执行离开范围,在该范围内创建的所有自动对象被销毁。
TCL支持下面的控制语句。
continue语句导致循环跳过它的主体的其余部分,并立即重新测试其条件声明之前break语句终止循环或switch语句并将执行立即循环或切换到下面的语句7.1while循环while循环的语法是:while {condition} {statement(s)}在这里,声明(S)可以是单个语句或语句块。
所述条件可以是任何表达,真是指任何非零值。
循环迭代当条件为真。
当条件为假,则程序控制进到紧接在循环之后的代码行。
流程图:在这里,while循环的关键点是,当条件测试结果为假时,在循环可能不会永远运行。
循环体将跳过while循环后的第一个语句将被执行。
例如:set a 10while { $a < 20 } {puts "value of a: $a"incr aif { $a>15 } {break; #判断提前结束循环}}7.2for循环for循环的语法是:for {initialization} {condition} {increment} {statement(s);}流程图:初始化步骤首先执行,并且只有一次。
这一步可以声明和初始化任何循环控制变量。
不需要把一个声明放在这里,只要给定一个分号。
接着,条件condition进行了计算。
如果为真,则执行循环体。
如果是假的,循环体不执行,for循环之后的流程控制跳转到下一条语句。
循环的执行主体之后,控制流跳转回到增量语句。
此语句可以更新任何循环控制变量。
这个语句可以留空,只需要一个分号。
条件现在重新计算评估。
如果条件为真,循环执行的过程中重新执行(循环体,然后增加步,然后再次计算条件)。
之后当条件为假时,for循环终止。
例如:for { set a 1 } { $a<10 } { incr a } {for { set b 1 } { $b<=$a } { incr b } {set c [expr $a*$b]puts -nonewline "$b*$a=$c "if { ($c==6 || $c==8) && $b>1 } {puts -nonewline " "}}puts ""}8TCL过程Tcl过程是什么,只不过代码块的一系列命令,提供了一个可重复使用的特定功能。
它被用于避免相同的代码被重复在多个位置。
Tcl过程相当于许多编程语言中使用函数的功能。
Tcl proc命令用于定义一个Tcl过程。
创建一个简单过程的语法如下所示:proc procedureName {arguments} {body}一个简单程序的例子如下:proc helloWorld {} {puts "Hello, World!"}helloWorld; #调用8.1过程的多个参数对于程序带参数如下的例子所示:proc add {a b} {return [expr $a+$b]; #return返回值}puts [add 10 30]; #调用8.2过程的可变参数对于程序带参数如下图的例子所示。