Os operadores de comparação comparam dois valores do mesmo tipo e devolvem um valor Bool (true ou false).
Se tentares comparar valores de tipos diferentes, o compilador dá um erro.
Os operadores de comparação padrão em Swift são:
| Operador | Descrição | Exemplo |
|---|---|---|
== |
Igual a |
1 == 1 (true) |
!= |
Diferente de |
1 != 2 (true) |
< |
Menor que |
4 < 5 (true) |
<= |
Menor ou igual a |
4 <= 4 (true) |
> |
Maior que |
3 > 1 (true) |
>= |
Maior ou igual a |
2 >= 2 (true) |
Uma instrução condicional executa código consoante uma condição seja avaliada como true ou false.
A condicional mais comum é a instrução if, que só executa um bloco de código quando a sua condição é true.
Escreve uma instrução if com a palavra-chave if, seguida da condição e do bloco de código entre chavetas:
let wheelCount = 4
if wheelCount == 4 {
print("Your vehicle is a car")
}
// Prints "Your vehicle is a car"
Podes combinar o if com uma cláusula else para executar código alternativo quando a condição é false:
let precipitationInMM = 0.5
if precipitationInMM > 0.5 {
print("You will need an umbrella")
} else {
print("You will not need an umbrella")
}
// Prints "You will not need an umbrella"
Para testar várias condições em sequência, encadeia as instruções com else if.
Uma instrução if não precisa de um ramo else, mas podes incluí-lo para tratar os casos em que nenhuma das condições se verifica:
let favoriteFruit = "Apple"
if favoriteFruit == "Banana" {
print("Your favorite fruit is a banana")
} else if favoriteFruit == "Orange" {
print("Your favorite fruit is an orange")
} else if favoriteFruit == "Apple" {
print("Your favorite fruit is an apple")
} else {
print("Your favorite fruit is not a banana, orange, or apple")
}
// Prints "Your favorite fruit is an apple"
No Swift moderno, as instruções if também podem ser usadas como expressões que produzem um valor.
Cada ramo é avaliado como um valor, o que facilita atribuir resultados de forma condicional:
let cpuBits = 32
let architecture = if cpuBits == 64 {
"x86_64"
} else {
"x86_32"
}
print(architecture)
// Prints "x86_32"
O operador condicional ternário é uma forma abreviada e concisa de uma expressão if-else.
Avalia uma condição e devolve um de dois valores, consoante essa condição seja true ou false.
O operador usa três partes: condition ? trueExpression : falseExpression.
Se condition for avaliada como true, avalia-se e devolve-se trueExpression; caso contrário, avalia-se e devolve-se falseExpression.
O operador ternário é ideal para escolhas simples, numa única linha:
let showFahrenheit = true
let temperatureInCelsius = 30
let temperature = showFahrenheit ? temperatureInCelsius * 9 / 5 + 32 : temperatureInCelsius
print(temperature)
// Prints 86
O exemplo acima é o equivalente compacto de:
let showFahrenheit = true
let temperatureInCelsius = 30
let temperature = if showFahrenheit {
temperatureInCelsius * 9 / 5 + 32
} else {
temperatureInCelsius
}
Neste exercício, vais escrever algum código para te ajudar a preparar-te para comprar um veículo.
Tens três tarefas: uma para determinar se vais precisar de ajuda para escolher entre dois veículos, outra para determinar que carta de condução vais precisar e outra para estimar o preço aceitável de um veículo usado.
Os stands de automóveis da tua cidade estão todos com uma promoção de cinco anos e 0% de juros, que gostarias de aproveitar. Mas não tens a certeza se consegues suportar as prestações mensais do carro que queres.
A prestação mensal é o preço total do carro dividido pelo número de meses do período de cinco anos.
Implementa a função canIBuy(vehicle:price:monthlyBudget:), que recebe os seguintes argumentos:
vehicle: o nome do veículo que queres comprar.price: o preço do veículo que queres comprar.monthlyBudget: a quantia de dinheiro que consegues pagar todos os meses.A função deve devolver a seguinte mensagem, de acordo com as seguintes condições:
"Yes! I'm getting a <vehicle>"."I'll have to be frugal if I want a <vehicle>"."Darn! No <vehicle> for me".canIBuy(vehicle: "1974 Ford Pinto", price: 516.32, monthlyBudget: 100.00)
// returns "Yes! I'm getting a 1974 Ford Pinto"
canIBuy(vehicle: "2011 Bugatti Veyron", price: 2_250_880.00, monthlyBudget: 10000.00)
// returns "Darn! No 2011 Bugatti Veyron for me"
canIBuy(vehicle: "2020 Indian FTR 1200", price: 12_500, monthlyBudget: 200)
// returns "I'll have to be frugal if I want a 2020 Indian FTR 1200"
Decidiste comprar um veículo usado e precisas de determinar que tipo de carta de condução vais precisar para o conduzir.
Implementa a função licenseType(numberOfWheels:), que recebe o argumento numberOfWheels, o número de rodas do veículo que queres comprar.
A função deve devolver a seguinte mensagem, de acordo com as seguintes condições:
"You will need a motorcycle license for your vehicle"."You will need an automobile license for your vehicle"."You will need a commercial trucking license for your vehicle"."We do not issue licenses for those types of vehicles".licenseType(numberOfWheels: 2)
// returns "You will need a motorcycle license for your vehicle"
licenseType(numberOfWheels: 6)
// returns "You will need an automobile license for your vehicle"
licenseType(numberOfWheels: 18)
// returns "You will need a commercial trucking license for your vehicle"
licenseType(numberOfWheels: 0)
// returns "We do not issue licenses for those types of vehicles"
Agora que já tomaste a tua decisão, queres ter a certeza de que consegues um preço justo no stand. Como estás interessado em comprar um veículo usado, o preço depende da idade do veículo. Para uma estimativa aproximada, assume que, se o veículo tiver menos de 3 anos, custa 80% do preço original que tinha quando era novo. Se tiver pelo menos 10 anos, custa 50%. Se o veículo tiver pelo menos 3 anos mas não mais de 10 anos, custa 70% do preço original.
Implementa a função calculateResellPrice(originalPrice:yearsOld:), que recebe os argumentos originalPrice, que contém o preço original do veículo, e yearsOld, que contém a idade do veículo em anos.
A função deve devolver o preço de revenda do veículo.
calculateResellPrice(originalPrice: 1000, yearsOld: 1)
// returns 800
calculateResellPrice(originalPrice: 1000, yearsOld: 5)
// returns 700
calculateResellPrice(originalPrice: 1000, yearsOld: 15)
// returns 500
Inscreve-te no Exercism para aprenderes e dominares Swift com 35 conceitos116 exercícios, e mentoria humana real, tudo grátis.