Ir al contenido principal

Funciones (y procedimientos) en ZigLang

ZigLang es un lenguaje de programación con la "misma onda" de los "nuevos" lenguajes como Ballerina, V Lang u Odin, pues al igual que estos ha tomado lo mejor de los lenguajes "clásicos" como C, C++ y Java optando por hacer a un lado lo que no le era conveniente.

En este post veremos cómo crear funciones en éste lenguaje.

Pero antes de hacer nada, diferenciemos entre lo que es una función y un procedimiento.

Función: Es un bloque de código que recibe parámetros, ejecuta operaciones y devuelve un valor como resultado.

Se usa para obtener un cálculo, transformación o dato específico.

Miremos un ejemplo (pseudo código):

function suma(int x, int y): int{
  return x+y;
}

print "Suma (3,4) = %d\n", suma(3,4);

Procedimiento: Es un bloque de código que ejecuta acciones, pero no devuelve un valor directamente.

Se usa para tareas como imprimir en pantalla, guardar en base de datos o modificar variables globales.

Miremos un ejemplo (pseudo código):

procedure suma(int x, int y): void{
    int suma = x + y;
    print "Suma (%d,%d) = %d\n",x,y, suma;
}

call suma(4,5); -- 9

En Zig, las funciones son bloques de código que encapsulan lógica y pueden recibir parámetros y devolver valores. Su sintaxis es clara y estricta, lo que ayuda a escribir programas seguros y eficientes.

fn nombreFuncion(param1: Tipo1, param2: Tipo2) TipoRetorno {
    // cuerpo de la función
    return valor;
}

Además las funciones en Zig son tipadas explícitamente.

Hagamos algunos ejemplos.

Funciones en Zig Lang

1. Crearemos una función para sumar dos números enteros.

funciones.zig

const std = @import("std");

fn suma(x: i32, y: i32) i32 {
    return x + y;
}

pub fn main(init: std.process.Init) !void {
    const io = init.io;
    var buf: [128]u8 = undefined;
    var stdout = std.Io.File.stdout().writer(io, &buf);

    try stdout.interface.print("Suma (3,4) = {}\n", .{suma(3, 4)});
    try stdout.interface.flush();
}

Compilamos:

$ zig build-exe funciones.zig

Ejecutamos:

$ funciones.exe

Salida:

Suma (3,4) = 7

2. Función que reciba una cadena tipo ``string`` y evalue si es "casado" se le de un bono del 25% y en otro caso solo el 5%.

funciones.zig

const std = @import("std");

fn esCasado(edo_civil: []const u8) bool {
    if (std.mem.eql(u8, edo_civil, "casado")) {
        return true;
    } else {
        return false;
    }
}

pub fn main() void {
    const edo_civil = "casado";

    if (esCasado(edo_civil)) {
        std.debug.print("El empleado tiene un bono del 25%.\n", .{});
    } else {
        std.debug.print("El empleado tiene un bono del 5%.\n", .{});
    }
}

Compilamos:

$ zig build-exe funciones.zig

Ejecutamos:

$ funciones.exe

Salida:

El empleado tiene un bono del 25%.

3. Ejemplo de funciones como valor.

funciones.zig

const std = @import("std");

fn doble(x: i32) i32 {
    return x * 2;
}

pub fn main() void {
    const f = doble; // referencia a la función
    std.debug.print("Doble de 5 = {}\n", .{f(5)});
}

Compilamos:

$ zig build-exe funciones.zig

Ejecutamos:

$ funciones.exe

Salida:

Doble de 5 = 10

4. Ejemplo paso de funciones como parámetros.

funciones.zig

const std = @import("std");

// Definimos una función que recibe otra función como parámetro
fn aplicar(f: fn (i32) i32, valor: i32) i32 {
    return f(valor);
}

// Una función normal
fn doble(x: i32) i32 {
    return x * 2;
}

// Otra función
fn triple(x: i32) i32 {
    return x * 3;
}

pub fn main() void {
    std.debug.print("Aplicar doble a 5 = {}\n", .{aplicar(doble, 5)});
    std.debug.print("Aplicar triple a 5 = {}\n", .{aplicar(triple, 5)});
}

Compilamos:

$ zig build-exe funciones.zig

Ejecutamos:

$ funciones.exe

Salida:

Aplicar doble a 5 = 10
Aplicar triple a 5 = 15

En próximas entradas veremos una comparativa de Zig Lang con otros lenguajes.

Enlaces:

https://ziglang.org/
https://ewebik.com/programacion/funciones-y-procedimientos

Comentarios

Entradas populares de este blog

Rocket: un framework web para Rust

Rocket Framework es: Un framework web escrito en Rust.   Inspirado en Rails, Flask, Bottle y Yesod.  Admite el manejo de solicitudes HTTP, Web Sockets, JSON, plantillas y más. Creando un proyecto con Rocket Framework En primer lugar, verificamos la instalación de Rust en nuestras máquinas: rustc - - version Continuamos con la configuración de Rust nightly como nuestra cadena de herramientas predeterminada ejecutando el comando: rustup default nightly Si lo prefieres, una vez que configuremos un directorio de proyecto en la siguiente sección, puedes usar anulaciones por directorio para usar la versión nocturna solo para tu proyecto Rocket ejecutando el siguiente comando en el directorio: rustup override set nightly Creamos nuevo proyecto `` hola-rocket `` y nos ubicamos en el directorio creado: cargo new hola - rocket - - bin cd hola - rocket Con Cargo, agregamos la dependencia de rocket: cargo add rocket Abrimos el archivo `` Cargo.toml `` Ca...

Odin language: el lenguaje de programación orientado a datos para un desarrollo de software sensato

En esta serie sobre lenguajes de programación hablamos de Odin , un lenguaje orientado a datos. Un nuevo lenguaje de programación que nos podrá recordar a lenguajes como C++, Python, Golang o hasta Rust. Instalación (Windows): 1 2 3 4 $ git clone https://github.com/odin-lang/Odin $ cd Odin $ git pull $ build.bat release Debemos asegurarnos de crear la variable de entorno: Nombre: ODIN_HOME Valor: C:\Users\HP\Documents\pruebasOdin\Odin Ejemplo 1. Como primer programa tendremos al clásico "Hola, mundo". holamundo.odin package holamundo import " core:fmt " main : : proc ( ) { fmt . println ( " ¡Hola, mundo desde Odin! " ) } Construimos: $ odin build holamundo . odin - file Ejecutamos: $ holamundo .exe Recordar que si usamos Visual Studio Code podemos instalar el plugin de Odin Language: https://marketplace.visualstudio.com/items?itemName=DanielGavin.ols Ejemplo 2. Programa que muestre las variables que pod...

Programación Windows Batch (CMD) parte 3

Crear ciclos para efectuar operaciones tediosas nos ahorrará tiempo para realizar otras tareas. En está ocasión veremos ciclos con FOR . ¿Cuál es la síntaxis de bucle FOR en Windows Batch? Si está dentro de un archivo *.bat : FOR %%variable IN (seq) DO operaciones Si lo ejecutamos en una terminal: FOR %variable IN (seq) DO operaciones Ejemplo 1 . Recorrer una secuencia de números del 0 al 5: recorrer.bat @ echo off FOR %%i in ( 0 1 2 3 4 5 ) DO echo Hola no. %%i pause Nos imprimirá en pantalla: Hola no. 0 Hola no. 1 Hola no. 2 Hola no. 3 Hola no. 4 Hola no. 5 ¿Puedo usar contadores? Si, se pueden usar. Ejemplo 2 . Uso de contadores: contador.bat @ echo off set numeros = 1 2 3 4 5 6 7 8 9 10 set cont = 0 for %%a in ( %numeros% ) do ( echo Hola no. %%a :: Contador set /a cont+ = 1 ) echo Total: %cont% Este código nos imprimirá, además de los mensajes Hola no. 0 ..., el total de valores conta...