Swift: Operadores do Swift

Os operadores são os símbolos de cálculo no seu código. Esta lição aborda todos os operadores básicos do Swift e como usá-los de forma eficaz.

1. O Que Você Vai Aprender


2. Uma História Real: Um Analista Financeiro

(1) O Problema: A Divisão de Int Perdeu Decimais, Quebrando um Relatório

Bob é analista financeiro em uma startup que precisava calcular o crescimento trimestral da receita. Ele escreveu este código:

SWIFT
let currentRevenue = 250_000
let previousRevenue = 200_000
let growthRate = (currentRevenue - previousRevenue) / previousRevenue * 100
print("Growth rate: \(growthRate)%")

Saída:

TEXT 📖 Somente leitura
Growth rate: 0%

Bob sabia que a taxa de crescimento real deveria ser 25%, mas o código exibiu 0%. O motivo: a divisão de Int trunca os decimais — 50.000 / 200.000 é igual a 0 na aritmética inteira, e multiplicar por 100 ainda dá 0.

(2) A Solução: Usando Double para Cálculos Precisos

Mudar os dados para Double preserva os decimais durante a divisão:

SWIFT
let currentRevenue = 250_000.0
let previousRevenue = 200_000.0
let growthRate = (currentRevenue - previousRevenue) / previousRevenue * 100
print("Growth rate: \(growthRate)%")

Saída:

TEXT 📖 Somente leitura
Growth rate: 25.0%

Problema resolvido instantaneamente. Bob então auditou 12 meses de relatórios e encontrou mais 4 instâncias de perda de precisão por divisão de Int.

(3) O Resultado: Precisão dos Relatórios Após Usar os Operadores Corretos

Dimensão Antes Depois
Erros numéricos 3-5 por mês 0
Tempo de revisão de relatório 2 horas cada 15 minutos
Confiança da equipe "O relatório pode estar errado" "Os dados são confiáveis"
Compreensão de operadores Incerteza sobre o comportamento da divisão Int Escolhe proativamente o tipo correto

3. Operadores Aritméticos e de Atribuição

Operadores aritméticos realizam cálculos matemáticos; operadores de atribuição armazenam valores em variáveis. Eles são os operadores mais usados no Swift.

100%
graph LR
    A[Operadores] --> B["Aritméticos: + - * / %"]
    A --> C["Atribuição: = += -= *= /="]
    B --> D[Cálculos Numéricos]
    C --> E[Atualizar Valores de Variáveis]
Operador Nome Exemplo Resultado
+ Adição 10 + 3 13
- Subtração 10 - 3 7
* Multiplicação 10 * 3 30
/ Divisão 10 / 3 3 (Int trunca)
% Resto 10 % 3 1

(1) Operadores Aritméticos

SWIFT
let a = 15
let b = 4
let sum = a + b      // 19
let diff = a - b     // 11
let prod = a * b     // 60
let quot = a / b     // 3 (Int division truncates decimals)
let rem = a % b      // 3 (15 / 4 = 3 remainder 3)
⚠️ Nota: A divisão de Int trunca diretamente a parte decimal sem arredondamento. 15 / 4 resulta em 3, não 3.75. Use Double quando precisar de resultados decimais.

(2) Operadores de Atribuição Compostos

Os operadores de atribuição composta combinam aritmética com atribuição de forma mais concisa:

SWIFT
var score = 10
score += 5     // Equivalent to score = score + 5 -> 15
score -= 3     // Equivalent to score = score - 3 -> 12
score *= 2     // Equivalent to score = score * 2 -> 24
score /= 4     // Equivalent to score = score / 4 -> 6
Operador Composto Significado Exemplo Equivalente
+= Adicionar e atribuir x += 5 x = x + 5
-= Subtrair e atribuir x -= 3 x = x - 3
*= Multiplicar e atribuir x *= 2 x = x * 2
/= Dividir e atribuir x /= 4 x = x / 4

▶ Exemplo: Rastreador de Despesas Mensais

SWIFT
// ============================================
// Track monthly expense totals
// Demonstrates arithmetic and compound assignment operators
// ============================================
var monthlyExpenses = 0.0
let rent = 1200.00
let groceries = 450.50
let transportation = 85.00
let entertainment = 200.00
monthlyExpenses += rent
monthlyExpenses += groceries
monthlyExpenses += transportation
monthlyExpenses += entertainment
let annualExpenses = monthlyExpenses * 12
let weeklyAverage = monthlyExpenses / 4.33
print("Monthly total: $\(monthlyExpenses)")
print("Annual total: $\(annualExpenses)")
print("Weekly average: $\(String(format: "%.2f", weeklyAverage))")

Saída:

TEXT 📖 Somente leitura
Monthly total: $1935.5
Annual total: $23226.0
Weekly average: $447.23

4. Operadores de Comparação e Lógicos

Os operadores de comparação comparam dois valores e retornam um resultado Bool; os operadores lógicos combinam múltiplas condições booleanas.

100%
graph TB
    A[Operadores de Comparação] --> B["== Igual a"]
    A --> C["!= Diferente de"]
    A --> D["> Maior que"]
    A --> E["< Menor que"]
    A --> F[">= Maior ou igual a"]
    A --> G["<= Menor ou igual a"]
    B --> H[Retorna Bool]
    C --> H
    D --> H
Operador Nome Exemplo Resultado
== Igual a 5 == 5 true
!= Diferente de 5 != 3 true
> Maior que 5 > 3 true
< Menor que 5 < 3 false
>= Maior ou igual a 5 >= 5 true
<= Menor ou igual a 5 <= 3 false

(1) Operadores de Comparação

SWIFT
let age = 18
let isAdult = age >= 18     // true
let canDrive = age >= 16    // true
let isSenior = age > 65     // false
let userName = "Alice"
let isAdmin = userName == "Admin"  // false

(2) Operadores Lógicos

Operador Nome Significado Exemplo
&& E Ambas as condições devem ser verdadeiras idade >= 18 && temCarteira
` ` OU
! NÃO Nega o valor !estaLogado
SWIFT
let hasTicket = true
let isVip = false
let canEnter = hasTicket && isVip   // false
let canAccess = hasTicket || isVip  // true
let isNotVip = !isVip               // true

▶ Exemplo: Verificação de Permissão de Usuário

SWIFT
// ============================================
// Check if a user has access to the admin panel
// Demonstrates comparison and logical operators
// ============================================
let userAge = 22
let hasVerifiedEmail = true
let isBanned = false
let isAdmin = false
let isAdult = userAge >= 18
let canAccessSystem = isAdult && hasVerifiedEmail && !isBanned
let hasAdminAccess = isAdmin
let finalAccess = canAccessSystem || hasAdminAccess
print("Adult: \(isAdult)")
print("Email verified: \(hasVerifiedEmail)")
print("Not banned: \(!isBanned)")
print("Final access: \(finalAccess)")

Saída:

TEXT 📖 Somente leitura
Adult: true
Email verified: true
Not banned: true
Final access: true

5. O Operador Ternário e Conversão de Tipo

O operador ternário é uma alternativa concisa ao if-else; a conversão de tipo numérico permite que diferentes tipos trabalhem juntos.

(1) O Operador Condicional Ternário

Sintaxe: condicao ? valorA : valorB — retorna valorA se a condição for verdadeira, caso contrário retorna valorB:

SWIFT
let score = 85
let grade = score >= 60 ? "Pass" : "Fail"
print(grade)  // Pass
Estilo Linhas de Código Legibilidade
Versão if-else 5 linhas Clara, mas verbosa
Versão ternária 1 linha Concisa, ideal para condições simples
SWIFT
var result: String
if score >= 60 {
    result = "Pass"
} else {
    result = "Fail"
}
let result2 = score >= 60 ? "Pass" : "Fail"
⚠️ Nota: O operador ternário funciona melhor para escolhas simples de um-ou-outro. Quando as condições ficam complexas, use if-else.

(2) Conversão de Tipo Numérico

Int e Double exigem conversão explícita entre eles:

SWIFT
let x = 10       // Int
let y = 3.5      // Double
let result1 = Double(x) + y  // 13.5
let result2 = x + Int(y)     // 13 (y truncated to 3)
Conversão Sintaxe Resultado
Int para Double Double(valorInt) Mantém a parte inteira, adiciona .0
Double para Int Int(valorDouble) Trunca decimais, sem arredondamento
Int para String String(valorInt) Converte para texto

▶ Exemplo: Calculadora de Desconto

SWIFT
// ============================================
// Calculate discount based on purchase amount
// Demonstrates the ternary operator and type conversion
// ============================================
let purchaseAmount = 120.0
let itemCount = 3
let discountRate: Double = purchaseAmount >= 100 ? 0.9 : 1.0
let finalAmount = purchaseAmount * discountRate
let averagePrice = finalAmount / Double(itemCount)
print("Purchase amount: $\(purchaseAmount)")
print("Discount: \(Int((1 - discountRate) * 100))%")
print("Final amount: $\(finalAmount)")
print("Item count: \(itemCount)")
print("Average price per item: $\(String(format: "%.2f", averagePrice))")
let freeShipping = finalAmount >= 100 ? "Free Shipping" : "Shipping Fee"
print("Shipping: \(freeShipping)")

Saída:

TEXT 📖 Somente leitura
Purchase amount: $120.0
Discount: 10%
Final amount: $108.0
Item count: 3
Average price per item: $36.00
Shipping: Free Shipping

6. Exemplo Completo: Analisador de Orçamento Mensal

SWIFT
// ============================================
// Monthly budget analysis tool
// Demonstrates arithmetic, comparison, logical, and ternary operators
// ============================================
import Foundation
// 1. Income and expense data
let salary = 5200.0
let rent = 1400.0
let food = 600.0
let transport = 120.0
let utilities = 200.0
let entertainment = 300.0
// 2. Calculate using arithmetic and compound assignment
var totalExpenses = 0.0
totalExpenses += rent
totalExpenses += food
totalExpenses += transport
totalExpenses += utilities
totalExpenses += entertainment
let savings = salary - totalExpenses
let savingsRate = savings / salary * 100
// 3. Use comparison and ternary to assess financial health
let isHealthy = savingsRate >= 20
let advice = isHealthy ? "Healthy" : "Needs Improvement"
// 4. Logical check: any single category over budget?
let rentTooHigh = rent > salary * 0.3
let foodTooHigh = food > salary * 0.15
let needsAdjustment = rentTooHigh || foodTooHigh
print("=== Monthly Budget ===")
print("Income: $\(salary)")
print("Expenses: $\(totalExpenses)")
print("Savings: $\(String(format: "%.2f", savings))")
print("Savings Rate: \(Int(savingsRate))%")
print("Status: \(advice)")
print("Needs Adjustment: \(needsAdjustment)")
// 5. Type conversion example
let categoryCount = 5
let avgPerCategory = totalExpenses / Double(categoryCount)
print("Categories: \(categoryCount), Avg: $\(String(format: "%.2f", avgPerCategory))")

Saída:

TEXT 📖 Somente leitura
=== Monthly Budget ===
Income: $5200.0
Expenses: $2620.0
Savings: $2580.0
Savings Rate: 49%
Status: Healthy
Needs Adjustment: false
Categories: 5, Avg: $524.00

❓ Perguntas Frequentes

P: Como obter resultados decimais na divisão de Int? R: Converta pelo menos um operando para Double. Por exemplo, Double(10) / 3 resulta em 3.3333. Ou declare como 10.0 / 3 desde o início. P: O operador % pode ser usado com Double? R: Não. O % do Swift só funciona com inteiros. Para resto de ponto flutuante, use o método truncatingRemainder(dividingBy:). P: && e || usam avaliação de curto-circuito? R: Sim. && não avalia o lado direito se o esquerdo for falso; || não avalia o lado direito se o esquerdo for verdadeiro. Use isso com sabedoria para melhorar a eficiência. P: Os operadores de atribuição composta retornam um valor? R: Não. x += 5 é uma instrução, não uma expressão, e não pode ser usado em atribuições ou comparações. Isso difere do C.


📖 Resumo


📝 Exercícios

  1. Iniciante: Use operadores aritméticos para calcular a área e o perímetro de um retângulo com comprimento 12.5 e largura 8.3. Exiba os resultados.
  2. Intermediário: Escreva um programa para determinar se um ano é bissexto. Regra: divisível por 4 mas não por 100, ou divisível por 400. Use operadores lógicos para combinar as condições.
  3. Desafio: Escreva um calculador de conta de luz. A tarifa base é R$0,12/kWh. Para consumo mensal acima de 300kWh, o excedente é cobrado a R$0,15/kWh. Use o operador ternário e operadores aritméticos para calcular o total da conta.
Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%