Dziś drugi wpis z serii nowinek w nowym Powershell. Tym razem weźmiemy na tapet operator trójargumentowy zwany czasem operatorem warunkowym (po naszemu: ternary operator). Czyli pytajnik z dwukropkiem.
Operator ów to nic innego jak sprawdzenie jakiegoś warunku, a następnie zwrócenie wartości X jeżeli warunek ów jest prawdziwy bądź też Y jeżeli nie jest.
Przykład:
$c = $a -eq $b ? 3 : 4
Powyższy kod należy rozumieć tak: sprawdź czy $a równa się $b i jeżeli tak, to podstaw za $c trójkę, a jeżeli nie - czwórkę.
Inny przykład:
1..10 | Foreach-Object {$dzien = Get-Random "Poniedzialek","Wtorek","Sroda","Czwartek","Piatek","Sobota","Niedziela"; $ma_r = $dzien -like "*r*" ? "$dzien ma R" : "$dzien nie ma R"; $ma_r}
Wynik:
Czwartek ma R Niedziela nie ma R Sobota nie ma R Sobota nie ma R Poniedziałek nie ma R Czwartek ma R Niedziela nie ma R Środa ma R Niedziela nie ma R Wtorek ma R
Tym razem wylosowaliśmy sobie losowo dziesięć razy nazwę dnia tygodnia i sprawdziliśmy każdorazowo czy nazwa ma w środku literę R czy nie (dlaczego? Bo "Niedzierla", jak mówi stary kawał).
Implementacja operatora trójwartościowego w Powershell 7.0 jest dość "goła":
Po pierwsze, nie da się użyć wyniku operatora w charakterze zmiennej (innymi słowy nie da się podstawić do wyniku operatora żadnej wartości). W C jest to jak najbardziej możliwe:
( x > y ? a : b) = 7
Powyższy kod w C podstawi siódemkę do zmiennej a jeżeli x>y, w przeciwnym razie do b. W Powershell podobny zabieg skończy się komunikatem o błędzie składni
Po drugie zaś powershellowa wersja nie obsługuje składni "skróconej"; w C możemy napisać:
a = b ?: c
Tu z kolei jeżeli b jest prawdą, wartość zmiennej a nie zmieni się, a jeżeli nie, podstawimy tam wartość zmiennej c. Innymi słowy powyższa linijka jest równoważna:
a = b ? a : c
W Powershell użycie składni "skróconej" nie przejdzie - również zostaniemy opluci komunikatem błędu.
Wniosek końcowy: pomimo niepełnej implementacji operatora trójwartościowego mamy od teraz okazję skrócenia tego:
if($a -ne $b) {$x = 7} else {$x = 9}
Do tego:
$x = $a -ne $b ? 7 : 9
Prawda, że prościej?
Jeżeli chcesz do komentarza wstawić kod, użyj składni:
[code]
tutaj wstaw swój kod
[/code]
Jeżeli zrobisz literówkę lub zmienisz zdanie, możesz edytować komentarz po jego zatwierdzeniu.