A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Aserciones y Precondiciones

21/22
Recursos

Aportes 10

Preguntas 1

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesi贸n.

La funci贸n assert() te permite verificar el estado de tu programa en tiempo de ejecuci贸n y fallar si las cosas no son como deber铆an ser. Una de las caracter铆sticas interesantes de assert() es que se elimina autom谩ticamente cuando construyes tu aplicaci贸n en modo de lanzamiento, pero si no queres que eso suceda, si queres que tu aplicaci贸n se bloquee si algo est谩 muy mal, entonces deber铆as usar la funci贸n precondition() en su lugar.

let age = -5
assert(age >= 0, "La edad de una persona no puede ser negativa."

precondition() funciona de manera id茅ntica a assert(): dale una condici贸n para verificar junto con un mensaje opcional para imprimir si la verificaci贸n falla. En tiempo de ejecuci贸n, incluso en el modo de liberaci贸n, Swift ejecutar谩 la verificaci贸n por vos y se bloquear谩 si falla.

precondition(age >= 0, "La edad de una persona no puede ser negativa.")

En ambos casos devuelve este error:

error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0).
The process has been left at the point where it was interrupted, use 鈥渢hread return -x鈥 to return to the state before expression evaluation.

import UIKit

var hungry: Bool = true
var thereIsGas: Bool = true
var thereIsingredients: Bool = true


func makeSandwich() throws{
    if hungry {
        if thereIsGas {
            if thereIsingredients {
                
                print("Hora de comer")
            }else{
                throw SandwichError.noyIngredients
            }
        }else{
            throw SandwichError.notGas
        }
    } else{
        throw SandwichError.notHungry
    }
}


do{
    try makeSandwich()
    }catch SandwichError.notHungry{
        notHungry()
    }
    catch SandwichError.notGas{
        notGas()
    }
    catch SandwichError.noyIngredients{
        noyIngredients()
    }catch let error {
        print(error.localizedDescription)
    }


func notHungry(){
    print("Mas tarde, no tengo hambre")
}
func notGas(){
    print("Se termino el gas")
}
func noyIngredients(){
    print("No tengo todos los ingredientes")
}
func verifySteps(){
    print("Verificar si estan todos los ingredientes")
}


enum SandwichError: Error {
    case notHungry
    case notGas
    case noyIngredients
}

El concepto del debug siempre ha ayudado a poder localizar los posibles errores que existan en nuestro codigo que por malas practicas quizas no sean tan visibles para el programados, para eso es bueno conocer el buen manejo de los assert y los preconditions

faltan por explicar muchas cosas de lo basico y ya estan pasando a nivel medio

esto es TDD?

las precondiciones me sonaron a: no compiles el c贸digo a menos que se cumpla esto , si no se cumple lanzame tal error para saber donde fall贸.

let gasLevel = -0.2

assert(gasLevel >= 0, "el nivel de gasonila no puede ser negativo")

if gasLevel == 1.0 {
    print("el tanque esta lleno")
} else if gasLevel >= 0.5 {
    print("el tanque esta a mas de la mitad")
} else if gasLevel < 0.5 {
    if gasLevel <= 0 {
        assertionFailure("el nivel de gasonila no puede ser negativo")
    } else {
        print("el nivel de la gasonila esta a menos de la mitad")
    }
}

// Reto

let batteryPercentage = -10

if batteryPercentage < 20,
    batteryPercentage > 0{
    print("bateria baja")
}else if batteryPercentage > 20,
    batteryPercentage <= 100 {
    print("bateria ok")
}else{
    assertionFailure( "La carga de la bateria no puede ser mayor a 100% o menor a 0%")
}


let areaTractorCrop = 50_000
let areaLandCrop = 10_000

if areaTractorCrop <= areaLandCrop
{
    print("El tractor puede cosechar sin problemas")
}
else if areaTractorCrop <= areaLandCrop / 2
{
    print("El tractor puede cosechar sin problemas, pero requiere de m谩s tiempo")
}
else
{
    assertionFailure("Las dimensiones del tractor son demasiadas para el 谩rea requerida")
}

los asserts son globales? Me refiero a que si la declaro despu茅s de la creaci贸n de la variable age pero esta es declarada al inicio de mi c贸digo al igual que el asserts pero la inserci贸n de la edad del usuario es de los 煤ltimos datos el assert seguir铆a funcionando? o es como una condicional que se tiene que poner despu茅s del cambio de valor de la variable?