最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

2022年的Tcl編程語言入門參考 1:語法

2022-04-05 21:06 作者:象喻  | 我要投稿

這是我之前錄制的《編程拾荒 TCL/TK》系列視頻的文字修訂版,做了一些補充、修正和刪減。


前置聲明

好奇點進來的,可以直接退出了??。如果有中國冷門語言排行榜的話,Tcl肯定榜上有名。談?wù)撈渌Z言都是適合/不適合做什么,談Tcl都是還有哪些地方在用它。所以除非你知道自己在干什么,否則不建議繼續(xù)閱讀。

另:如果初學(xué)編程感到絕望,倒也不反對你在Tcl/Tk這棵樹上再試一次??……因為它涉及的知識概念比其它語言要少

推薦學(xué)習(xí)路線圖

針對windows編程初學(xué)者,建議:

  1. 先了解"命令提示符"的常用命令和運行方式

  2. 學(xué)習(xí)一些bat批處理命令、PowerShell的基礎(chǔ)知識

  3. 掌握Tcl語法和常用部分

  4. 學(xué)習(xí)Tk(編寫帶圖形界面的程序)

  5. freewrap(把Tcl/Tk源代碼打包成單個執(zhí)行程序,跨平臺)

  6. 根據(jù)具體需求繼續(xù)學(xué)習(xí)

命令提示符可以讓初學(xué)者掌握命令行交互模式;批處理命令、PowerShell可以了解編程與自動化的工作模式,這兩方面的學(xué)習(xí)投資長期有效。

Tcl語言的語法與命令行類似,因為用途少,只需要掌握基本語法和功能即可。Tk圖形庫雖然在今天沒有什么優(yōu)勢,但基礎(chǔ)部分跟流行的圖形庫是相通的,此外Tk還是Python的內(nèi)嵌圖形庫,至少還有用武之地。freewrap可以生成無需安裝的單一可執(zhí)行程序,方便分發(fā)、部署到其它電腦上。

另:?????對于熟練的Linux/Unix/FreeBSD使用者來說,僅憑官網(wǎng)資料+翻譯軟件就足夠了。


對于程序員而言

Tcl/Tk是由C編寫的典型工具語言:專注于解決具體問題,不太關(guān)心語言發(fā)展的可能性。Tcl就像是用C語言編寫的工具包,而流行的語言更接近于一個平臺。Tcl/Tk專注于實用,抽象類功能發(fā)展的非常慢,比如直到8.6版才加入官方面向?qū)ο笾С?。其它語言的擴展庫大部分都是用自身編寫的,Tcl一半以上的庫都是用C語言編寫的(真·硬核擴展)。

Tcl代碼偏向于快速解決具體需求,而不擅長歸類、抽象與算法。此外,大段代碼的可讀性不佳,多業(yè)務(wù)邏輯的代碼更是害人害己;但是對于Tcl可以解決的具體問題,代碼非常簡短,比如:借助 twapi 庫編寫的win系統(tǒng)鼠標點擊器(按順序依次點擊固定點位)只須幾十行。


語法

TCL語言誕生于1988年,那還是UNIX和DOS系統(tǒng)的時代,那時主要通過敲命令(以“命令+空格+參數(shù)”的形式)來控制系統(tǒng)。當(dāng)時主要使用C語言,但是C語言的入門難度太高了,為了降低編程的難度,John K. Ousterhout開發(fā)了TCL語言。TCL誕生的目的就是為了降低編程的難度,所以選擇了跟命令一樣的語法,讓計算機操作員可以直接進化成程序猿。

??官方文檔:https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm

提醒:語法部分涉及的多個概念會在各自的章節(jié)中詳細介紹

最基本的語法形式:命令 參數(shù)1 參數(shù)2 參數(shù)3 ....

其中空白字符(空格/tab)用來分割命令和參數(shù),并且允許多個連續(xù)空白字符。命令加上所有的參數(shù),被稱呼為一條語句。 語句的結(jié)束用換行或者是英文分號表示。
參數(shù)分為"預(yù)設(shè)"和"人為指定"兩種,"預(yù)設(shè)參數(shù)"是預(yù)先設(shè)定好的參數(shù),用于調(diào)整命令的具體工作方式;"人為指定"就是我們給出的內(nèi)容。

注:Tcl語言的"命令"跟其它語言的"函數(shù)"、"方法"、"過程"是類似的概念,每個命令都有具體的功能。

# 用于代碼注釋,也就是在代碼里寫一些給碼農(nóng)看的說明(不影響代碼運行)




字符串

Tcl代碼中所有內(nèi)容都被當(dāng)做字符串(包括數(shù)字),語句中的命令跟參數(shù)也都是字符串,Tcl只是把語句中的第一段字符串當(dāng)作命令、后續(xù)字符串當(dāng)成參數(shù)而已。相較其它語言來說,Tcl語言涉及的知識點很少。當(dāng)然這種簡潔是有代價的,Tcl語言在執(zhí)行時會把字符串轉(zhuǎn)換成合適的數(shù)據(jù)類型(比如整數(shù)、浮點數(shù)……)所以執(zhí)行效率不高(反正也沒人用它做數(shù)據(jù)計算)。

字符串的表現(xiàn)方式有三種,一默認就被當(dāng)作字符串,二英文雙引號,三大括號{}

默認:直接書寫的字符串,限制:不能有空格、不能換行、不能包含在語法層面引起歧義的字符

"":編程語言普遍使用的字符串表現(xiàn)形式,可以包含空格,可以換行,可以執(zhí)行轉(zhuǎn)義和替換操作(后續(xù)介紹)

{}:與雙引號類似,但不會對字符串進行替換和轉(zhuǎn)義,可以包含多種特殊字符,支持嵌套{}。如果出現(xiàn)單個的大括號,則會導(dǎo)致語法錯誤。特殊規(guī)則:對轉(zhuǎn)義字符串 \{\} 不會當(dāng)作單個大括號報錯,但也不會轉(zhuǎn)義。


注:字符串區(qū)分大小寫,即Tcl語言區(qū)分大小寫

替換

替換語法包括變量替換和命令替換,用于在字符串中根據(jù)規(guī)則替換字符

變量替換

除{}之外的字符串中以$開頭的單詞將進行變量替換,即把變量的值放到"$變量名"所在的位置。實際作用類似于其它語言的變量調(diào)用。




命令替換

中括號 [ ] 里的內(nèi)容將被視為代碼(可以包含任意多條語句)其中最后一條語句的執(zhí)行結(jié)果將被放到 [] 所在的位置。嵌套的 [ ] 會先處理最里面的語句,但要注意這其實不算優(yōu)先級,因為流程是:發(fā)現(xiàn)首個 [ 時,中括號內(nèi)的內(nèi)容視為語句,為了進行替換操作,先處理 [ ] 里的語句;然后在語句中又發(fā)現(xiàn)了 [ ,于是為了進行替換操作就再處理里面的語句——所有的過程都是為了進行替換操作。




轉(zhuǎn)義

轉(zhuǎn)義也可以看作是一種替換,但是在其它語言中都有轉(zhuǎn)義語法,所以單獨介紹了。轉(zhuǎn)義的作用是在字符串中插入特殊字符或者消除字符在語句中的歧義,比如在字符串中包含英文引號、分號或大括號。



注:好奇心旺盛的朋友會發(fā)現(xiàn)上例中美元符號即便不轉(zhuǎn)義也可以正常使用,這是因為字符串中美元符號后面緊跟的不是英文和數(shù)字(將在變量部分介紹)。雖然在中文中可以正常使用,但還是建議養(yǎng)成良好習(xí)慣,編程時少玩特例(信息安全專業(yè)除外)

結(jié)尾換行

語句在一行的末尾寫 \ 斜杠,然后換行,表示下一行也是該條語句。




非英文字符

Tcl/Tk中非英文字符統(tǒng)一使用unicode編碼,這是官方設(shè)定,當(dāng)然也有一些變通:
??自定義命令名可以直接使用中文,不影響運行
??變量名可以使用中文,但在使用時要用大括號括起來 ${變量名} 否則有可能導(dǎo)致報錯
??win系統(tǒng):把源代碼的編碼設(shè)為系統(tǒng)編碼,可以直接使用中文,但在不同系統(tǒng)或不同解釋器時,有可能因編碼不匹配報錯

原則:如果代碼只給自己用隨便,如果給別人用最好遵守官方文檔




參數(shù)擴展

這是8.6版新加的高級語法,需要先了解列表才能理解,也被翻譯為"參數(shù)展開"

正常情況下,我們將列表作為參數(shù)時,整個列表會被視為一個參數(shù)。但是很多情況下這是不行的,該語法將{*}后面緊接著的非空白內(nèi)容視為一個列表,把列表的內(nèi)容放在 {*} 所在的位置,并將列表中的每個元素都視為參數(shù)(相當(dāng)于把列表拆開了)。




執(zhí)行方式

Tcl語言解釋器(tclsh、wish等)讀取Tcl代碼,以換行或英文分號來識別語句的結(jié)尾。
?讀取完一條語句之后,根據(jù)空白字符(空格或tab)將語句拆分成多個段
??依次處理各個段,按規(guī)則執(zhí)行替換操作
??第一段(即第一個單詞)會被視為命令,后續(xù)各段都視為參數(shù)
??解釋器查找是否有這個命令,如果有就把參數(shù)傳遞給命令;如果沒有就報錯
??執(zhí)行完畢后,如果本條語句的作用不是中斷執(zhí)行或退出的話,繼續(xù)處理下一條語句




語法小測驗

??滿滿的惡意……


set set set是我在官方Wiki(https://wiki.tcl-lang.org/)上看到的語法文章,Tcl/Tk的社區(qū)中,經(jīng)??梢钥吹綄δ承┟畹哪Х☉?yīng)用,但也正因為語言發(fā)展帶來的復(fù)雜性,摧毀了邏輯層面上的簡潔;圖形化時代到來,命令式語法對于初學(xué)者也成了負擔(dān)——最終導(dǎo)致優(yōu)勢不復(fù)存在。加之Tcl本身定位就不適合進行功能擴展,所以走向沒落也是必然。

推薦書籍

《Tcl/Tk入門經(jīng)典 (第2版) 》是中文書籍中質(zhì)量最高、覆蓋面最廣的Tcl書籍



2022年的Tcl編程語言入門參考 1:語法的評論 (共 條)

分享到微博請遵守國家法律
张家港市| 赤水市| 衢州市| 武汉市| 晋江市| 潢川县| 蒙阴县| 全椒县| 常山县| 水富县| 北流市| 调兵山市| 商水县| 怀远县| 北碚区| 大冶市| 灵武市| 沾益县| 自治县| 浮梁县| 南召县| 保德县| 苍溪县| 镇江市| 岳西县| 望奎县| 镇平县| 连平县| 晋中市| 赤水市| 弥勒县| 张家港市| 伊川县| 陆川县| 安泽县| 万载县| 邵武市| 通渭县| 正安县| 屯昌县| 嘉祥县|