Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: menambahkan materi switch dan array #14

Merged
merged 12 commits into from
Dec 18, 2023
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
zig-cache/*
zig-cache
2 changes: 1 addition & 1 deletion Basic/07_logika_pada_pemrograman_zig/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# Pendahuluan
Materi kali ini ialah materi yang menjelaskan tentang logika pada pemrograman Zig. Sebenarnya setiap logika akan berjalan tergantung dari operator yang kita gunakan. Jika kalian belum paham tentang Opeator kalian bisa berkunjung di materi Opearator [Operator](https://github.com/bellshade/zig/Bellshade/06_operator_pada_pemrograman_zig)
Materi kali ini ialah materi yang menjelaskan tentang logika pada pemrograman Zig. Sebenarnya setiap logika akan berjalan tergantung dari operator yang kita gunakan. Jika kalian belum paham tentang Opeator kalian bisa berkunjung di materi Opearator [Operator](https://github.com/bellshade/zig/Basic/06_operator_pada_pemrograman_zig)

## If Else
If Else ialah merupakan logika percabangan yang digunakan untuk mengechek hasil operasi dan akan return data dari statemen yang telah ditetapkan. Logika ini sering digunakan apalgi untuk pengechekan nilai sebuah data. Untuk example contohnya itu seperti ini
Expand Down
50 changes: 35 additions & 15 deletions Basic/07_logika_pada_pemrograman_zig/logikaZig.zig
Original file line number Diff line number Diff line change
@@ -1,22 +1,42 @@
// ini variabel yang digunakan untuk memanggil standard library pada pemrograman Zig
// variabel yang digunakan untuk memanggil module standard zig
const std = @import("std");

pub fn main() void {
// Materi kali ini ialah merupakan logika pada Zig
// Sebelumnya kita telah mempelajari sebuah operator
// Kurang lengkap jika kita tidak menerapkan di sebuah logika
// di Zig sebenarnya ada banyak cara mengolah logika, salah satunya yaitu if else
// Semua tergantung operator yang kita gunakan, entah itu aritmatika, bitwise, wrapped, saturated, dsbnya
const valueA: u8 = 20;
const valueB: u8 = 10;
const result: u8 = valueA * valueB;
// If Else atau bisa disebut dengan operator Percabangan
// Dimana operator ini berperan untuk pengecekan kondisi
// Jika kondisi pertama tidak terpenuhi maka akan lanjut ke kondisi kedua
// dan itu terus berulang kali sesuai banyaknya operator percabangan

// IF ELSE merupakan sebuah logika percabangan yang dimana ia akan selalu ngecheck sampai hasilnya ketemu
// Disini logika pertama jika hasilnya tidak sama dengan 200 maka akan nge-print teks yang telah ditentukan
// Dan jika logika pertama gagal maka lanjut ke print-out untuk logika kedua
if (result != 200) {
std.debug.print("Maaf hasil nya tidak sesuai prediksi\n");
var valueA: u8 = 20;
var valueB: u8 = 5;

// Contoh Percabangan pengecekan nilai
// Jika nilai valuA * valueB tidak sama dengan dari 100
if (valueA * valueB != 100) {
// Maka hasilnya akan printout "Maaf hasilnya tidak sesuai yang diinginkan"
std.debug.print("Maaf hasilnya tidak sesuai yang diingikan\n", .{});
} else {
// Jika kondisi pertama tidak terpenuhi maka lanjut kondisi yang kedua
// Yaitu printout hasil dari perkalian
std.debug.print("Hasilnya adalah: {}\n", .{valueA * valueB});
}

// Selanjutnya yaitu statement dari Else If
// Sama juga fungsinya untuk pengecekan sebuah value
// Kondisi ini akan digunakan jika ingin melakukan percabangan lebih dari 2

// Contoh Program
if (valueA / valueB == 5) {
// Pengecekan pertama jika valuA dibagi dengan valueB sama dengan 5
// Maka akan melakukan printout yang diinginkan
// Namun jka tidak akan lanjut ke percabangan berikutnya
std.debug.print("Hasil Pembagiannya adalah {}\n", .{valueA / valueB});
} else if (valueA / valueB == 4) {
// Yaitu percabangan kedua ini jika hasilnya adalh 4
// Namun jika tidak sesuai juga maka langsung ke opsi terakhir
std.debug.print("Hasil Pembagiannya adalah {}\n", .{valueA / valueB});
} else {
std.debug.print("Yeayy hasil sesuai: {}\n", .{result});
// Opsi terakhir dari percabangan
std.debug.print("Hasilnya tidak sesuai yang diingikan \n", .{});
}
}
33 changes: 33 additions & 0 deletions Basic/08_switch/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Pendahuluan
Materi kali ini ialah materi yang menjelaskan tentang pemilihan / logika pada pemrograman Zig. Sebenarnya setiap logika akan berjalan tergantung dari operator yang kita gunakan. Jika kalian belum paham tentang Opeator kalian bisa berkunjung di materi Opearator [Operator](https://github.com/bellshade/zig/Basic/06_operator_pada_pemrograman_zig)

## Switch Case
Yap, materi kali ini ialah switch case dimana materi kali ini ialah bentuk lain dari sebuah percabangan. Berbeda dengan [if else](https://github.com/bellshade/zig/Basic/07_logika_pada_pemrograman_zig), di switch case ini untuk menentukannya bisa langsung nilai yang diingikan. Contohnya pengecekan nilai result dari hasil perkalian :
```zig
// variabel yang digunakan untuk memanggil module standard zig
const std = @import("std");

pub fn main() void {
// Materi kali ini ialah tentang switch case
// Kondisi ini sama halnya ddengan if else
// Hanya saja kondisi yang dipake ialah dari expect nilai yang diinginkan
var valueA: u8 = 20;
var valueB: u8 = 5;
var result: u8 = valueA * valueB;

// Cara kerja switch case sama dimana ia akan melakukan pengecekan terhadap seluruh
// data yang udah di cantumkan / opsi yang ditentukan

// Contoh Program
const response = switch (result) {
// pengecekan jika nilainya adalah 100, maka return print out seperti dibawah
100 => std.debug.print("Hasil dari perkaliannya adalah : {}\n", .{result}),

// namun jika hasilnya tidak sesuai yang diinginkan maka return printout dari case else
else => std.debug.print("Maaf hasilnya tidak sesuai yang diingkan", .{}),
};

_ = response;
}
```
Disini kalian bisa menambahkan banyak case sesuai yang diinginkan. Biasanya switch case digunakan kalau udah tahu untuk nilai pastinya. Misalnya dalam perkalian itu udah tau nilai dari resultnya adalah `100`
25 changes: 25 additions & 0 deletions Basic/08_switch/pemilihanZig.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// variabel yang digunakan untuk memanggil module standard zig
const std = @import("std");

pub fn main() void {
// Materi kali ini ialah tentang switch case
// Kondisi ini sama halnya ddengan if else
// Hanya saja kondisi yang dipake ialah dari expect nilai yang diinginkan
var valueA: u8 = 20;
var valueB: u8 = 5;
var result: u8 = valueA * valueB;

// Cara kerja switch case sama dimana ia akan melakukan pengecekan terhadap seluruh
// data yang udah di cantumkan / opsi yang ditentukan

// Contoh Program
const response = switch (result) {
// pengecekan jika nilainya adalah 100, maka return print out seperti dibawah
100 => std.debug.print("Hasil dari perkaliannya adalah : {}\n", .{result}),

// namun jika hasilnya tidak sesuai yang diinginkan maka return printout dari case else
else => std.debug.print("Maaf hasilnya tidak sesuai yang diingkan", .{}),
};

_ = response;
}
19 changes: 19 additions & 0 deletions Basic/08_switch/test_pemilihanZig.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// variabel yang digunakan untuk memanggil module standard zig
const std = @import("std");
// Module ini digunakan untuk melakukan testing terhadap progam yang dibuat didalam Zig
const expect = std.testing.expect;

test "switch simple" {
// Testing pengeckean nilai value
var valueA: u8 = 20;
var valueB: u8 = 5;
var result: u8 = valueA * valueB;

const response = switch (result) {
100 => 100,
else => {},
};

// Expect dari testing ialah 100
try expect(response == 100);
}
57 changes: 57 additions & 0 deletions Basic/09_array/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
## Pendahuluan
Yooo, materi kali ini ialah tentang array. Array sering kita jumpai di setiap bahasa pemrograman, baik itu `python`, `golang`, `php`, `c++`, bahkan di `bash` juga ada array. Secara simpelnya, array ialah merupakan kumpulan dari banyak data. Ada beberapa bahasa yang bisa menggunakan array dengan beberapa tipe data. Namun untuk Zig tidak semua tipe data bisa masuk ke dalam array yang sama, tergantung dari tipe data yang digunakan dalam pembuatan array. Untuk memahami tentang arry kalian harus juga paham tentang tipe data, kalian bisa cek disini :u [Tipe Data](https://github.com/bellshade/Zig/Basic/02_tipe_data)

## Array a.k.a Erei
Seperti yang dijelaskan di pendahuluan, array didalam zig ini tidak semua tipe data bisa dalam satu array seperti array dalam pemroraman `python`. Arraynya sudah ditentukan dalam bentuk tipe data, contohnya seperti dibawah ini
```zig
const isInteger = [_]i32{ 2, 9, 4, 7, 8, 1 };
```
Merupakan kumpulan array dari beberapa angka. Didalam array ini kalian bisa melakukan beberapa operator misalnya untuk menggabungkan dua / lebih array dan melipat gandakan banyaknya data

| Operator | Description | Example |
| :-----: | :------------------------------:| :------------------------------: |
| ++ | Menggabungkan | `a ++ b` |
| ** | Melipatgandakan | `a ** b` |

Nah kalau kalian ingin memanggil salah satu data dalam array kalian bisa menggunakan cara seperti ini `variabel[index]` seperti pada umumnya sebuah array. Array dalam zig juga bisa menghitung banyaknya data dengan cara `variabel.len`

## Example Array
```zig
// Variabel ini digunakan untuk memanggil standard module zig
const std = @import("std");

pub fn main() void {
// Array a.k.a Erei merupakan materi yang sering kita jumpa dalam pemrograman
// Secara teoritikal materi ini menjelaskan tentang kumpulan data
// Baik itu tipe data string, integer, bahkan nested array

// Ini salah satu contoh array dari kumpulan kata
const message = [_]u8{ 'b', 'e', 'l', 'l', 's', 'h', 'a', 'd', 'e' };
std.debug.print("{s}\n", .{message});

// Didalam array juga bisa melakukan operator
// Misal ingin menggabungkan dua buah array dalam satu line
// Kalian bisa menggukan operator `++`
// Contoh program
const msg = "hebat";
std.debug.print("{s}\n", .{message ++ " " ++ msg});

// Selain itu data dari dalam array juga bisa digandakan jumlah datanya
// Dengan kata lain bisa dikali, untuk melakukan ini
// Bisa menggunakan operator `**`
const isInteger = [_]i32{ 2, 9, 4, 7, 8, 1 };
std.debug.print("{d}\n", .{isInteger ** 3});

// Kalau kalian ingin mengetahui nilai panjang dari sebuah array
// Kalian bisa menggunakan `len` untuk melihat nilainya
// Misal disini saya ingin melihat banyaknya jumlah data dari variabel `isInteger`
std.debug.print("Banyaknya data dari variabel isInteger adalah: {d}\n", .{isInteger.len});

// Kalian bisa juga mengambil salah satu data yang ada dari dalam array
// misal saya ingin mengambil angka 8 didalam array isInteger
// maka harus tahu terlebih dahulu posisi index dari angka 8
// dan disini angka 8 berada di index ke 4

std.debug.print("Nilai dari index ke-4 adalah: {d}", .{isInteger[4]});
}
```
37 changes: 37 additions & 0 deletions Basic/09_array/arrayZig.zig
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
// Variabel ini digunakan untuk memanggil standard module zig
const std = @import("std");

pub fn main() void {
// Array a.k.a Erei merupakan materi yang sering kita jumpa dalam pemrograman
// Secara teoritikal materi ini menjelaskan tentang kumpulan data
// Baik itu tipe data string, integer, bahkan nested array

// Ini salah satu contoh array dari kumpulan kata
const message = [_]u8{ 'b', 'e', 'l', 'l', 's', 'h', 'a', 'd', 'e' };
std.debug.print("{s}\n", .{message});

// Didalam array juga bisa melakukan operator
// Misal ingin menggabungkan dua buah array dalam satu line
// Kalian bisa menggukan operator `++`
// Contoh program
const msg = "hebat";
std.debug.print("{s}\n", .{message ++ " " ++ msg});

// Selain itu data dari dalam array juga bisa digandakan jumlah datanya
// Dengan kata lain bisa dikali, untuk melakukan ini
// Bisa menggunakan operator `**`
const isInteger = [_]i32{ 2, 9, 4, 7, 8, 1 };
std.debug.print("{d}\n", .{isInteger ** 3});

// Kalau kalian ingin mengetahui nilai panjang dari sebuah array
// Kalian bisa menggunakan `len` untuk melihat nilainya
// Misal disini saya ingin melihat banyaknya jumlah data dari variabel `isInteger`
std.debug.print("Banyaknya data dari variabel isInteger adalah: {d}\n", .{isInteger.len});

// Kalian bisa juga mengambil salah satu data yang ada dari dalam array
// misal saya ingin mengambil angka 8 didalam array isInteger
// maka harus tahu terlebih dahulu posisi index dari angka 8
// dan disini angka 8 berada di index ke 4

std.debug.print("Nilai dari index ke-4 adalah: {d}", .{isInteger[4]});
}