#1 Hello World — Silsilah Belajar Ziglang

M. Zakiyuddin Munziri
4 min readJun 10, 2022

--

Gambaran Umum

Untuk membuat kode Zig, pertama-pertama kita harus membuat file dengan akhiran .zig. Setelah itu menuliskan kode contoh seperti di bawah ini (https://github.com/zakiego/silsilah-belajar-ziglang/blob/main/1-hello-world/hello.zig).

https://github.com/zakiego/silsilah-belajar-ziglang/blob/main/1-hello-world/hello.zig

Ibarat sebuah makanan, kode di atas masih mentah. Artinya, kita perlu me-masak kode tersebut untuk bisa dijalankan.

Memasak/mencopile kode di Zig menggunakan Zig Build System.

Untuk memasak kodenya, kita tinggal menuliskan zig build-exe nama-file.zig. Setelah kode dimasak, akan menghasilkan file program yang sama dengan nama file yang kita masak, namun tanpa akhiran .zig. File inilah yang kemudian bisa kita gunakan untuk dijalankan.

Dalam kasus ini, kita akan memasak kode dengan nama file hello.zig. Untuk memasak kodenya, tuliskan zig build-exe hello.zig pada terminal. Hasilnya adalah file dengan nama hello. Cara menjalankan program ini adalah dengan menambahkan titik dan garis miring di awalan nama programnya ./hello. Saat dijalankan, program akan menghasilkan tulisan Hello, world!.

Penjelasan

const std = @import("std");

Zig menyediakan library standar yang bisa digunakan. Library tersebut diberi nama std. Std library berisikan berbagai alat dan perkakas yang bisa digunakan untuk membantu kita untuk membuat program atau bahkan membuat library lain.

Untuk menggunakan library, kita perlu memanggilnya, yaitu melakukan import dengan menuliskan perintah @import kemudian diikuti dengan nama library yang akan diimport. Dalam kasus ini, kita akan mengimport library standar (“std”).

Setelah diimport, library disimpan dalam identifier const yang diberi nama std. Untuk nama ini, kita bisa bebas untuk memberi nama apa pun. Contoh, jika menggunakan nama lain: const standarLibrary = @import("std");.

pub fn main() !void {}

Main merupakan sebuah nama function. Di dalam fungsi function itulah kemudian kita akan menulis berbagai macam kode program.

Function yang memiliki nama main memiliki kedudukan yang penting. Kenapa? Karena akan memberitahukan kompiler Zig, bahwa di situlah titik awal dari sebuah program.

Function adalah sekumpulan statement atau expression yang secara umum, memiliki tugas tertentu. Sebuah function bisa mengembalikan sebuah nilai atau bisa juga tidak. Jika function gagal dalam menjalankan tugasnya, maka dia akan mengembalikan sebuah error. Zig membuat semua ini terlihat dengan jelas.

Kode setelah main, yaitu !void merupakan return type atau jika diterjemahkan (tipe data yang dikembalikan, setelah data dijalankan).

Kenapa ditulis void? Karena void berarti kosong. Maksudnya, ketika fungsi main dijalnkan, dia tidak akan mengembalikan nilai apa pun.

Kode !void disebut dengan Error Union Type. Sintaks ini memberitahukan compiler Zig bahwa fungsi main akan mengembalikan salah satu dari dua kemungkinan, pertama mengembalikan error, atau mengembalikan sebuah value.

Bentukan asli dari return type adalah:

<error set type>!<any data type>

Dalam kode yang kita tulis, kita menggunakan return type !void. Artinya, kita menggunakan void sebagai tipe data yang dikembalikan, sedangkan tipe error tetap dibuat kosong. Ketika dibiarkan kosong, berarti tipe error yang dikembalikan adalah Inferred Error Sets.

const stdout = std.io.getStdOut().writer();

Fungsi untuk mem-print terdapat pada std.io.getStdOut().writer(). Namun karena terlalu panjang, kita bisa menyimpannya dalam constant bernama stdout.

try stdout.print("Hello, {s}!\n", .{"World"});

Terkadang fungsi memerlukan informasi tambahan untuk menjalankan tugasnya. Seperti fungsi print, ia memerlukan informasi untuk mem-print. Informasi tersebut dioper di antara kurung buka ( dan kurung tutup ). Informasi ini biasa disebut dengan arguments. Jika argument yang digunakan lebih dari satu, maka ia dipisahkan tanda oleh koma.

Dua argument yang dioper dalam funsgi stdout.print() adalah Hello, {s}!\n" dan .{"World"}. Kedua argument ini dievaluasi sewaktu proses compile.

Kode di atas menunjukkan contoh bagaimana mensubstitusi string ke dalam fungsi print. Maksudnya, {s} di dalam argumen pertama akan digantikan oleh World. Sedangkan \n berfungsi untuk membuat baris baru.

Sintaks try akan mengevaluasi dari fungsi stdout.print(). Jika terjadi error, maka ia mengembalikan error dari main. Namun jika tidak terjadi error, program akan terus berlanjut dengan lancar.

Karena tidak ada lagi fungsi yang perlu dijalankan di dalam fungsi main, maka program selesai.

Catatan:

Dalam Zig, fungsi standar untuk menulis yaitu print diperbolehkan untuk error, karena fungsi tersebut didefinisikan sebagai fungsi penulisan yang umum.

Hal ini karena mempertimbangkan fungsi penulisan umum yang bisa digunakan untuk menulis data ke dalam file. Ketika memori penuh, maka fungsi untuk melakukan penulisan tentu akan gagal.

Namun, Zig tidak mengharapkan terjadinya error ketika melakukan print. Sehingga, agar tidak perlu meng-handle kemungkinan gagal saat menggunakan std.io.getStdOut().writer() bisa menggunakan fungsi alternatif yaitu std.log untuk logging atau std.debug.print.

Contoh:

https://github.com/zakiego/silsilah-belajar-ziglang/blob/main/1-hello-world/hello-again.zig

Perhatikan, kita bisa meninggalkan ! dari return type karena std.debug.print tidak akan gagal.

--

--