Transcript 投影片 1
第三章 變數與繫結 陳維魁 博士 [email protected] 儒林圖書公司 大綱 變數的定義 變數元件 儲存區配置問題 參考的透明性 完全計算 捷徑計算 繫結(binding) 繫結時間 精選習題 2 變數的定義 變數是由四個元件所組成 名稱(name) 屬性(attribute) 引用(reference) 值(value) 3 變數元件 名稱 變數的名字 並非所有的變數都是有名稱的,有的變數是沒 有名稱的,如指標變數(pointer variable)的名稱 僅是引用(reference)該變數的方式,並非真正 的名稱,此類變數稱為不具名變數(anonymous variable)。 4 變數元件 屬性 屬性即為型態,代表變數的性質 如整數、實數、字元、字串及布林值等等 變數的屬性有的程式語言是在設計程式時決定, 如Pascal;有些則是在執行的時候決定,如 SNOBOL 5 變數元件 引用 即指變數的儲存位址 詳細內容請見第二節之內容 6 變數元件 值 變數的值 以C語言的“int x = 1;”敘述來作為範例,此敘 述表示宣告一個名稱為x的變數,其屬性為整 數而值為1,但其在記憶體中的位址則需視系 統是利用靜態儲存區配置或動態儲存區配置才 能決定系統會於何時配置記憶體空間給變數x 使用 7 儲存區配置問題 靜態儲存區配置(static storage allocation) 代表程式執行前,配置記憶體空間給變數 如Fortran,Cobol,Pascal的全域變數與PL/1的static記 憶指令 可加速執行的速度。 動態儲存區配置(dynamic storage allocation) 代表程式執行時,配置記憶體空間給變數 如Algol 60,APL,LISP,Snobol與Pascal的區域變數 可增加執行時的彈性,但執行速度較慢 8 參考的透明性 referential transparency 意義 程式執行的過程中,計算運算式(expression)後, 應 只能得到一個值,不能更改或破壞原來執行的環 境這種現象便是參考的透明性 9 完全計算 complete circuit evaluation 指對運算式作求值動作時,必需做完整個 運算式才可得出最後的結果,如此的計算 方式便稱為完全計算 10 捷徑計算 short circuit evaluation short cut evaluation 指對運算式(通常是指布林運算式)作求值 動作時,無需做完整個運算式即可得出最 後的結果 11 捷徑計算範例 A1×A2×A3×……×A100 A and B and C 若A1為0,則A1×A2×A3×……×A100之結果為0, 不需將整個運算式計算完畢再決定最後的結果 值 若A為false則運算式的結果為false,不需將整 個運算式計算完畢再決定最後的結果值 A or B or C 只要A為true則整個運算式的結果就為true,不 需將整個運算式計算完畢再決定最後的結果值 12 捷徑計算 各種語言對“捷徑計算”的處理方式 內定(default)法 PASCAL內定採用完全計算 若在程式段中加入“{$B-}”敘述,則在該敘述後之所有布林 運算式將採用捷徑計算 若利用“{$B+}”則可恢復完全計算 C與C++則內定採用捷徑計算 運算子(operator)法 ADA利用AND THEN及OR ELSE代表採用捷徑計算 A OR ELSE B OR ELSE C及A AND THEN B AND THEN C AND及OR則是代表採用完全計算 JAVA利用 || 及&&代表採用捷徑計算,而 | 及&則是代表採用 完全計算。 13 繫結(binding) 意義 繫結是指變數的名稱與其位址,屬性或值相結合 的動作 14 繫結時間 程式語言設計時的繫結 程式語言所提供的所有可能資料型態 所有符號的意義等等 程式語言製作時的繫結 所有跟機器相關的特性及變數可能的值 在不同計算機中即使相同的數學運算式,亦可 能得到不同的結果 15 繫結時間 翻譯時的繫結 變數的位址(若採靜態儲存區配置法) 變數真正的型態(若採外顯式—explicit 型態法)。 執行時的繫結 變數的位址(若採動態儲存區配置法) 變數真正的型態(若採內隱式—implicit 型態法) 變數真正的值 16 範例 假設“y = x+100;”為一個C語言的敘述(statement),若 a. 以“=”為指定運算子(assignment operator) b. 以“+”為加法符號 c. “+”表示整數加法 d. “100”表示十進位的一百 e. 整數100的內部表示法(internal representation) f. 100為整數 g. x, y的型態(type) h. x, y的值 i. x, y的位址(address) j. x, y可以宣告的型態 17 精選習題 假設以下的敘述為一未提供“捷徑計算” 能力的程式段,請利用程式設計的技巧, 使此敘述經此改寫的動作後,具有與“捷 徑計算”之處理方法相同之處理模式 。 if <A> and <B> then E1 else E2 18 精選習題 試問在C語言中,最佳化編譯程式 (optimization compiler)是否可以將二元布 林運算子(boolean operator)前後的兩項子敘 述(sub-expression)互相對調?其理由為何 19 精選習題 試說明何以動態儲存區配置允許程式中使 用遞迴呼叫(recursive call),而靜態儲存區 配置則不允許? 20 精選習題 試定義何謂靜態型態繫結(static type binding)及動態型態繫結(dynamic type binding) 21