Benvenuti al nostro tutorial su Zig, un linguaggio di programmazione moderno e performante che sta guadagnando sempre più popolarità tra gli sviluppatori. Zig è noto per la sua semplicità, efficienza e robustezza, rendendolo ideale per progetti di sistema e applicazioni ad alte prestazioni. In questo percorso in 10 sezioni, esploreremo i concetti fondamentali di Zig attraverso esempi pratici che potrai eseguire direttamente nell’articolo. Pronto a iniziare? Andiamo!
Zig è un linguaggio di programmazione progettato per essere veloce, sicuro e semplice. È ideale per lo sviluppo di sistemi e applicazioni dove la performance e la gestione della memoria sono critiche.
Per iniziare, ecco qui il classico Hello World!
const std = @import("std");
pub fn main() void {
std.debug.print("Hello, World!\n", .{});
}
In Zig, le variabili possono essere dichiarate con const
per costanti e var
per variabili mutabili. Zig è tipizzato staticamente, quindi ogni variabile ha un tipo specifico.
const std = @import("std");
pub fn main() void {
const a: i32 = 10;
var b: f32 = 1;
b = b + 1;
std.debug.print("a: {}, b: {}\n", .{a, b});
}
Zig supporta le classiche strutture di controllo come if
, else
, e while
.
Ecco alcuni esempi pratici
const std = @import("std");
pub fn main() void {
const condition = true;
if (condition) {
std.debug.print("Condition is true\n", .{});
} else {
std.debug.print("Condition is false\n", .{});
}
}
Le funzioni in Zig sono dichiarate con la parola chiave fn
.
const std = @import("std");
fn add(a: i32, b: i32) i32 {
return a + b;
}
pub fn main() void {
const result = add(5, 7);
std.debug.print("Result: {}\n", .{result});
}
Zig offre potenti strumenti per lavorare con array e slices.
const std = @import("std");
pub fn main() void {
const array = [5]i32{1, 2, 3, 4, 5};
const slice = array[1..4];
std.debug.print("Slice: {}/{}/{}\n", .{slice[0], slice[1], slice[2]});
}
La gestione dei puntatori e dell’allocazione dinamica è cruciale per applicazioni ad alte prestazioni.
const std = @import("std");
pub fn main() void {
const x: i32 = 10;
const ptr = &x;
std.debug.print("Value of x: {}, Value at ptr: {}\n", .{x, ptr.*});
}
Zig offre un sistema di gestione degli errori molto robusto.
const std = @import("std");
fn mayFail() !void {
return error.SomeError;
}
pub fn main() void {
if (mayFail()) |err| {
std.debug.print("Error occurred: {}\n", .{err});
} else {
std.debug.print("No error occurred\n", .{});
}
}
Le strutture in Zig sono simili a quelle di altri linguaggi, ma con alcune peculiarità.
const std = @import("std");
const Person = struct {
name: []const u8,
age: u8,
};
pub fn main() void {
const person = Person{name: "Alice", age: 30};
std.debug.print("Name: {}, Age: {}\n", .{person.name, person.age});
}
I generici permettono di scrivere codice riutilizzabile e flessibile.
const std = @import("std");
fn identity(comptime T: type, value: T) T {
return value;
}
pub fn main() void {
const result = identity(i32, 42);
std.debug.print("Result: {}\n", .{result});
}
Hai completato il tutorial di base su Zig! Ora sei pronto per esplorare ulteriormente e applicare ciò che hai imparato in progetti reali. Continua a sperimentare e approfondire la tua conoscenza di Zig per sfruttarne al massimo le potenzialità.
const std = @import("std");
pub fn main() void {
std.debug.print("Congratulations, you've completed the tutorial!\n", .{});
}
Zig è un linguaggio potente e flessibile, perfetto per chi cerca performance, sicurezza e controllo. Continua a esplorare e a costruire grandi cose con Zig!