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