Created
July 11, 2022 19:54
-
-
Save mateuspestana/f40e0e04af304b1bda7b1497ad3eab75 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Agora eu sei comentar da forma correta! | |
LOOPS | |
*/ | |
let platforms = ["iOS", "macOS", "tvOS", "watchOS", "CarPlay"] | |
for os in platforms { | |
print("Swift é ótimo para \(os)") | |
} | |
// O loop no Swift é bastante simples, quando se trata de um array. | |
for i in 1...12 { | |
print("5 x \(i) é \(5*i)") | |
} | |
// Aqui o bicho pega. se eu digito 1...12 seria o mesmo que no R fazer 1:12, ou seq(1, 12, 1). Isso inclui o 1 e o 12. | |
for i in 1...12 { | |
print("A tabuada do \(i):") | |
for j in 1...12 { | |
print(" \(j) x \(i) é \(j*i)") | |
} | |
print() | |
} | |
// Aqui temos dois loops aninhados. Coloquei o print() no final para ele pular uma linha e ficar melhor no console, conforme explicitado pelo HwS. | |
// E se eu quisesse um range de todos os números, menos o último? | |
for i in 1..<5 { print(i) } | |
// E se eu não quiser usar nem i nem j ou qualquer nome? Uso _ | |
var lyric = "Piririm" | |
for _ in 1...3 { | |
lyric += " pom" | |
} | |
print(lyric) | |
// Assim, podemos escrever: | |
let agentes: [String] = ["Matheus", "Gabriela", "Weslley", "Paula", "Eric", "Marília"] | |
for _ in agentes { | |
print("[CENSURADO] é um agente secreto!") | |
} | |
// Podemos printar assim também, mas é arriscado pois não sabemos o tamanho: | |
print(agentes[0...3]) | |
// O menos arriscado: | |
print(agentes[0...]) | |
// Assim, ele vai até o último elemento possível. | |
/* | |
WHILE | |
*/ | |
// O while é menos usado que o for: | |
var countdown = 10 | |
while countdown > 0 { | |
print("\(countdown)") | |
countdown -= 1 | |
} | |
print("Ground control to Major Tom...") | |
// O While é útil QUANDO VOCÊ NAO SABE QUANTAS VEZES O LOOP VAI RODAR. | |
let id = Int.random(in: 1...1000) | |
print(id) | |
// O .random(in:), que funciona em int e double, escolhe um número aleatoriamente. | |
var roll = 0 // variável para guardar o valor do dado | |
while roll != 20 { | |
roll = Int.random(in: 1...20) | |
print("Joguei o dado e deu \(roll)") | |
} | |
print("CONSEGUI!") | |
// Em resumo, usamos o for geralmente quando temos sentenças finitas: contando de 1 a 10, itens em um array, etc. Contudo, usamos o while quando temos uma condição arbitrária até ela dar "false". Assim usamos um while até o usuário dizer pra parar, o servidor pedir pra parar, encontrarmos uma resposta ou termos gerado dados o suficiente. | |
/* | |
BREAK & CONTINUE | |
*/ | |
// Continue: pula o item corrente | |
// break: pula todas as outras iterações seguintes | |
let filenames: Array<String> = ["me.jpg", "work.txt", "getulio.jpg", "logo.psd"] | |
for filename in filenames { | |
if !filename.hasSuffix(".jpg") { | |
continue | |
} | |
print("Foto encontrada: \(filename)") | |
} | |
// Ou seja, o continue pula a iteração quando ela é falsa, e vai para a próxima. Sendo falsa (sendo que já é falsa), ela sai e printa que encontrou a foto. | |
let number1 = 4 | |
let number2 = 14 | |
var multiples = Array<Int>() | |
for i in 1...100_000 { | |
if i.isMultiple(of: number1) && i.isMultiple(of: number2) { | |
multiples.append(i) | |
if multiples.count == 10 { | |
break | |
} | |
} | |
} | |
print(multiples) | |
// Quando temos dados os suficientes (no caso acima, 10), ele "quebra" e termina, ignorando os próximos valores. | |
/* | |
CHECKPOINT 3 | |
Fazer um loop de 1 a 100, e sempre que um número for: | |
- multiplo de 3, printar "Fizz" | |
- múltiplo de 5, printar "Buzz" | |
- múltiplo de 3 e 5, printar "FizzBuzz" | |
- se não for nenhum dos casos acima, printar o número. | |
*/ | |
for number in 1...100 { | |
if number.isMultiple(of: 3) && number.isMultiple(of: 5) { | |
print("FizzBuzz") | |
} else if number.isMultiple(of: 3){ | |
print("Fizz") | |
}else if number.isMultiple(of: 5){ | |
print("Buzz") | |
} else { | |
print(number) | |
} | |
} | |
// Pelo switch case: | |
for number in 1...100 { | |
switch (number.isMultiple(of: 3), number.isMultiple(of: 5)) { | |
case (true, false): | |
print("Fizz!") | |
case (false, true): | |
print("Buzz!") | |
case(true, true): | |
print("FizzBuzz!") | |
default: | |
print(number) | |
} | |
} | |
// Reparar que criei uma tupla pra resolver. Eu poderia fazer number % 3 == 0, mas .isMultiple(of:) é melhor. | |
// Poderia resolver também fazendo uma função para o FizzBuz | |
func fizzbuzz(numero: Int) -> String { | |
switch (numero.isMultiple(of: 3), numero.isMultiple(of: 5)) { | |
case (true, true): | |
return "FizzBuzz" | |
case (true, false): | |
return "Fizz" | |
case (false, true): | |
return "Buzz" | |
default: | |
return "Nem assumido, nem desassumido, apenas \(numero)" | |
} | |
} | |
print(fizzbuzz(numero: 998)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment