首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

PowerShell 深度探索(十二):Filter 篩選器與 Function 函數差異解析

     編輯:關於.NET

Filter 篩選器定義語法

Filter 篩選器名稱 (參數) { 程式碼區塊 }

與 Function 關鍵字不同,篩選器專為管線處理設計。

核心差異:管線資料處理模式

特性Function 函數Filter 篩選器
管線輸入變數$input(一次接收所有物件集合)$_(逐個接收管線物件)
處理方式需自行迴圈/遞迴處理集合自動對每個輸入物件執行一次程式碼區塊
適用場景邏輯封裝、複雜流程控制資料流轉換、逐項過濾/投影

實例對比

Function 不含 process 區塊

function fun { "run"; $_.name }
ls | fun

Function 無輸出

結果:無任何輸出,因為 $input 未被處理,$_ 在函數外層無定義。

Filter 同樣邏輯

filter fun { "run"; $_.name }
ls | fun

Filter 正常輸出

結果:正確輸出每個檔案名稱,篩選器自動對管線每個物件執行區塊。

Function 包含 process 區塊

function fun {
    begin { "Start"; $i=1 }
    process { "run $i"; $_.name; $i++ }
    end { "End" }
}
ls | fun

此時 Function 行為與 Filter 相同,因為 process 區塊會對每個管線物件執行一次。

關鍵結論

  • Filter 是針對管線優化的特化函數,內建逐項處理語意
  • Function 若需管線逐項處理,必須宣告 process 區塊
  • 兩者皆可接受參數,但 Filter 參數通常用於邏輯控制而非管線資料
  • 簡單資料轉換、過濾、格式化首選 Filter;複雜邏輯、狀態管理用 Function

實務建議

# 篩選器範例:只輸出大於 1MB 的檔案
filter Get-LargeFile {
    if ($_.Length -gt 1MB) { $_ }
}

# 使用
Get-ChildItem -Recurse | Get-LargeFile

善用 Filter 簡化管線腳本,讓程式碼更具宣告式風格與可讀性。

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