Created
July 14, 2022 14:08
-
-
Save mateuspestana/92a9aed383ef23d33e03482fa67d7682 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
/* | |
Valores default para parâmetros | |
*/ | |
// Para especificar um valor padrão para um parâmetro em uma função, podemos fazer o seguinte: | |
func printTabuada(for number: Int, end: Int = 10) { | |
for i in 1...end { | |
print("\(i) x \(number) = \(i * number)") | |
} | |
} | |
printTabuada(for: 10, end: 12) | |
printTabuada(for: 5) | |
// Error handling | |
// É possível controlar os erros em uma função (um arquivo que não existe, um download que falhou, um valor não permitido, etc) | |
// Fazemos em 3 passos: 1) determinamos os tipos de erro possíveis; 2) escrevemos uma função que mostra os erros caso aconteçam; 3) chamamos a função e lidamos com os erros que podem ocorrer; | |
// 1) | |
enum ErroSenha: Error { // isso significa que ErroSenha está em conformidade com o tipo Error | |
case short, obvious | |
} | |
// Isso diz que existem dois erros possíveis: short e obvious, mas não os DEFINE. | |
// 2) | |
func checaSenha(_ password: String) throws -> String { | |
if password.count < 8 { | |
throw ErroSenha.short | |
} | |
if password == "1234567890" { | |
throw ErroSenha.obvious | |
} | |
if password.count >= 8 && password.count < 10 { | |
return "Ok" | |
} else if password.count < 12 { | |
return "Boa!" | |
} else { | |
return "Excelente!!!!!!!!" | |
} | |
} | |
// 3) | |
let senha = "1234576" | |
do { | |
let result = try checaSenha(senha) | |
print("Senha: \(result)") | |
} catch ErroSenha.short { | |
print("Erro! Senha muito curta.") | |
} catch ErroSenha.obvious { | |
print("Senha muito óbvia! Tente outra.") | |
} catch { | |
print("Um erro que não sei lidar.") | |
} | |
// CHECKPOINT 4 | |
// Escrever uma função que aceite um inteiro de 1 a 10000 e retorne a raiz quadrada desse número. Não posso usar sqrt(), não pode o número ser menor que 1 ou maior que 10mil, acusando assim "out of bonds"; considerar apenas as raízes inteiras; se uma raiz não puder ser achada, acusar "no root" | |
enum ErroRaiz: Error { | |
case menor, maior, semMatch | |
} | |
func achaRaiz(doNumero numero: Int) throws -> String { | |
if numero < 1 { | |
throw ErroRaiz.menor | |
} | |
if numero > 10_000 { | |
throw ErroRaiz.maior | |
} | |
var raizes: [Int: Int] | |
for i in 1...100 { | |
if numero == i * i { | |
return("\(i)") | |
} | |
} | |
throw ErroRaiz.semMatch | |
} | |
do { | |
let resultado = try achaRaiz(doNumero: 100) | |
print("A raiz é \(resultado)") | |
} catch ErroRaiz.maior { | |
print("Maior que 10 mil!") | |
} catch ErroRaiz.menor { | |
print("Menor que 1!") | |
} catch ErroRaiz.semMatch { | |
print("A raiz não é um inteiro!") | |
} catch { | |
print("SOCORRO!") | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment