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
Publicar un comentario