Sentencias Condicionales If en Go: Uso y Ejemplos Prácticos
Resumen
¿Qué son las sentencias condicionales en programación?
Las sentencias condicionales son fundamentales en la programación, ya que permiten ejecutar bloques de código específicos basados en condiciones dadas. Estas sentencias permiten que el programa tome decisiones, dirigidas por los valores que manejan. Una de las más comunes en la mayoría de lenguajes es la sentencia if. Vamos a explorar su funcionamiento en el lenguaje de programación Go.
¿Cómo funciona la sentencia if en Go?
La estructura básica de un if en Go se utiliza para verificar si una condición es verdadera. Si lo es, se ejecuta el conjunto de instrucciones asociadas a ese if. Por ejemplo, podemos verificar si una variable es igual a cierto valor:
valorUno :=1valorDos :=2if valorUno ==1{ fmt.Println("Es uno")}else{ fmt.Println("No es uno")}
En este ejemplo, si valorUno es igual a 1, se imprimirá "Es uno". Si no, se ejecutará el bloque else, imprimiendo "No es uno".
¿Cómo aplicar puertas lógicas en sentencias condicionales?
Las puertas lógicas son un poderoso componente en las sentencias condicionales, permitiendo combinar múltiples condiciones. En Go, las puertas lógicas Y (&&) y OR (||) son comúnmente usadas.
Puerta lógica AND
Ambas condiciones deben ser verdaderas para que el bloque de código se ejecute:
if valorUno ==1&& valorDos ==2{ fmt.Println("Es verdad")}
Aquí, "Es verdad" se imprimirá solo si valorUno es igual a 1 yvalorDos es igual a 2.
Puerta lógica OR
Solo una de las condiciones debe ser verdadera para ejecutar el bloque de código:
if valorUno ==0|| valorDos ==2{ fmt.Println("Es verdad")}
En este caso, "Es verdad" se imprimirá porque valorDos sí es igual a 2, aunque valorUno no es 0.
¿Cómo manejar errores con sentencias if?
Las sentencias if son útiles para manejar errores en Go, especialmente cuando se involucran conversiones o parsing. Un caso común es convertir una cadena de texto a un número entero utilizando el paquete strconv.
Aquí, si la conversión falla, la variable err será distinta de nil, desencadenando un mensaje de log y terminando la ejecución del programa. Si no hay error, imprimirá el valor convertido.
¿Qué desafíos puedes intentar resolver?
Para practicar las sentencias condicionales en Go, aquí tienes dos desafíos:
Crear una función que determine si un número es par o impar.
Desarrollar una función que reciba un usuario y un password, los compare y determine si el acceso es correcto, retornando true o false.
Ambos retos tienen soluciones disponibles en el repositorio, pero se recomienda intentar resolverlos por cuenta propia para mejorar la lógica en programación. Recuerda que siempre hay múltiples formas de resolver un problema y ver cómo otros lo han solucionado también es un buen aprendizaje.
La programación es una habilidad enriquecedora que se perfecciona con la práctica y el aprendizaje continuo. ¡Sigue adelante y disfruta del viaje!
Me parece que está mal editado el video, habla de funciones para convertir texto a un entero, pero no usó eso :thi
muy cierto
Hola! Gracias por el reporte, vamos a reportarlo al equipo :D
Retos 1 y 2
package main
import"fmt"func main(){ifisPair(6){ fmt.Println("Number is pair")}else{ fmt.Println("Number is odd")}ifisValidUser("Alpha5","MyPassword"){ fmt.Println("Credentials are valid")}else{ fmt.Println("Credentials aren't valid")}}func isPair(num int) bool {return num %2==0}func isValidUser(userName, pass string) bool {return userName =="Alpha"&& pass =="MyPassword"}
Reto :)
(n)vim verdad? ya somos dos :)
Hola, Arnold.
Vengo de utilizar Python: allí se me mencionó que la pocisión del entry-point (que en este caso sería la función main) tiene ser siempre por debajo de todo.
Quizá para facilitar la lectura del código —o lo que no descartaría—: evitar errores de ejecución.
Mis apauntes
atoi
Atoi is equivalent to ParseInt(s, 10, 0), converted to type int.
fatal
Fatal is equivalent to Print() followed by a call to os.Exit(1).
package main
import("fmt""log""strconv")funcmain(){iftrue{ fmt.Println("Hello World")}else{ fmt.Println("Bye World")}//Converting strings to integers value, err := strconv.Atoi("23")// Atoi is equivalent to ParseInt(s, 10, 0), converted to type int.if err !=nil{ log.Fatal(err)//Fatal is equivalent to Print() followed by a call to os.Exit(1).} fmt.Println(value)//Even or odd numb :=10if numb%2!=0{ fmt.Println("Number is odd")}else{ fmt.Println("Number is even")}//login user :="Pedro" password :="12345"if user =="Pedro"&& password =="12345"{ fmt.Println("Logged in")}elseif user =="Pedro"{ fmt.Println("Password incorrect")}elseif password =="12345"{ fmt.Println("User incorrect")}else{ fmt.Println("Credencials incorrect")}}
Gracias, crack. Muy buenos apuntes
Reto 1:
funcesPar(num int)bool{ result := num%2==0if result { fmt.Println(num,"es par")}else{ fmt.Println(num,"NO es par")}return result
}
Puertas lógicas 😅 años que no escuchaba a los operadores lógicos, me regresé a la uni ❣️
En Go, un statement puede ser parte de un condicional. Por ejemplo, para convertir un string a un int se puede utilizar la función Atoi del paquete strconv. La función devuelve un int si la conversión es exitosa. De lo contrario, devuelve un error. Así:
funcmain(){ a :="10"// n y err están en el scope de main n, err := strconv.Atoi(a)if err !=nil{panic(err)} fmt.Printf("The value of a is %d\n", n)}
El statement strconv.Atoi puede ejecutarse en la misma declaración del condicional:
funcmain(){ a :="10"// Inlineif n, err := strconv.Atoi(a); err !=nil{panic(err)}else{ fmt.Printf("The value of a is %d\n", n)}}
Aquí hace falta la rama else porque las variables declaradas en el statement (n y err) sólo están disponibles en el scope del condicional y no en el de la función main. Todo depende del caso de uso, pero a ustedes, ¿cuál versión les gusta más?
En Go, nil es el valor cero para punteros, interfaces, mapas, slices, canales y funciones; y corresponde a la representación de un valor no inicializado. Pero ojo, es muy importante no confundir valor “no inicializado” con estado indeterminado, pues nil no es más que otro posible valor válido. Si, por ejemplo, hablamos de la interfaz error, el valor nil será el equivalente a decir que no hay error. Otra cosa muy diferente sería decir que no sabemos si hay o no error (estado indeterminado).
¿Hola a todos, alguien sabe donde encuentro el repositorio al que se refiere el profesor?.
package main
import"fmt"func authFunction(username, password string) bool {if username =="oscar"&& password =="qwe"{ fmt.Println("Correct Data")returntrue}println("wrong data")returnfalse}func main(){var username string
var password string
fmt.Println("Enter your Username") _,err:= fmt.Scanln(&username)if err != nil {println("There was a user error", err)return} fmt.Println("Enter your password") _,err2:= fmt.Scanln(&password)if err2 != nil {println("There was a password error", err)return}result:=authFunction(username, password)if result ==true{ fmt.Println("Correctly authenticated")}else{ fmt.Println("There was a error, try it again")}}```package main
import"fmt"func authFunction(username, password string) bool { if username =="oscar"&& password =="qwe"{  fmt.Println("Correct Data") returntrue } println("wrong data") returnfalse}func main(){ var username string
 var password string
  fmt.Println("Enter your Username")  \_,err:= fmt.Scanln(\&username) if err != nil { println("There was a user error", err) return }  fmt.Println("Enter your password")  \_,err2:= fmt.Scanln(\&password) if err2 != nil { println("There was a password error", err) return }  result :=authFunction(username, password) if result ==true{  fmt.Println("Correctly authenticated") }else{  fmt.Println("There was a error, try it again") }}
Reto 1
func isPar(x int){if x%2==0{ fmt.Printf("¡%d es par!\n",x)}else{ fmt.Printf("Lo siento bro, %d no es par :/",x)}}
package main
import"fmt"func main(){valor1:=1valor2:=2if valor1 ==1{ fmt.Println("Es 1")}else{ fmt.Println("No es 1")}//With andif valor1 ==1&& valor2 ==2{ fmt.Println("Es verdad")}//With orif valor1 ==0|| valor2 ==2{ fmt.Println("Es verdad con alguno de los 2")}numeroPar:=8numeroImpar:=11result:=isPar(numeroPar)if result { fmt.Printf("El numero %d es Par\n", numeroPar)} result =isPar(numeroImpar)if result { fmt.Printf("El numero %d es Par\n", numeroPar)}else{ fmt.Printf("El numero %d es Impar\n", numeroImpar)}password1:="Password123"password2:="Password123"password3:="Password789"ifisValidPassword(password1, password2){ fmt.Println("El password es valido!!")}else{ fmt.Println("El password Incorrecto!!")}ifisValidPassword(password1, password3){ fmt.Println("El password es valido!!")}else{ fmt.Println("El password Incorrecto!!")}}func isPar(number int)(result bool){if number%2==0{returntrue}returnfalse}func isValidPassword(password1, password2 string)(result bool){if password1 == password2 {returntrue}returnfalse}
Primer reto:
package main
import"fmt"func parOImpar(numero int){if numero %2==0{ fmt.Printf("El número %d es par", numero)}else{ fmt.Printf("El número %d es impar", numero)}}func main(){parOImpar(13)}
Segundo reto:
package main
import"fmt"func validateUser(user string, password string){if user =="admin"&& password =="admin123"{ fmt.Printf("Acceso permitido")}else{ fmt.Printf("Acceso denegado")}}func main(){validateUser("admin","admin123")}
Reto 1 (Saber si un numero es par o impar):
package main
import"fmt"func esPar(num int){if num%2==0{ fmt.Println("Es par")}else{ fmt.Println("Es impar")}}func main(){var num =10esPar(num)}
Output:
Es par
Reto 2 (Saber si la contraseña es correcta o incorrecta):
package main
import("fmt")var users = map[string]string {"user1":"pass1","user2r":"pass2","user3":"pass4","user4":"pass4","user5":"pass5",}func isOddOrEven(number int){var result string
isEven:= number%2==0if isEven { result ="par"}else{ result ="impar"} fmt.Printf("El numero = \"%d\" es %s\n", number, result)}func validate(username, password string) bool {validUser:= users[username]== password
if validUser { fmt.Printf("Las credenciales del usuario \"%s\" son validas\n", username)}else{ fmt.Printf("Las credenciales del usuario \"%s\" son invalidas\n", username)}return validUser
}func main(){// Un numero es par o imparisOddOrEven(2020)isOddOrEven(2021)// Validar credencialesvalidate("user1","pass1")validate("user3","pass2")validate("user7","pass7")}
RESULTADO:
El numero ="2020" es par
El numero ="2021" es impar
Las credenciales del usuario "user1" son validas
Las credenciales del usuario "user3" son invalidas
Las credenciales del usuario "user7" son invalidas
Mi solución al reto:
package main
import"fmt"funcesPar(n int)bool{if n%2==0{ fmt.Printf("%d es un número par.\n", n)returntrue}else{ fmt.Printf("%d es un número impar.\n", n)returnfalse}}funcvalidarUsuario(usr, pwd string)bool{const usrBase ="Miguel"const pwdBase ="qwerty"if usr == usrBase && pwd == pwdBase { fmt.Println("Usuario y contraseña validos") fmt.Printf("¡Bienvenido %s!\n", usr)returntrue}else{ fmt.Println("Usuario o contraseña incorrectos") fmt.Println("¡Acceso denegado!")returnfalse}}funcmain(){esPar(15)//15 es un número impar.esPar(12)//12 es un número par. fmt.Println("")validarUsuario("Eustaquio","qwerty") fmt.Println("")// Usuario o contraseña incorrectos// ¡Acceso denegado!validarUsuario("Miguel","12345") fmt.Println("")// Usuario o contraseña incorrectos// ¡Acceso denegado!validarUsuario("Miguel","qwerty") fmt.Println("")// Usuario y contraseña validos// ¡Bienvenido Miguel!}
Resultado:
15 es un número impar.
12 es un número par.
Usuario o contraseña incorrectos
¡Acceso denegado!
Usuario o contraseña incorrectos
¡Acceso denegado!
Usuario y contraseña validos
¡Bienvenido Miguel!
Ejemplo de condicionales:
//CONDITIONALS//IFvalue1:=5value2:=8if value1 ==6{ fmt.Println("Value 6")}else{ fmt.Println("Not 6")}if value1 ==6&& value2 ==8{ fmt.Println("Both, 6 and 8 are correct")}else{ fmt.Println("One or both are wrong")}if value1 ==6|| value2 ==8{ fmt.Println("One or both, 6 and 8 are correct")}else{ fmt.Println("Both are wrong")}if value1 !=6{ fmt.Println("Isn't 6")}else{ fmt.Println("Is 6")}
les presento mi versión de los retos 🤠
package main
import"fmt"func parImpar(numero int )(string){if numero %2==0{return"Es par"}else{return"Es impar"}}func validar(usuario string, password string)(string){root:="platzi"pass:="platzii"if usuario==root && password==pass {return"Acceso Correcto 🚀"}else{return"Vuelve a intentarlo 💥💥"}}func main(){ fmt.Println(parImpar(10)) fmt.Println(parImpar(5))usuario:="Platzi"password:="root" fmt.Println(validar(usuario, password)) usuario ="platzi" password ="platzii" fmt.Println(validar(usuario, password))}