Tipos de dados no PowerShell
LidoEsta aula explora os tipos de dados no PowerShell, desde os fundamentais (strings, números, booleanos) até estruturas como arrays e hashtables, passando pela tipagem forte opcional e conversão de tipos. Com exemplos práticos e exercícios, você aprenderá a manipular dados de forma eficiente e consciente no shell da Microsoft.
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
-asquando 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
- Crie uma variável que armazene seu nome completo (string) e exiba o número de caracteres usando o método
.Length. - Crie um array com os números de 1 a 5 e calcule a soma de todos os elementos usando o cmdlet
Measure-Object. - Crie uma hashtable representando um livro com as chaves Título, Autor e Ano. Exiba cada propriedade.
- Declare uma variável com tipagem forte [decimal] e atribua o valor 3.14159. Depois, tente atribuir uma string e observe o erro.
- Converta a string "123.45" para double usando o método estático
[double]::Parse()e exiba o resultado multiplicado por 2.
$nome = "Maria Silva"
Write-Host $nome.Length
$numeros = 1..5
$soma = ($numeros | Measure-Object -Sum).Sum
Write-Host $soma
$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
[decimal]$pi = 3.14159
$pi = "abc" # Erro: Cannot convert value "abc" to type "System.Decimal"
$texto = "123.45"
$valor = [double]::Parse($texto)
Write-Host ($valor * 2)