Powershell 7: eksperymentujemy #2

https://xpil.eu/9gv

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?

https://xpil.eu/9gv

Leave a Comment

Komentarze mile widziane.

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.