Tuplas y texto

Tuplas y texto

Ahora después de ver los tipos básicos, quizá te habías preguntado por un detalle del fichero hello_user.zig: ¿Qué es ese símbolo .{} que aparece en la llamada a la función print?

std.debug.print("\nHola, usuario.\n", .{});

Eso es una estructura de datos que se llama tupla. En concreto, .{} es una tupla vacía.

La función print espera que como el segundo argumento le pasemos una tupla. No tiene porque ser vacía. Una tupla es una estructura de datos sencilla que incluso puede contener varios valores a la vez. Podríamos tener algo así con un valor:

hello_user_2.zig

const std = @import("std");

pub fn main() void {

    const s_name = "Programador";

    std.debug.print(

        \\Hola, {s},

        \\Te estaba esperando.

        \\

    , .{s_name});

}

$ zig run hello_user_2.zig

Hola, Programador.

Te estaba esperando.

Puedes poner tu nombre como valor de la cadena s_name en vez de “Programador”.

Esta vez la cadena que hemos puesto va precedida por la doble barra inclinada: \\ y tiene varias líneas. Esto quiere decir que es una cadena multilínea y por lo tanto los saltos de línea van implícitos con cada nueva línea escrita.

Como ves, la cadena \\Hola, {s}, ahora además contiene un {s}. Este símbolo indica que se va a insertar un dato tipo desde la tupla.

{s} significa que ese dato es una cadena de texto (s viene de string). Si ese dato fuera un número no podríamos poner {s} como indicador de inserción, tendríamos que poner otra letra, por ejemplo {d} (aquí la d es de decimal).

Podríamos también pasar más datos en la tupla:

hello_user_3.zig

const std = @import("std");

pub fn main() void {

    const s_name = "Programador";

    const n_age = 20;

   std.debug.print("\nHola, {s}.\nTienes {b} años.\n", .{ s_name, n_age });

}

$ zig run hello_user_3.zig

Hola, Programador.

Tienes 10100 años.

¿10100 años?

¿Por qué tenemos esa salida si n_age tiene el valor 20? Tómate tu tiempo para pensarlo.

Fíjate que tenemos un indicador de inserción {b}. ¿Qué podría significar esa b para que 20 pase a ser 10100?

Formatos de datos en una cadena

Aquí tienes una tabla de estos indicadores para que te orientes:

{s}

Cadena de texto: “Hola”, “Programador”

{d}

Número impreso en formato decimal: 1, 3, 42, 23 etc

{b}

El número será impreso en binario: 0001, 0010…

{x}

El número será impreso en hexadecimal en minúsculas: 255 como ff

{X}

El número es impreso en hexadecimal en mayúsculas: 255 como FF

{c}

Un carácter (como un u8 interpretado como ASCII): 69 es ‘a’

{}

Zig intenta detectar el tipo

Como habrás podido concluir {b} quiere decir que el número que le pasamos en la tupla será impreso en formato binario en la cadena.

Si ponemos {} o {d} el resultado nos devolverá el formato decimal al que estamos acostumbrados:

hello_user_4.zig

const std = @import("std");

pub fn main() void {

    const s_name = "Programador";

    const n_age = 20;

   std.debug.print("\nHola, {s}.\nTienes {d} años.\n", .{ s_name, n_age });

}

$ zig run hello_user_4.zig

Hola, Programador.

Tienes 20 años.

Tipos de datos básicos
Representación de caracteres
© 2025 Zen of Zig