劉嘉明
摘 要:關(guān)于TCL語(yǔ)言,想必很多人都沒(méi)有聽(tīng)說(shuō)過(guò),在語(yǔ)言中被大家熟知的就是出名的C語(yǔ)言,C++,C#,java語(yǔ)言,還有最近很流行的python人工智能語(yǔ)言。但是本文就拿出一個(gè)算是很古老的T語(yǔ)言,其實(shí)T語(yǔ)言的應(yīng)用很廣,用于控制工具,在一些測(cè)試下經(jīng)常用到,但是現(xiàn)在python的出現(xiàn)打破了T語(yǔ)言在其領(lǐng)域的地位。本文淺談TCL語(yǔ)言及一些控件,都是本人在學(xué)習(xí)T語(yǔ)言和python中的一點(diǎn)拙見(jiàn)。
關(guān)鍵詞:TCL;工具控制;TK控件
一、TCL的起源與發(fā)展
要談?wù)撘粋€(gè)語(yǔ)言就要先知道這個(gè)語(yǔ)言的來(lái)歷,就像我們學(xué)習(xí)C語(yǔ)言的時(shí)候,老師也會(huì)和我們說(shuō)C語(yǔ)言的來(lái)源,演變過(guò)程,進(jìn)化與完善。
Tcl 是“工具控制語(yǔ)言(Tool Command Language)”的縮寫。Tk 是 Tcl“圖形工具箱”的擴(kuò)展,它提供各種標(biāo)準(zhǔn)的 GUI 接口項(xiàng),以利于迅速進(jìn)行高級(jí)應(yīng)用程序開發(fā)。
John K. Ousterhout于 1988 年開始開發(fā) Tcl/Tk(讀作“tickle tee-kay”),當(dāng)時(shí)其是加州大學(xué)伯克利分校(UCB)的教授。Tcl 是以可擴(kuò)展性、短的學(xué)習(xí)曲線和易于嵌入為特定目標(biāo)而設(shè)計(jì)的。Tk 的開發(fā)始于 1989 年,第一個(gè)版本于 1991 年問(wèn)世。
TCL語(yǔ)言簡(jiǎn)單易懂,功能強(qiáng)大,常用于快速原型的開發(fā),GUI,腳本,和測(cè)試。從測(cè)試行業(yè)接觸TCL,由于python的流行,發(fā)現(xiàn)tcl語(yǔ)言也在被取代。
就此說(shuō)說(shuō)我在TCL學(xué)習(xí)中的一些見(jiàn)解。探討有沒(méi)有學(xué)習(xí)TCL的必要性。
二、TCL語(yǔ)言到底是什么
TCL語(yǔ)言也常被稱:腳本語(yǔ)言,TCL語(yǔ)言其實(shí)包括兩部分:語(yǔ)言部分和庫(kù)部分。
(1)TCL語(yǔ)言的腳本部分
腳本部分可以理解就是語(yǔ)言的命令部分:就比如:set a 10;puts $a;相當(dāng)與c語(yǔ)言的
打印命令:int a 10;printf(“%d”,a);就是通過(guò)發(fā)表命令給一些交互程序或者是一些文本編輯器,shell還要調(diào)試器。就比如C語(yǔ)言可以用程序?qū)懳谋疚募蜷_文本文件一樣。
TCL的語(yǔ)法簡(jiǎn)易,和高可擴(kuò)展性。
(2)TCL語(yǔ)言的庫(kù)部分
庫(kù)部分其實(shí)可以理解為庫(kù)函數(shù)包,而tcl的庫(kù)中含有一個(gè)腳本分析器來(lái)執(zhí)行腳本命令過(guò)程,也可以通過(guò)腳本解析創(chuàng)建新的過(guò)程,用于擴(kuò)充函數(shù)。這個(gè)庫(kù)能被嵌套應(yīng)用程序,該程序可以產(chǎn)生腳本命令并執(zhí)行過(guò)程。
(3)TCL交互界面
腳本命令可由用戶輸入,或者用戶接口中讀取,或者應(yīng)用程序產(chǎn)生。實(shí)現(xiàn)多交互。內(nèi)搭的腳本界面有tclsh和wish兩種界面,tclsh只支持tcl命令,wish能支持tcl和tk命令。
通過(guò)這些腳本交互界面可以直觀的了解語(yǔ)法的運(yùn)行。逐一執(zhí)行和得到結(jié)果,在創(chuàng)建過(guò)程時(shí)不打印結(jié)果。
(4)TCL/TK控件
TCL內(nèi)置TK(toolkit)圖形工具,和python的可視化庫(kù)中含有的TK類似,能直觀的顯示出來(lái),并且便于開發(fā)者開發(fā)一些新的交互界面使用。我們可以通過(guò)tk控件進(jìn)行腳本的控制,也可以用輸入界面控制tk控件。
三、淺談TCL的語(yǔ)法
認(rèn)識(shí)完tcl語(yǔ)言以后就來(lái)簡(jiǎn)單說(shuō)說(shuō)語(yǔ)法。
每一種語(yǔ)言都有特定的語(yǔ)法規(guī)則,就比如英語(yǔ)有英語(yǔ)語(yǔ)法,數(shù)學(xué)有計(jì)算公式,計(jì)算機(jī)語(yǔ)言少不了的就是語(yǔ)法了,然而很多比如簡(jiǎn)單的c語(yǔ)言有C語(yǔ)言語(yǔ)法,難的語(yǔ)法有java語(yǔ)法。當(dāng)然tcl也不例外,也有屬于自己的語(yǔ)法。
(1)TCL編程語(yǔ)法和格式
Tcl語(yǔ)言語(yǔ)法簡(jiǎn)單,因?yàn)閠cl只有一種數(shù)據(jù)類型:字符串。在腳本編譯里只識(shí)別成字符串,并且用與存儲(chǔ)值。減少了變量類型的干擾。簡(jiǎn)單的理解一下,要是學(xué)過(guò)C語(yǔ)言就知道,變量是一個(gè)缺少不了的東西,而在使用變量我們要先定義。比如說(shuō)是:int var 100;定義了一個(gè)整形的var,在tcl里我們也需要先對(duì)用到的變量進(jìn)行變量聲明和初始化,但是tcl里的變量沒(méi)有類型區(qū)分,因?yàn)樗挥幸粋€(gè)類型——字符串。所有的變量我們都可以用set 來(lái)定義,就像:set var 100;這里的100是字符串,但是你通過(guò)解析器運(yùn)算的話,自動(dòng)識(shí)別成整形,浮點(diǎn)等,就比如:expr $var+100;結(jié)果200。在這里注意$符,在tcl里運(yùn)用普遍就是相當(dāng)于傳參的東西。具體的語(yǔ)法還是要求從手冊(cè)里學(xué)習(xí)。里面很多符號(hào)運(yùn)算的規(guī)則,但是理解起來(lái)很方便。
TCL編程有固定的編程格式,就比如c語(yǔ)言也有格式一樣,分號(hào),反斜杠,這一類符號(hào)分運(yùn)用也有特殊規(guī)定。
(2)TK編程
TK圖像工具用起來(lái)方便簡(jiǎn)潔,安裝wish內(nèi)置TK控件庫(kù)。能夠直觀地方便的使用控件,不同于python的函數(shù)庫(kù)配置,而且python相對(duì)于難理解。
學(xué)習(xí)TCL的時(shí)候的感悟就是用起來(lái)很方便,但是功能卻一般。易上手難精通。
四、在學(xué)習(xí)中的一些體會(huì)
如果感覺(jué)有興趣不妨下載個(gè)wish85試試。在學(xué)習(xí)中偶爾一些大膽的想法,但是卻很難實(shí)現(xiàn)。
鄧拓說(shuō)過(guò):任何科學(xué)的結(jié)論都不應(yīng)該永恒不變的。
語(yǔ)言的精妙之處在于它的可開發(fā)性,可它的可用性?,F(xiàn)在的語(yǔ)言種類繁多,但是離不開共同的特點(diǎn)就是語(yǔ)言的語(yǔ)法精髓,在學(xué)習(xí) TCL發(fā)現(xiàn)語(yǔ)法類似C語(yǔ)言,而python是C語(yǔ)言的進(jìn)化。這幾種語(yǔ)言都有其共通之處。
大學(xué)剛開始學(xué)c語(yǔ)言的時(shí)候,覺(jué)得printf打印字符都很厲害,但是接觸語(yǔ)言以后發(fā)現(xiàn)語(yǔ)言并不只是這樣,就和學(xué)習(xí)TCL一樣的,最開是的歷程總是叫我們打印一串字符。
在c語(yǔ)言中指針相對(duì)來(lái)說(shuō)比較難的,因?yàn)樯婕暗降氖亲兞康膫鬏?,指針指向。但是學(xué)習(xí)TCL的時(shí)候沒(méi)有發(fā)現(xiàn)指針這東西了,這對(duì)于剛學(xué)習(xí)語(yǔ)言的人來(lái)說(shuō)很不錯(cuò)。Tcl的參數(shù)傳輸都是考字符串的,變量總是在字符串上,所以就有參數(shù)的傳輸問(wèn)題,早段時(shí)間在學(xué)習(xí)html的時(shí)候也遇到類似的參數(shù)傳輸問(wèn)題,但是傳輸方式不一樣。
我的體會(huì)就是:在tcl里面區(qū)分好全局變量和局部變量就差不多了,但是還有個(gè)上一個(gè)全局值與當(dāng)前全局取值的問(wèn)題,我在學(xué)習(xí)的時(shí)候在這吃到了不少苦頭。總是取到上一個(gè)計(jì)算值。我覺(jué)得這是初學(xué)者應(yīng)該考慮的問(wèn)題。我的辦法就是通過(guò)局部變量釋放全局的上一個(gè)值。
學(xué)習(xí)一種語(yǔ)言沒(méi)有可以少走的路。
五、總結(jié)
TCL腳本語(yǔ)言簡(jiǎn)單方便,也容易學(xué)習(xí)入手,但是精通的確要花時(shí)間。但是在慢慢落后的語(yǔ)言我覺(jué)得也值得去學(xué)習(xí)。畢竟開發(fā)的沒(méi)有限度,在論壇上,博客上,網(wǎng)頁(yè)上找到關(guān)于tcl的都是熟悉的電視機(jī)品牌。Wish也在更新,要是劈開利益,單看學(xué)習(xí)還是很值得去探索一下的,弄一個(gè)腳本論壇,腳本比拼。這種學(xué)術(shù)交流也能提高自己的思維和發(fā)現(xiàn)其他語(yǔ)言的思路。但是在應(yīng)用上還是要跟潮流,畢竟python的流行也不是憑空產(chǎn)生的。語(yǔ)言都有自己的優(yōu)點(diǎn)。
要是覺(jué)得自己有時(shí)間還是可以接觸一下每種語(yǔ)言,比較一下語(yǔ)言的特點(diǎn)。
在博客上的大佬們都是掌握多種語(yǔ)言的,c,c#,c++,java,python,html,js……或者不全會(huì)至少了解。
正所謂:金無(wú)足赤,人無(wú)完人。學(xué)多者多學(xué),不學(xué)者無(wú)術(shù)。
Eg: set learning_is_happy “學(xué)習(xí)是件快樂(lè)的事”
Button .button –text “$learning_is_happy”-command [list learn .button]
Proc learn .button {
Global learning_is_happy
Puts $learning_is_happy
}
Grid .button
Console show
##按鈕顯示###(復(fù)雜寫法可以演變)
參考文獻(xiàn):
[1]TCL編程初步.pdf.
[2]Tcl/tk入門經(jīng)典.