No PowerShell, tudo é um objeto e cada objeto pertence a um tipo de dados específico. Entender os tipos de dados é essencial para escrever scripts robustos, evitar erros sutis e aproveitar ao máximo os recursos da linguagem. Nesta aula, vamos mergulhar nos tipos fundamentais, nas estruturas de dados compostas, na tipagem forte opcional e nas técnicas de conversão, sempre com exemplos práticos.

Diferentemente de linguagens estaticamente tipadas, o PowerShell é dinamicamente tipado por padrão, o que significa que as variáveis podem assumir qualquer tipo sem declaração explícita. No entanto, você pode optar por uma tipagem mais rígida quando necessário, garantindo maior controle e prevenindo erros. Vamos explorar como isso funciona na prática.

Strings, números, booleanos

Os tipos primitivos mais comuns no PowerShell são strings (cadeias de caracteres), números (inteiros, decimais, etc.) e booleanos (verdadeiro/falso). Eles são a base para qualquer script.

As strings podem ser definidas com aspas simples ou duplas. Aspas duplas permitem interpolação de variáveis e caracteres de escape, enquanto aspas simples tratam tudo literalmente. Os números podem ser inteiros (Int32, Int64) ou de ponto flutuante (Double, Decimal). Já os booleanos são representados por $true e $false.

# Strings
$nome = "Maria"
$fraseComInterpolacao = "Olá, $nome!"
$fraseLiteral = 'Olá, $nome!' # Não interpola
Write-Host $fraseComInterpolacao
Write-Host $fraseLiteral

# Números
$idade = 30
$pi = 3.14159
Write-Host ("Idade: $idade, Pi: $pi")

# Booleanos
$ativo = $true
$desativado = $false
Write-Host "Ativo: $ativo, Desativado: $desativado"

Arrays e hashtables

Arrays são coleções ordenadas de itens, e hashtables são coleções de pares chave-valor (como dicionários). Ambos são fundamentais para armazenar e manipular conjuntos de dados.

Para criar um array, use o operador @() ou simplesmente separe os elementos por vírgulas. Hashtables usam @{"chave" = "valor"}. Você pode acessar elementos por índice (no caso de arrays) ou por chave (em hashtables).

# Arrays
$frutas = @('maçã', 'banana', 'laranja')
Write-Host $frutas[0] # maçã
$frutas += 'uva' # adiciona um elemento
Write-Host ($frutas -join ', ')

# Hashtables
$pessoa = @{
    Nome = 'João'
    Idade = 25
    Cidade = 'São Paulo'
}
Write-Host $pessoa['Nome']
Write-Host $pessoa.Idade

Tipagem forte opcional

O PowerShell permite declarar variáveis com um tipo específico usando a sintaxe [tipo]$variavel. Isso é chamado de tipagem forte opcional, pois você pode optar por usá-la somente quando necessário. Isso ajuda a garantir que a variável só receba valores compatíveis, gerando erros caso contrário.

Por exemplo, se você declarar [int]$numero = 10, qualquer tentativa de atribuir uma string não numérica resultará em erro. Isso é útil em funções e scripts onde você deseja validar entradas.

# Tipagem forte
[int]$contador = 0
$contador = 'abc' # Isso gerará um erro de conversão

[string]$texto = "123"
$texto = 456 # Converte automaticamente para string
Write-Host $texto

Conversão

Converter entre tipos é uma operação comum. O PowerShell oferece várias maneiras: casting com [tipo], o operador -as, ou métodos como .ToString() e [Convert]::ToInt32().

É importante entender as regras de conversão para evitar perda de dados ou erros inesperados. Por exemplo, converter uma string para número falhará se a string não for numérica. Usar -as retorna $null se a conversão falhar, em vez de lançar erro.

# Conversões explícitas
$numeroString = "42"
$numero = [int]$numeroString
Write-Host $numero

# Usando -as
$resultado = $numeroString -as [int]
Write-Host $resultado

# Convertendo para string
$valor = 10
$texto = $valor.ToString()
Write-Host $texto

# Tentativa de conversão inválida
$invalido = [int]"abc" # Erro

Boas práticas e observações finais

Ao trabalhar com tipos de dados no PowerShell, é recomendável:

  • Escolher o tipo adequado para cada variável, considerando precisão e performance.
  • Usar tipagem forte em parâmetros de funções para validar entradas.
  • Preferir -as quando você não quer que a conversão falhe com erro.
  • Testar conversões com GetType() para confirmar o tipo resultante.

Dominar os tipos de dados torna seus scripts mais confiáveis e legíveis. Pratique com os exercícios abaixo para consolidar o conhecimento.

Exercícios

  1. Crie uma variável que armazene seu nome completo (string) e exiba o número de caracteres usando o método .Length.
  2. ✓ Resposta:
    $nome = "Maria Silva"
    Write-Host $nome.Length
  3. Crie um array com os números de 1 a 5 e calcule a soma de todos os elementos usando o cmdlet Measure-Object.
  4. ✓ Resposta:
    $numeros = 1..5
    $soma = ($numeros | Measure-Object -Sum).Sum
    Write-Host $soma
  5. Crie uma hashtable representando um livro com as chaves Título, Autor e Ano. Exiba cada propriedade.
  6. ✓ Resposta:
    $livro = @{
        Titulo = "O Senhor dos Anéis"
        Autor = "J.R.R. Tolkien"
        Ano = 1954
    }
    Write-Host $livro.Titulo
    Write-Host $livro.Autor
    Write-Host $livro.Ano
  7. Declare uma variável com tipagem forte [decimal] e atribua o valor 3.14159. Depois, tente atribuir uma string e observe o erro.
  8. ✓ Resposta:
    [decimal]$pi = 3.14159
    $pi = "abc" # Erro: Cannot convert value "abc" to type "System.Decimal"
  9. Converta a string "123.45" para double usando o método estático [double]::Parse() e exiba o resultado multiplicado por 2.
  10. ✓ Resposta:
    $texto = "123.45"
    $valor = [double]::Parse($texto)
    Write-Host ($valor * 2)

Referências