Skip to content

Instantly share code, notes, and snippets.

@mateuspestana
Created July 14, 2022 14:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mateuspestana/92a9aed383ef23d33e03482fa67d7682 to your computer and use it in GitHub Desktop.
Save mateuspestana/92a9aed383ef23d33e03482fa67d7682 to your computer and use it in GitHub Desktop.
/*
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