PowerShell 7.0 operátorok

Háromtagú feltétel-operátor (?:)

Más programnyelvekben létező tömör If – Then – Else szerkezet jelent meg újdonságként:

PS C:\> $true ? "Igaz" : "Hamis"

Igaz

PS C:\> $false ? "Igaz" : "Hamis"

Hamis

Elsősorban egyszerű értékadásoknál tartom ezt hasznosnak, mert ha akár cmdleteket szeretnénk végrehajtatni, akkor már zárójelezni kell és a kódunk olvashatósága is nehézkesebb lesz:

PS C:\> 5 -gt 3 ? (get-date) : (dir)

 

2020. március 31. 18:10:19

Parancsok feltétteles összefűzése operátor (&& és ||)

Nem csak értékek alapján lehet feltételesen végrehajtani utasításokat, hanem parancsok futásának eredménye alapján is:

PS C:\> Test-Path C:\Windows && Write-Host "Success"

True

Success

Ha az első parancs sikeresen végrehajtódik ($? eredménye $true, vagy a $LASTEXITCODE értéke 0), akkor a && utáni rész is végrehajtódik.

Ennek ellentettje, a || operátor, aminél pont akkor hajtódik végre a második kifejezés, amikor az első rész sikertelen:

PS C:\> remove-item C:\kakukk || Write-Host "Failure"

Remove-Item: Cannot find path 'C:\kakukk' because it does not exist.

Failure

Itt tehát igazából nem $true vagy $false eredmény alapján történik a végrehajtás, hanem a siker vagy sikertelenség alapján, azaz:

PS C:\> Test-Path C:\kakukk || Write-Host "Failure"

False

Ebben az esetben a Test-Path rész $false-t ad, mégsem hajtódik végre a Write-Host kifejezés, hiszen a Test-Path nem adott semmilyen hibát.

A Null-al egybeolvadó operátor (??)

Szintén más programnyelvekből vették át a Null értékét helyettesítő operátort. Ha a ?? operátor bal oldalán Null van, akkor az eredmény a ?? jobb oldala lesz, egyébként marad a bal oldal:

PS C:\> $x = $null

PS C:\> $x ?? "Ez most Null volt"

Ez most Null volt

PS C:\> $x = 0

PS C:\> $x ?? "Null"

0

Látszik, hogy itt nincs olyasmi, mint a False szinonímái esetén. Itt csak a Null élesíti a jobb oldalt.

Null feltételre értéket adó operátor (??=)

Ezzel az operátorral lehet felülírni egy változót, ha annak eredetileg Null volt az értéke:

PS C:\> $x = $null

PS C:\> $x ??= "Felülírom"

PS C:\> $x

Felülírom

 

PS C:\> $x = 1

PS C:\> $x ??= "Felülírom"

PS C:\> $x

1

A fenti példában elsőként $x-ben $null van, azután az feltételes értékadás után a „Felülírom” szöveg került. A második esetben nem történt értékadás, mert az $x eredetileg nem Null volt.

Kísérleti funkció: Null feltételes tag-operátor (?., ?[])

Megjegyzés:

Új funkció a PowerShell 7-ben, hogy bizonyos funkciók kísérleti jelleggel vannak csak benne, használatuk éles környezetben nem támogatott, de tesztelési jelleggel be lehet kapcsolni őket.

Lekérdezni ezeket a Get-ExperimentalFeature cmdlettel lehet, engedélyezni az Enable-ExperimentalFeature-el.

Tehát ez egy kísérleti funkció, a szintaktikája nekem nem is igazán tetszik, reméljük még faragnak rajta a végleges élesítésig.

Ezen kísérleti funkció bekapcsolásához a következő parancsot használhatjuk:

PS C:\> Enable-ExperimentalFeature -Name PSNullConditionalOperators

WARNING: Enabling and disabling experimental features do not take effect until next start of PowerShell.

A PowerShell 7 újraindítása után már elérhető lesz a következő funkció, de előbb nézzük az alapproblémát!

PS C:\> $file = get-item C:\Windows\notepad.exe

PS C:\> $file.gettype().fullname

System.IO.FileInfo

Itt ugye egy metódus eredményének egy tulajdonságára vagyok kíváncsi, de mi van, ha a $file-ba valami miatt Null van?

PS C:\> $file = $null

PS C:\> $file.gettype().fullname

InvalidOperation: You cannot call a method on a null-valued expression.

Hibát kapok, holott én értenék abból is, ha semmi lenne az eredmény. Ezt lehet a ?. operátorral elérni:

PS C:\> ${file}?.gettype().fullname

PS C:\>

A . elé tett ? sajnos nem elég, mert a változók nevében is lehetne ?, ezért sajnos a változó nevét kapcsos zárójelek közé kell tenni. Na ez nem tetszik! Mindenesetre az eredmény a szép semmi lett. Ezzel az operátorral tehát csak akkor hívja meg a metódust vagy kérdezi le a tulajdonságot, ha az objektum nem Null.

 

 

 



Word To HTML Converter