about_Booleans

Descrição breve

Descreve como as expressões booleanas são avaliadas.

Descrição longa

O PowerShell pode implicitamente tratar qualquer tipo como um booleano. É importante entender as regras que o PowerShell usa para converter outros tipos em valores booleanos .

Convertendo de tipos escalares

Um tipo escalar é uma grandeza atômica que pode conter apenas um valor por vez. Os seguintes tipos avaliam para $false:

  • Cadeias de caracteres vazias como '' ou ""
  • Valores nulos como $null
  • Qualquer tipo numérico com o valor de 0

Exemplos:

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

Os seguintes tipos avaliam para $true:

  • Cadeias de caracteres não vazias
  • Instâncias de qualquer outro tipo que não seja de coleta

Exemplos:

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

Observe que isso difere da análise explícita de cadeia de caracteres:

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."

Convertendo de tipos de coleção

As matrizes são o tipo de coleção mais comum no PowerShell. Essas regras se aplicam a qualquer tipo de coleção que implemente a interface IList .

  • Coleções vazias são sempre $false
  • O valor nulo especial que indica a ausência de saída de um comando, [System.Management.Automation.Internal.AutomationNull]::Value é sempre $false.
  • As coleções de elemento único são avaliadas para o valor booleano de seu elemento único e único.
  • Coleções com mais de 1 elemento são sempre $true.

Exemplos:

# 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

Confira também