about_Booleans

Korte beschrijving

Hierin wordt beschreven hoe booleaanse expressies worden geëvalueerd.

Lange beschrijving

PowerShell kan elk type impliciet behandelen als een Booleaanse waarde. Het is belangrijk om inzicht te hebben in de regels die PowerShell gebruikt om andere typen te converteren naar Booleaanse waarden.

Converteren van scalaire typen

Een scalaire waarde is een atomische hoeveelheid die slechts één waarde tegelijk kan bevatten. De volgende typen evalueren:$false

  • Lege tekenreeksen zoals '' of ""
  • Null-waarden zoals $null
  • Elk numeriek type met de waarde van 0

Voorbeelden:

PS> $false -eq ''
True
PS> if ("") { $true } else { $false }
False
PS> if ($null) { $true } else { $false }
False
PS> if ([int]0) { $true } else { $false }
False
PS> if ([double]0.0) { $true } else { $false }
False

De volgende typen evalueren:$true

  • Niet-lege tekenreeksen
  • Exemplaren van een ander type niet-verzameling

Voorbeelden:

# a non-collection type
PS> [bool]@{value = 0}
True
# non-empty strings
PS> if ('hello') { $true } else { $false }
True
PS> [bool]'False'
True

Houd er rekening mee dat dit verschilt van expliciete tekenreeksparsering:

PS> [bool]::Parse('false')
False
PS> [bool]::Parse('True')
True
PS> [bool]::Parse('Not True')
MethodInvocationException: Exception calling "Parse" with "1" argument(s):
"String 'Not True' was not recognized as a valid Boolean."

Converteren van verzamelingstypen

Matrices zijn het meest voorkomende verzamelingstype in PowerShell. Deze regels zijn van toepassing op verzamelingachtige typen die de IList-interface implementeren.

  • Lege verzamelingen zijn altijd $false
  • De speciale null-waarde die aangeeft dat er geen uitvoer van een opdracht is, [System.Management.Automation.Internal.AutomationNull]::Value is altijd $false.
  • Verzamelingen met één element evalueren de Booleaanse waarde van hun ene element.
  • Verzamelingen met meer dan 1 element zijn altijd $true.

Voorbeelden:

# Empty collections
PS> [bool]@()
False
PS> [bool](Get-ChildItem | Where-Object Name -eq 'Non-existent-File.txt')
False
# Single-element collections
PS> $a = @(0)
PS> [bool]$a
False
PS> $b = @(1)
PS> [bool]$b
True
# Multi-element collections
PS> $c = @(0,0)
PS> [bool]$c
True

Zie ook