Coalescence nulle dans PowerShell

Coalescence nulle dans PowerShell


Source : Stack Overflow [powershell]

PowerShell 7+

PowerShell 7 introduit nativement les operateurs de coalescence nulle, d’affectation conditionnelle nulle et ternaire dans PowerShell.

Coalescence nulle

$null ?? 100    # Le resultat est 100

"Evaluated" ?? (Expensive-Operation "Not Evaluated")    # Le cote droit ici n'est pas evalue

Affectation conditionnelle nulle

$x = $null
$x ??= 100    # $x vaut maintenant 100
$x ??= 200    # $x reste 100

Operateur ternaire

$true  ? "cette valeur est retournee" : "cette expression n'est pas evaluee"
$false ? "cette expression n'est pas evaluee" : "cette valeur est retournee"

Versions precedentes :

Pas besoin des PowerShell Community Extensions, vous pouvez utiliser les instructions if standard de PowerShell comme expression :

variable = if (condition) { expr1 } else { expr2 }

Donc les remplacements de votre premiere expression C# :

var s = myval ?? "new value";

deviennent l’un des suivants (selon la preference) :

$s = if ($myval -eq $null) { "new value" } else { $myval }
$s = if ($myval -ne $null) { $myval } else { "new value" }

ou selon ce que $myval pourrait contenir, vous pouvez utiliser :

$s = if ($myval) { $myval } else { "new value" }

et la seconde expression C# se transpose de maniere similaire :

var x = myval == null ? "" : otherval;

devient

$x = if ($myval -eq $null) { "" } else { $otherval }

Maintenant, pour etre honnete, ce n’est pas tres concis, et loin d’etre aussi confortable a utiliser que les formes C#.

Vous pourriez egalement envisager de l’encapsuler dans une fonction tres simple pour rendre les choses plus lisibles :

function Coalesce($a, $b) { if ($a -ne $null) { $a } else { $b } }

$s = Coalesce $myval "new value"

ou eventuellement sous la forme IfNull :

function IfNull($a, $b, $c) { if ($a -eq $null) { $b } else { $c } }

$s = IfNull $myval "new value" $myval
$x = IfNull $myval "" $otherval

Comme vous pouvez le voir, une tres

(Reponse tronquee)