在 Delphi 中,函數或程序的執行主體由 begin 開始,以 end 結束。函數必須返回一個值,這可以透過兩種方式實現:將結果賦值給函數名稱,或賦值給內建的 Result 變數。例如計算利息的函數:
function CalculateInterest(Principal, InterestRate: Double): Double;
begin
CalculateInterest := Principal * InterestRate; // 傳統寫法
// 或使用 Result := Principal * InterestRate; // 現代推薦寫法
end;
呼叫方式:InterestEarned := CalculateInterest(2000, 0.012);
放置在 implementation 區段的程序/函數,僅限該單元內部使用。若需供其他單元呼叫,必須在 interface 區段宣告標題,完整實作置於 implementation,並在呼叫端的 uses 子句引入該單元名稱。
Object Pascal 要求先宣告後使用,但遞歸呼叫(函數 A 呼叫 B,B 再呼叫 A)為例外。此時需在標題末尾加上 forward 保留字進行前置宣告。典型範例展示兩個程序 Test1 與 Test2 相互遞歸,配合按鈕點擊事件啟動,直到變數 Alpha 小於 0 為止。
參數分為形式參數(定義端)與實際參數(呼叫端)。三種主要傳遞模式:
procedure Calculate(CalNo: Integer);var):傳遞記憶體位址,修改直接反映實參。procedure Calculate(var CalNo: Integer);const):唯讀保護,防止意外修改,效能優於值參數。善用 var 可實現多重返回值;const 則保障資料安全。
Delphi 提供豐富的預定義型別,開發者可衍生新類型滿足特定需求:
type
TDays = (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday);
每個值對應整數序數(Sunday=0),增強程式碼可讀性,且列舉值成為識別符,避免命名衝突。
type
THours = 0..23;
TWorkDay = Monday..Friday; // 基於列舉型別的子界
限制變數取值範圍,開啟範圍檢查({$R+} 或專案選項)可在執行期捕捉越界錯誤。
type
TCheck = array[1..10] of Double;
TTable = array[1..20, 1..20] of Double; // 多維陣列
支援靜態索引範圍,透過迴圈初始化或賦值操作元素。