Skip to content

Commit

Permalink
feat: menambahkan materi baru for loop (#15)
Browse files Browse the repository at this point in the history
* feat: penambahan materi baru

* docs: menambahkan list materi di dokumentasi

* feat: menambahkan materi operator

* chore: change name folder

* feat: penambahan materi logika Zig

* feat: menambahkan materi terbaru

* feat: menambahkan materi switch

* chore: adding git ignore

* feat: update materi zig for

* docs: penambahan docs dalam kode

* feat: add while loops
  • Loading branch information
rulanugrh authored Jan 2, 2024
1 parent ca56de6 commit 8360eb6
Show file tree
Hide file tree
Showing 4 changed files with 322 additions and 0 deletions.
190 changes: 190 additions & 0 deletions Basic/10_looping/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
## Pendahuluan
Yoo, comeback to materi Zig :u. Materi kali ini ialah tentang looping ialah dimana metode yang digunakan untuk melakukan program dengan data yang telah ditentukan. Seperti pada bahasa umumnya seperti `python`, `go`, `c++`, `c`, dan sebagainya . Looping tetaplah looping , fungsinya sama dengan bahasa pemrograman yang lainnya. Hanya saja style nya yang berbeda. Nah kali ini ada beberapa case untuk memahami gimana si looping didalam zig itu hehee :u

## Sebelum Mulai
Sebelum dimulai mari kita perkenalan dulu tentang komponen komponen yang ada didalam for loop Zig. Style program zig ini unik, selain yang typesafe, zig juga punya struktur yang berbeda. Dalam menggunakan for loop ada yang harus kalian perhatikan.
```zig
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");
pub fn main() void {
// sebagai contoh disini kita punya array yaitu number
// dimana kumpulan angka dengan tipe data u8
// fyi _ didaalm `[]` itu menandakan jumlah datanya bebas
// tergantung yang kita mau
var number = [_]u8{ 2, 5, 4, 7, 8, 9 };
...
}
```
Nah disini bagian utamanya, `for()` didalam kurung ini diisi dengan variabel atau logic yang mau kalian gunakan, nah untuk mengambil per datanya kalian bisa tambahkan ditambahkan disamping `for()` itu dengan `|example|` bebas disini kalian namakan apa, setidaknya bisa kalian pahami. Contohnya seperti ini
```zig
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");
pub fn main() void {
var number = [_]u8{ 2, 5, 4, 7, 8, 9 };
// for statement yang digunakan untuk melakukan looping
// variabel number sebagai counter untuk melakukan looping pada data di dalamnya
// |value| sebagai variabel untuk mengambil setiap data yang ada didalam number
for (number) |value| {
// logic pertama jika angka didalam variabel number habis dibagi 2
// maka akan di lewati dan langsung ke logic yang selanjutnya
if (value % 2 == 0) {
// statement untuk next ke logic berikutnya
continue;
} else {
// logic ini akan jalan jika kondisi di if tidak terpenuhi
std.debug.print("angka: {d}\n", .{value});
}
}
...
}
```

## For a.k.a 4Loop, 4Luping
Seperti yang dijelaskan didalam pendahuluan, for loop disini bisa digunakan untuk dilakukan dengan tipe data yang berbeda. Untuk for loop didalam zig ini punya style yang sangat unik, mau tau ? ini dia stylenya

```zig
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");
pub fn main() void {
var number = [_]u8{ 2, 5, 4, 7, 8, 9 };
// for statement yang digunakan untuk melakukan looping
// variabel number sebagai counter untuk melakukan looping pada data di dalamnya
// variabel value digunakan sebagai key untuk mengambil per-data di number
for (number) |value| {
// logic pertama jika angka didalam variabel number habis dibagi 2
// maka akan di lewati dan langsung ke logic yang selanjutnya
if (value % 2 == 0) {
// statement untuk next ke logic berikutnya
continue;
} else {
// logic ini akan jalan jika kondisi di if tidak terpenuhi
std.debug.print("angka: {d}\n", .{value});
}
}
for (number) |forBreak| {
// jika data dalam variabel number itu adalah 7 maka akan berhenti operasi
// jika nanti angka nya udah sama dengan 7, maka akan jalanin statement yang berikutnya
if (forBreak == 7) {
break;
} else {
// logic ini akan jalan jika kondisi di if tidak terpenuhi
std.debug.print("angka: {d}\n", .{forBreak});
}
}
}
```
Unik bukan ? hehehe, nah program diatas yaa sebenarnya program basic untuk pengenalan tentang for loop didalam zig saja. Dimana program diatas cuma printout nilai dengan logic yang berbeda, for loop pertama untuk pengecekan jika `value` habis dibagi `2` maka akan di `lewati / continue`, sedangkan yang for loop kedua jika angkanya menyentuh `7` maka akan `berhenti`. Selain itu, ada beberapa style yang berbeda lagi, misal ingin melakukan kombinasi 2 `slice` atau `array` dalam satu loop, gimana bang contohnyaaa ?

## Magic For in Zig
Nahh ada beberap magic didalam for loop zig, salah satunya adalah kombinasi 2 slice dalam satu array, contohnya gimana tuh bang? gini contohnyaa.

```zig
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");
pub fn main() void {
...
var kataPertama = [_][]const u8{ "Mari", "Zig" };
var kataKedua = [_][]const u8{ "Belajar", "di Bellshade" };
// Statement inilah dimana untuk mengambil semua kata yang didalam array
for (kataPertama, kataKedua) |p, k| {
// expected output: Mari Belajar Zig di Bellshade
std.debug.print("{s} {s} ", .{ p, k });
}
}
```
Nah jika kalian ingin mengambil nilai index di dalam array pun juga bisa , contohnya seperti ini
```zig
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");
pub fn main() void {
var number = [_]u8{ 2, 5, 4, 7, 8, 9 };
...
// Nah ini cara kalian jika ingin mengambil nilai indexnya
// Maksud dari 0.. ialah indexnya dimulai dari data ke 0
for (number, 0..) |value, idx| {
std.debug.print("index ke - {}, datanya adalah: {}\n", .{ idx, value });
}
}
```
Selain dua hal diatas ada juga `labaled` for, ini sering digunakan ketika ingin melakukan nested loop, biasanya ini digunakan untuk melakukan `break` atau `continue` dalam sebuah statement loop

```zig
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");
pub fn main() void {
// Labaled for ialah sebuah looping dimana di label
// Alias statement loopingnya di jadikan sebuah variabel
// Yaa seperti pada bahasa pemrograman pada umumnya saja
// Looping juga bisa di labelin
// Ini contoh programnya, misalnya disini akan melakukan looping sebanyak 1 - 10
// Variabel count digunakan untuk counter
// Untuk menambahkan semua data yang ada didalam loop
var count: usize = 0;
// Dilansir dari docs zig, labeled for biasanya digunakan
// untuk melakukan break / continue terhadap nested loop
// nah kasus kali ini dari labaled loopnya akan berhenti jika angkanya itu lebih besari dari 20
labeledLoop: for (1..10) |loops| {
count += loops;
if (count >= 20) {
break :labeledLoop;
}
}
std.debug.print("Result : {d}", .{count});
}
```

## While Loop
While Loop ialah statement dimana sebuah program akan berjalan jika datanya bernilai `true`. Biasanya ini digunakan jika ingin mealkukan pengecekan data, pemilihan data, ataupun eksekusi nilai pasti. Terus contohnya gimana bang ? contohnyaa seperti ini

```zig
// variabel ini digunakan untuk memanggil module standard Zig
const std = @import("std");
pub fn main() void {
// While loop adalah salah satu jenis looping juga
// Biasanya ini sering digunakan untuk melakukan looping yang dimana dengan jumlah yang telah ditentukan
// Misal kalian ingin melakukan looping sebanyak x, nah case while ini lebih baik ketimbang for loop
// Use case for loop sendiri digunakan ketika udah ada data pasti
// Sedangkan while ini digunakan ketika ingin melakukan eksekusi sebanyak beberapa kali
// Misal disini punya sebuah program :
// Pace ingin melakukan eksekusi sebuah program, dimana programnya ini dinamakan dengan BellZig
// Program ini akan mengecek jika angkanya habis dibagi 2 dan 4 maka akan return BellZig
// Jika hanya habis dibagi 5 maka disebut Bell
// Jika habis dibagi 3 maka disebut Zig
// Nah jika diluar itu semua maka akan return angka
// Index ini sebagai counter untuk melakukan looping
var index: usize = 1;
// disini logicnya dia akan terus looping jika angkanya lebih kecil / sama dengan 20
// statement dari (index += 1) ini adalah proses setiap index ini ditambah 1 seiring loop
while (index <= 20) : (index += 1) {
// logic pertama akan bernilai true jika angkanya habis dibagi 8
if (index % 8 == 0) {
std.debug.print("BellZig\n", .{});
// logic kedua akan berjalan jika nilai index habis dibagi 3
} else if (index % 3 == 0) {
std.debug.print("Bell\n", .{});
// logic yang ini akan berjalan jika nilai index habis dibagi 5
} else if (index % 5 == 0) {
std.debug.print("Zig\n", .{});
// selain logic diatas akan return nilai index
} else {
std.debug.print("{d}\n", .{index});
}
}
}
```
62 changes: 62 additions & 0 deletions Basic/10_looping/basicLooping.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");

pub fn main() void {
// Materi kali ini ialah tentang perulangan
// Seperti pada bahasa pemrograman umumnya, perulangan a.k.a luping a.k.a looping
// Merupakan metode yang digunakan untuk melakukan perintah dengan baris kode yang sama
// Yang dimana ada batasan maximum yang telah ditentukan
//
// Biasanya perulangan juga digunakan untuk mengambil data dalam array
// Hal ini sering terjadi ketika ingin melakukan operasi bilangan pada dalam array
// Dan kali ini, di materi zig ada metode looping, yang biasanya sering digunakan
// Itu ada for, labeled for, dan inline for
// Di kode ini berisi tentang basic for

// Ada studi kasus yaitu pengecekan nilai angka
// Jika nilai angkanya itu habis dibagi 2 maka tidak akan di print
// Begitu pun sebaliknya jika tidak habis dibagi 2 maka di print

var number = [_]u8{ 2, 5, 4, 7, 8, 9 };

// for statement yang digunakan untuk melakukan looping
// variabel number sebagai counter untuk melakukan looping pada data di dalamnya
// variabel value digunakan sebagai key untuk mengambil per-data di number
for (number) |value| {
// logic pertama jika angka didalam variabel number habis dibagi 2
// maka akan di lewati dan langsung ke logic yang selanjutnya
if (value % 2 == 0) {
// statement untuk next ke logic berikutnya
continue;
} else {
// logic ini akan jalan jika kondisi di if tidak terpenuhi
std.debug.print("angka: {d}\n", .{value});
}
}

for (number) |forBreak| {
// jika data dalam variabel number itu adalah 7 maka akan berhenti operasi
// jika nanti angka nya udah sama dengan 7, maka akan jalanin statement yang berikutnya
if (forBreak == 7) {
break;
} else {
// logic ini akan jalan jika kondisi di if tidak terpenuhi
std.debug.print("angka: {d}\n", .{forBreak});
}
}

var kataPertama = [_][]const u8{ "Mari", "Zig" };
var kataKedua = [_][]const u8{ "Belajar", "di Bellshade" };

// Statement inilah dimana untuk mengambil semua kata yang didalam array
for (kataPertama, kataKedua) |p, k| {
// expected output: Mari Belajar Zig di Bellshade
std.debug.print("{s} {s} \n", .{ p, k });
}

// Nah ini cara kalian jika ingin mengambil nilai indexnya
// Maksud dari 0.. ialah indexnya dimulai dari data ke 0
for (number, 0..) |value, idx| {
std.debug.print("index ke - {}, datanya adalah: {}\n", .{ idx, value });
}
}
33 changes: 33 additions & 0 deletions Basic/10_looping/labeledLooping.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// variabel ini digunakan untuk memanggil module standard zig
const std = @import("std");

pub fn main() void {
// Labaled for ialah sebuah looping dimana di label
// Alias statement loopingnya di jadikan sebuah variabel
// Yaa seperti pada bahasa pemrograman pada umumnya saja
// Looping juga bisa di labelin

// Ini contoh programnya, misalnya disini akan melakukan looping sebanyak 1 - 10
// Variabel count digunakan untuk counter
// Untuk menambahkan semua data yang ada didalam loop

var count: usize = 0;
// Dilansir dari docs zig, labeled for biasanya digunakan
// untuk melakukan break / continue terhadap nested loop
// nah kasus kali ini dari labaled loopnya akan berhenti jika angkanya itu lebih besari dari 20
// |loops| menandakan untuk mengambil setiap data didalam for
labeledLoop: for (1..10) |loops| {
// variabel count itu defaultnya 0
// dia akan ditambah dengan data yang ada di setiap loopingan
count += loops;
// namun disini ada statement jika angkanya lebih besar dari 20 atau sama dengan
// maka loopignya berhenti
if (count >= 20) {
// nah disini magicnya, dimana labeled loop ini bisa digunakan untuk break looping
// hal ini sering digunakan jika ada nested loop
break :labeledLoop;
}
}

std.debug.print("Result : {d}", .{count});
}
37 changes: 37 additions & 0 deletions Basic/10_looping/whileLoop.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// variabel ini digunakan untuk memanggil module standard Zig
const std = @import("std");

pub fn main() void {
// While loop adalah salah satu jenis looping juga
// Biasanya ini sering digunakan untuk melakukan looping yang dimana dengan jumlah yang telah ditentukan
// Misal kalian ingin melakukan looping sebanyak x, nah case while ini lebih baik ketimbang for loop
// Use case for loop sendiri digunakan ketika udah ada data pasti
// Sedangkan while ini digunakan ketika ingin melakukan eksekusi sebanyak beberapa kali

// Misal disini punya sebuah program :
// Pace ingin melakukan eksekusi sebuah program, dimana programnya ini dinamakan dengan BellZig
// Program ini akan mengecek jika angkanya habis dibagi 2 dan 4 maka akan return BellZig
// Jika hanya habis dibagi 5 maka disebut Bell
// Jika habis dibagi 3 maka disebut Zig
// Nah jika diluar itu semua maka akan return angka

// Index ini sebagai counter untuk melakukan looping
var index: usize = 1;
// disini logicnya dia akan terus looping jika angkanya lebih kecil / sama dengan 20
// statement dari (index += 1) ini adalah proses setiap index ini ditambah 1 seiring loop
while (index <= 20) : (index += 1) {
// logic pertama akan bernilai true jika angkanya habis dibagi 8
if (index % 8 == 0) {
std.debug.print("BellZig\n", .{});
// logic kedua akan berjalan jika nilai index habis dibagi 3
} else if (index % 3 == 0) {
std.debug.print("Bell\n", .{});
// logic yang ini akan berjalan jika nilai index habis dibagi 5
} else if (index % 5 == 0) {
std.debug.print("Zig\n", .{});
// selain logic diatas akan return nilai index
} else {
std.debug.print("{d}\n", .{index});
}
}
}

0 comments on commit 8360eb6

Please sign in to comment.