PowerShell 7 Üçlü Operatörünü Anlamak
En başından beri PowerShell hakkında yazıyor ve öğretiyorum. Odak noktam her zaman BT Uzmanlarının hayatı kolaylaştırmak ve kariyerlerini ilerletmek için günlük işlerinde PowerShell'i kullanmasını kolaylaştırmak olmuştur. Dilin yıllar içinde gelişmesi nedeniyle bu odaklanma şüphesiz zor olmuştur. PowerShell 7 ile bu devam edecek. Microsoft, PowerShell'in bir sonraki sürümüne birçok yeni özellik ekliyor. Bana öyle geliyor ki bu özelliklerin çoğu Microsoft'un ihtiyaçlarını karşılamak için tasarlandı. Her yeni sürümde benim için daha da netleşen şey, PowerShell'in artık birçok insan için çok şey ifade ettiğidir. Bir grup kör adamın tarif ettiği meşhur fil gibidir; neye dokunduğunuza bağlı olarak farklı bir anlama gelir.
Üçlü Operatörle Tanışın
En son PowerShell 7 önizlemesine yapılan eklemelerden biri üçlü operatörüdür. Eğer geçmişiniz benimki gibiyse "The Whatery?" diyorsunuz. Wikipedia'ya göre bu, köklü bir bilgisayar bilimi terimidir. Operatör kısa bir koşullu ifade oluşturmaya izin verir.
<if some condition is true> ? <this>:<else this>Bu operatörü PowerShell 7'de kullanmak, şu şekilde bir PowerShell ifadesi yazabileceğiniz anlamına gelir:
$IsWindows ? "ok":"not ok"Geleneksel If ifadesinin alternatifi şöyle olacaktır:
if ($IsWindows) {
"ok"
}
else {
"not ok"
}
Bazı açılardan üçlü operatörün anlaşılması o kadar da karmaşık değildir. Her ne kadar önemli bir fark olsa da. If ifadesini kullanırken Else cümleciği tamamen isteğe bağlıdır. Üçlü operatör kullanıldığında koşullu Else bileşeni gereklidir.
İşte geleneksel bir If/Else ifadesi.
if ($IsWindows) {
Get-CimInstance -ClassName win32_service -filter "name='bits'"
}
else {
Write-Warning "This command requires Windows"
}
Yeni üçlü operatörü kullanarak bunu şu şekilde yazarsınız:
$IsWindows ? (Get-CimInstance -ClassName win32_service -filter "name='bits'") : (Write-Warning "This command requires Windows")
Üçlü operatörün basit koşullu ifadeler için kullanışlı olduğu görülmektedir. Bu geleneksel kodu düşünün.
if ($IsWindows) {
Get-CimInstance -ClassName win32_service -filter "name='bits'"
Get-CimInstance -ClassName win32_service -filter "name='wsearch'"
}
else {
Clear-Host
Get-Date
Write-Warning "This command requires Windows"
}
Üçlü operatör sürümüyle karşılaştırıldığında.
$IsWindows ? (Get-CimInstance -ClassName win32_service -filter "name='bits'"), (Get-CimInstance -ClassName win32_service -filter "name='wsearch'") : (Clear-Host),(Get-Date),(Write-Warning "This command requires Windows")
Çalışıyor ama bana biraz hantal geliyor.
Bunun biraz yapmacık bir örnek olduğunu kabul ediyorum. Merak ediyorsanız, gördüğüm kadarıyla If/Else veya üçlü operatör arasında hiçbir performans avantajı yok.
Hedef kısa ve öz olmaksa PowerShell biçimlendirmeyi umursamaz. Bu iki ifade aynı sonuca varıyor.
if ($IsLinux) { ls -al } else { Write-Warning "This command requires Linux" }
$isLinux ? (ls -al) : (Write-Warning "This command requires Linux")
Hangisini tercih edersin?
Bu Sizin İçin Ne İfade Ediyor?
Microsoft'un bu operatörü PowerShell'in önceki sürümlerine desteklemesini beklemiyorum. Bu, kullanmak istiyorsanız PowerShell 7'ye bağımlılığınız olduğu anlamına gelir. Konsoldaki basit koşullu ifadeler için sanırım çekiciliği görebiliyorum.
Ama eğer script dosyası yazıyorsanız henüz bir avantaj göremiyorum. Bu, birçok kişinin ilk başta anlayamayacağı yeni bir özelliktir. Kişisel olarak böyle bir şey daha açıktır.
if ((get-date).DayOfWeek -eq "Friday") {
$var = "tgif"
}
else {
$var = "blah"
}
PowerShell'de yeni olsanız bile olup bitenler hakkında pek fazla gizem yoktur.
Bütün bunlar size bu operatörü kullanmaktan kaçınmanızı söylediğim anlamına gelmiyor. Geliştirici geçmişinden gelmiyorum, dolayısıyla bu operatör gözden kaçırdığım bir şey değil ve geleneksel If ifadesi benim için gayet iyi çalışıyor.
Geliştirici geçmişim olmadığından, bu operatör için ilgi çekici kullanım senaryoları varsa, bunları duymayı çok isterim çünkü bunun henüz öğrenmediğim yeni bir şeyi içereceğine bahse girerim. Geri kalanlarınız için PowerShell 7 önizleme 4 veya üzeri yüklüyse, yeni operatörü deneyin ve sizin için nerede anlamlı olduğunu görün.
Güncelleme
Görünüşe göre Adam Bertram ve ben bu günlerde aynı fikirdeyiz. İşte bugün Petri.com'da yayınlanan görüşleri: https://www.petri.com/using-the-ternary-conditional-operator-in-powershell-7