[Part I. GIMP基礎功]

[Part II. 一種效果的誕生]
[Part III. Script-Fu的秘密]

13.7 Scheme 的「可讀性」與 Script-Fu 的正名

正名 Rectification of names
  • 名,也指名份、地位, Script-Fu 的名份,這一點會在「21.3 ......我有惑......」進一步地論述。
  • 名,也指命名,名不正則言不順,言不順則事不成。


  • 正名,是政治學上的用語。
  • 正,有糾正之意。
  • 將「正名」這一詞彙用在電腦科學上,用於彰顯電腦術語翻譯的問題,與撰寫程式時命名的問題



Script-Fu 必也分號乎
  • 分號代表註解,而檔頭通常都有數十行以上的註解。
  • 無論是甚麼程式語言,撰寫程式時,都要注意「可讀性」的議題,都要注意如何讓程式易讀、易懂、易維護。


  • Script-Fu 程式要容易閱讀與維護,要注意下列四項要領:
    • 命名:要讓變數的命名遵守固定的規則,要讓函數的命名遵守固定的規則。
    • 註解: Script-Fu 的註解是用「分號」來表明, Script-Fu 的檔頭通常都有註解。
    • 空行: Script-Fu 程式碼為了方便閱讀,有些地方使用完全空白的一行,以此突顯特定的一行程式碼,或以此區隔特定的一段程式碼。
    • 對齊: Script-Fu 程式碼為了方便閱讀,有些地方會加上很多空白,來幫助上下兩行文字的對齊,但是在這一系列的文章中呈現程式碼時,省略了很多空白,與原本的檔案(可參考前一節的圖)呈現的方式不一樣。

  • 廣義來看,空行、空白算是一種「無言」的註解,其功效不言而喻。


Script-Fu 必也括號乎
  • Script-Fu 的特色是,括號很多。
  • Scheme 語言的運算式為前序(prefix)運算式。這是造成 Scheme 語言大量使用括號的原因之一。
  • 撰寫 Script-Fu 時,要注意括號的對齊。若把內容移除,只剩括號,會看到括號中又有括號((())) ,好像呼喊的聲音,向外擴散。


  • 下圖顯示括號的對齊,括號內的東西,是屬於 let* 函數的參數。



Script-Fu 必也正名乎,撰寫程式時命名的問題
  • 函式:通常以 gimp 或 plug-in 開頭。
    • 一旦仔細研究 Script-Fu ,就會知道 GIMP 內部的程序(函式)的命名規則。
    • 操作英文介面,會比較容易學習 Script-Fu 程式的撰寫,因為程式要用英文撰寫。
    • 例如,gimp-edit-clear 函式,對應到選單介面的位置
      • 中文選單是 [影像] / 編輯 / 清除
      • 英文選單是 [Image] / Edit / Clear
  • 變數:變數的命名,也有一些固定的規則。
    • img 、image 表示影像變數。
    • 一支 Script-Fu 程式,通常只會處理一個影像變數,但可能要處理三、四個圖層。
    • 例如, alien-glow-logo.scm 三個圖層變數的名稱,為 logo-layer 、low-layer 、bg-layer 。
  • 參數值的傳遞:要命名的東西真的很多。
    • 每一個對話盒的控制元件,都需要命名,都需要一個變數,來接收與傳遞參數值,都需要解說的字詞,來代表該控制元件。
    • 程式越複雜,就需要花更多心思,替變數取一個好名字。



Script-Fu 必也正名乎, 翻譯的問題與 Script-Fu 的字義
  • 電腦術語的翻譯,一直存在著同名異詞、異名同詞的問題。
  • 以及,一個詞彙過度使用的問題,因此讓中文譯詞鑑別度不夠。
  • 導致了若要正確表達某個概念,有時要用譯詞的英文原文。


  • Script:電腦領域裡,Script 通常是指 Shell Scripts 。
    • 關於 Shell Scripts的功用,可參考鳥哥「 Shell Script 」的文章。
    • 在 UNIX 系統與類 UNIX 系統, Shell Scripts 是一堆系統指令的集合,加上 Shell 所提供的一些功能。
      • Bourne Shell 與 C Shell 是常見的 Shell 。
      • 也可使用 Perl 或 Python 來管理UNIX系統。
      • Perl 或 Python 所撰寫的程式碼也可稱為 Scripts 。
    • 推廣這樣的定義,直譯式的語言,所撰寫的程式碼,也可稱為 Scripts 。
      • 例如,Flash 的 ActionScript 。 ActionScript ,顧名思義,是一堆「描述動作」 指令的集合。
      • MS Office 的 VBScript 是用 Visual Basic 語言撰寫的 Script ,可讓一些文書、試算表處理的工作自動化。
      • 同理Script-Fu 是一堆「處理影像」 指令的集合



Script 的譯稱, Procedure 的譯稱

  1. 對於 Script 一詞,可採用「命令稿」的稱呼,其實它也可稱為程式碼、指令碼。
  2. 請先閱讀「維基百科」對子程式、程序的說明。
  3. Procedure 與 Function :引用維基百科的詞條,只是想說明,在這一系列的 Script-Fu 文章中,沒有區別 Procedure 與 Function 的差異,因為在英文的文獻中,有時,也沒有區別 Procedure 與 Function 的差異。
  4. 在這一系列的文章中,程序( Procedure )一詞只用來描述程序資料庫( Procedure Database),對於程序資料庫內的「程序」,在文中,都稱為函式或函數。
  5. 當我認真研究程序( Procedure )一詞,我覺得,英文的敘述,英文的解釋,比較精準。


「維基百科」對子程式、程序的說明

維基百科對子程式(Subroutine)的定義
In computer science, a subroutine or subprogram (also called procedure, method, function, or routine) is a portion of code within a larger program, which performs a specific task and is relatively independent of the remaining code.


中文維基百科對子程式(Subroutine)一詞的解說
在電腦科學中,作為更大的程式的一部分,一個子程式(函式、過程,或者是子常式)是完成一項特定任務的代碼序列,它由一個或多個語句塊組成。這些代碼通常被整合為軟體函式庫。
具有相關性語句的集合,一般會有輸入參數並有返回值,提供對過程的封裝和細節的隱藏。
函式在程序導向的語言中已經出現。是結構體和類的前身。本身就是對具有相關性語句的歸類和對某過程的抽象。


中文維基百科對程序( Procedure )一詞的解說
程序在香港和台灣即是英文 procedure 的中文譯名,在大陸於電腦科學、電腦工程、電子工程、電機工程、機器人工程學、機械工程領域中的英文術語 program 的中文譯名也是程序,在港台譯造程式,而程式語言中的 procedure 在大陸譯造過程,在港台和其他領域一樣譯造程序。

當程序為 procedure 的譯名時,一個程序即是特定的一系列動作、行動或操作,而這些活動、動作或操作必須被執行於相同方式以為了在相同環境下恆常得出相同的結果(例如緊急應變程序)。不太精確地說,程序可以指一序列的活動、作業、步驟、決斷、計算和工序,當它們保證依照嚴格規定的順序發生時即產生所述的後果、產品或局面。一個程序通常引致一個改變。