Controle de fluxo

Concluído

Controle de fluxo refere-se a como o código é executado no console ou script. O termo descreve o fluxo que o código segue e como você controla esse fluxo. Há vários constructos que ajudam a controlar o fluxo. O código pode executar todas as instruções ou apenas algumas delas. Ele também pode repetir certas instruções até atender a uma determinada condição.

Vamos examinar esses constructos de controle de fluxo para ver o que podem fazer:

  • Limpar a entrada. Se você usa parâmetros em um script, precisa garantir que eles tenham valores razoáveis para que o script funcione conforme esperado. Escrever código para gerenciar esse processo é chamado de limpar a entrada.

  • Controlar o fluxo de execução. A técnica anterior garante que você receba dados de entrada razoáveis e corretos. Esta técnica está relacionada à decisão de como executar o código. Os valores definidos podem determinar qual grupo de instruções é executado.

  • Iterar nos dados. Às vezes, os dados assumem a forma de uma matriz, que é uma estrutura de dados que contém muitos itens. Para esses dados, talvez seja necessário examinar cada item e executar uma operação para cada um deles. Muitos constructos no PowerShell podem ajudar você com esse processo.

    Observação

    A iteração em matrizes está fora do escopo deste módulo. Há muitos constructos para lidar com o controle de fluxo no PowerShell. Não podemos citar todos eles, mas falaremos de alguns importantes que você provavelmente encontrará nos scripts que lê ou escreve.

Gerenciar o fluxo de entrada e de execução usando If, ElseIf e Else

Use um constructo If para determinar se uma expressão é True ou False. Dependendo dessa determinação, você pode executar a instrução definida pelo constructo If. A sintaxe de If é semelhante a:

If (<expression that evaluates to True or False>) 
{
  # Statement that runs only if the preceding expression is $True.
}

Operadores

O PowerShell tem dois parâmetros internos para determinar se uma expressão é True ou False:

  • $True indica que a expressão é True.
  • $False indica que a expressão é False.

Você pode usar operadores para determinar se uma expressão é True ou False. Há alguns operadores. A ideia básica, geralmente, é determinar se algo no lado esquerdo do operador corresponde a algo no lado direito, considerando a condição do operador. Um operador pode expressar se uma coisa é igual a outra, maior do que outra ou se corresponde a uma expressão regular.

Veja um exemplo de como usar um operador. O operador -le determina se o valor à esquerda dele é menor ou igual ao valor à direita:

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
}

Esse código não exibe nada porque a expressão é avaliada como False. O valor 3 é claramente positivo.

Else

O constructo If executará instruções somente se elas forem avaliadas como True. E se você quiser lidar com casos em que elas são avaliadas como False? Nesse caso, você usa o constructo Else. If expressa "se esse caso específico for verdadeiro, execute esta instrução". Else não assume uma expressão. Ele captura todos os casos em que a cláusula If é avaliada como False. Quando If e Else são combinados, o código executa as instruções em um dos dois constructos. Vamos modificar o código anterior para incluir um constructo Else:

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
} Else {
  Write-Host "Is Positive"
}

Como colocamos Else ao lado da chave final para If, criamos um constructo unido que funciona como apenas um. Se você executar o código no console, verá que Is Positive é impresso. Isso ocorre porque If é avaliado como False, mas Else é avaliado como True. Sendo assim, Else imprime sua instrução.

Observação

Você só poderá usar Else se um constructo If estiver definido imediatamente acima dele.

ElseIf

If e Else funcionam muito bem para englobar todos os caminhos que o código pode seguir. ElseIf é outro constructo que pode ser útil. ElseIf deve ser usado com If. Ele diz "a expressão neste constructo será avaliada se a instrução If anterior for avaliada como False". Como If, ElseIf pode usar uma expressão, portanto, ajuda a pensar em ElseIf como um If secundário.

Veja um exemplo que usa ElseIf:

# _FullyTax.ps1_
# Possible values: 'Minor', 'Adult', 'Senior Citizen'
$Status = 'Minor'
If ($Status -eq 'Minor') 
{
  Write-Host $False
} ElseIf ($Status -eq 'Adult') {
  Write-Host $True
} Else {
  Write-Host $False
}

É possível escrever esse código de uma forma mais compacta, mas dessa forma ele demonstra o uso de ElseIf. Ele mostra como If é avaliado primeiro, depois ElseIf e então Else.

Observação

Assim como ocorre com Else, você não poderá usar ElseIf se não definir um If acima dele.