首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Delphi 參數修飾字 out、var 差異與使用場景

     編輯:程式設計綜合問答

快速對照

修飾字傳遞方式初始值可見性主要用途
value (預設)傳值 (複製)可讀可寫 (區域副本)輸入參數,不影響呼叫端
var傳址 (指標)可讀可寫 (同一記憶體)輸入輸出參數,**呼叫端需初始化**
out傳址 (指標)**不可讀** (視為未初始化),**只可寫**純輸出參數,呼叫端**無需初始化**
const傳址 (指標,唯讀)可讀、不可寫大型結構/介面輸入,避免複製開銷

核心差異:var vs out


procedure TestVar(var X: Integer);  // 呼叫端 X 需有初始值
begin
  ShowMessage(IntToStr(X)); // 可讀取初始值
  X := 20;
end;

procedure TestOut(out X: Integer);  // 呼叫端 X 無需初始化
begin
  // ShowMessage(IntToStr(X)); // 錯誤:out 參數進入時值未定義
  X := 20; // 必須指派值
end;

使用場景

  • var:需**讀取舊值並更新** (如 Swap、TryParse 模式需回傳多值)。
  • out:僅**回傳結果**,呼叫端不關心舊值 (如 GetUser(out Name, out Age)、COM 介面方法)。
  • const:大型 record、array、interface 輸入,**效能優化** (避免複製),語意明確不可變。

編譯器強制規則

  1. out 參數在程序內**必須被指派值** (所有路徑),否則編譯警告/錯誤。
  2. out 參數**不可在指派前讀取**。
  3. var 參數呼叫端**必須是變數**,不可為常數/運算式。

COM/Windows API 互通

Windows API (如 GetWindowRect) 多用 out 對應 LPRECT (輸出緩衝區)。Delphi 導入標頭檔時自動映射為 out 或 var。

最佳實務

  • **輸入參數優先用 const** (大型類型) 或 value (簡單類型)。
  • **需修改呼叫端變數用 var**。
  • **純輸出用 out**,語意最清晰,編譯器協助檢查未指派路徑。
  • 避免濫用 var 當輸出專用,降低可讀性。

掌握 var (輸入輸出) 與 out (純輸出) 語意差異,能寫出更安全、自文檔化的 Delphi 程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved