پاورشل برای برنامهنویسان
@programming_tipsدرسنامه: توابع (Functions) و پارامترها (Parameters)
اگر بخوای اسکریپتهات تمیز، قابل استفادهی مجدد و قابل درک باشن، باید با این بخش خوب آشنا بشی.
۱. چرا از تابع استفاده میکنیم؟
توابع بهت اجازه میدن بخشی از کد رو که چندین بار قراره استفاده بشه، فقط یک بار بنویسی و هر جا لازم بود صداش بزنی.
در نتیجه:
- کدت کوتاهتر و مرتبتر میشه.
- رفع باگ و تغییر در منطق برنامه راحتتر میشه.
- میتونی برای پروژههات ساختار ماژولار بسازی.
۲. ساختار یک تابع در PowerShell
ساختار پایهی تعریف تابع به شکل زیره:
function FunctionName {
# دستورات داخل تابع
}
اما معمولاً تابعها ورودی هم دارن، که با param() تعریف میشن:
function Greet {
param($name)
Write-Output "Hello, $name!"
}
Greet -name "Ali"
اینجا تابع Greet یک پارامتر داره به نام $name که موقع صدا زدن مقدارش مشخص میشه.
۳. چند پارامتر در تابع
میشه چند پارامتر رو با فاصله از هم درون param() نوشت:
function Add-Numbers {
param($a, $b)
$sum = $a + $b
Write-Output "Sum: $sum"
}
Add-Numbers -a 5 -b 7
۴. نوع پارامترها (Typed Parameters)
برای اینکه مطمئن بشی پارامتر مقدار درستی گرفته، میتونی نوع دادهی اون رو مشخص کنی. این کار جلوی خطاهای رایج رو میگیره:
function Multiply {
param(
[int]$x,
[int]$y
)
return $x * $y
}
$result = Multiply -x 4 -y 3
Write-Output "Result: $result"
اگر مقداری غیرعددی وارد کنی، پاورشل خطا میده چون نوع [int] الزامیه.
۵. مقدار بازگشتی (Return)
تابعها میتونن نتیجهای برگردونن. برای این کار از return استفاده میشه، ولی در پاورشل حتی بدون return هم آخرین خروجی بهصورت خودکار برمیگرده.
function Square {
param([int]$n)
return ($n * $n)
}
$result = Square -n 6
Write-Output "Square is $result"
یا به شکل کوتاهتر:
function Square {
param([int]$n)
$n * $n
}
۶. مقدار پیشفرض پارامتر
گاهی میخوای اگر کاربر مقداری وارد نکرد، یه مقدار پیشفرض استفاده بشه. این کار خیلی سادهست:
function Welcome {
param($name = "Guest")
Write-Output "Welcome, $name!"
}
Welcome -name "Ali"
Welcome # خروجی: Welcome, Guest!
۷. پارامترهای اجباری
میتونی تعیین کنی که بعضی پارامترها حتماً باید مقدار داشته باشن. برای این کار از [Parameter(Mandatory=$true)] استفاده میکنی:
function Show-Info {
param(
[Parameter(Mandatory=$true)]
[string]$UserName
)
Write-Output "User: $UserName"
}
Show-Info # خطا میدهد و از کاربر مقدار میخواهد
۸. پارامترهای با توضیح (Help Message)
میشه برای پارامترها توضیح اضافه کرد تا وقتی کسی از Get-Help استفاده کرد، توضیحات پارامترها رو ببینه:
function Backup-File {
param(
[Parameter(Mandatory=$true, HelpMessage="Enter the path of the file to back up")]
[string]$Path
)
Write-Output "Backing up $Path ..."
}
۹. پارامترهای دارای مقدار چندگانه (Array)
گاهی لازمه تابع چند مقدار مشابه بگیره. اون وقت نوع پارامتر رو array تعریف کن:
function Show-Items {
param([string[]]$Items)
foreach ($item in $Items) {
Write-Output "Item: $item"
}
}
Show-Items -Items "Apple", "Banana", "Cherry"
۱۰. نکتهی حرفهای: Scope و متغیرهای محلی
هر تابع محیط خودش رو داره؛ یعنی متغیرهایی که درون تابع تعریف میکنی، فقط در همون تابع معتبرن و بیرون از اون در دسترس نیستن:
function Test-Scope {
$msg = "Inside function"
Write-Output $msg
}
Test-Scope
Write-Output $msg # خطا میدهد چون $msg در این محدوده وجود ندارد
۱۱. جمعبندی
✅ توابع باعث ماژولار شدن و نظم در کد میشن
✅ با param() ورودیها رو تعریف میکنی
✅ میتونی نوع، مقدار پیشفرض و اجباری بودن پارامترها رو تعیین کنی
✅ با return یا خروجی خودکار، نتیجه برمیگرده
✅ تابعها محیط (scope) مخصوص خودشون دارن