Stage 2 - Variables | Belajar Rust #3
Tags: belajarrust, belajarvariables, rust, belajarrustbahasaindonesia
Published: 2022-01-17 18:40:30

Sekarang kita akan masuk kedalam konsep dimana kita akan sangat membutuhkannya, di sesi ini kita akan mengulik apa itu variables dan bagaimana variables bisa melakukan store data.

## 1. Variables

Sebenarnya kita dapat membuat analogi variable itu sebagai **kotak pindahan** **terlakban** (**transfer box** ← * bener gak ya bahasa inggrisnya) yang memiliki **isi (value)** dan diberi **nama (identifier)** setiap kotaknya, agar kita mengetahui apa saja **isi (value)** didalamnya. Seperti analogi tersebut, di mana kita tidak bisa mengubah isi variable **(immutable by default)** karena kotak pindahan tersebut terlakban.

### a. Membuat sebuah variable

Membuat variable dalam Rust itu sangat mudah, kita bisa menggunakan `let` **(declaration statement)** binding yang disertai dengan nama variable.

```rust
let nama_variable ;
```

> `let` → identifier
> 
> 
> `nama_variable` → variable name
> 
> `;` → jangan lupa titik koma kata Pak Sandhika Galih
> 

Dalam Rust menulis nama variable menggunakan convention yang ditetapkan yaitu **snake_case**

> **snake_case**
> 
> 
> Semua huruf diwajibkan atau fardhu ain mengunganakn lower case.
> 
> Semua kata wajib hukumnya dipisah dengan menggunakan underscore ( _ ).
> 

### b. Inisialisasi variable

Kita dapat menginisialisasikan sebuah variable dengan memberikan nilai (value) ke variable ketika dideklarasikan. Value akan terikat ke variable tersebut.

```rust
let ganteng = "Adi";
```

> `let` → identifier
> 
> 
> `ganteng` → variable name
> 
> `“Adi”` → variable value
> 
> `;` → jangan lupa titik koma kata Pak Sandhika Galih
> 

→ Contoh

```rust
fn main() {
  let ganteng = "Adi";
  println!("Orang terganteng se-RT adalah {}", ganteng);
}
```

→ Output

```bash
Orang terganteng se-RT adalah Adi
```

> **Note:** Begini kawan, sangat tidak saya rekomendasikan untuk membuat variable yang tidak diinisialisasi terlebih dahulu.
> 

### c. Membuat multiple variables

Hmm apakah mungkin kita dapat assign multiple variables? Jawabannya pasti mungkin dong, buat apa aku bikin kalo gak mungkin, ohh aku.

```rust
let (ganteng, level, tempat) = ("Adi", "maksimal", "RT");
```

> `let` → identifier
> 
> 
> `ganteng` → variable name 1
> 
> `level` → variable name 2
> 
> `tempat` → variable name 3
> 
> `"Adi"` → variable value 1
> 
> `“maksimal”` → variable value 2
> 
> `“RT”` → variable value 3
> 

→ Contoh

```rust
fn main() {
  let (ganteng, level, tempat) = ("Adi", "maksimal", "RT");
  println!("Orang terganteng tingkat {1} se-{2} adalah {0}", ganteng, level, tempat);
}
```

→ Output

```bash
Orang terganteng tingkat maksimal se-RT adalah Adi
```

> **Note:** Kalau kita tetap ngeyel **un-assigned atau tidak memakai** variable, pasti kalian dapat teguran **warning** dari Rust compiler. Biar gak kena teguran lagi kita bisa sogok dia dengan nulis expression  `#[allow(unused_variables, unused_mut)]` di awal dari kode program. Ingat catatan diatas nda baik hukumnya kalo ngeyel masih un-assigned atau tidak memakai variables.
> 

### d. Membuka lakban kotak/ membuat variable mutable

Waitt judul apaan ini, bukannya di awal dibilangin kan variable itu immutable. Tapi tunggu dulu kan namanya semua orang pasti ingin berubah, ya variable juga dong ingin menjadi seseorang yang lebih baik toh wkwk (ketawa khas +62). Jadi intinya kita bisa dah bikin variable yang mutable dengan cara membuat identifier `let` yang disertai dengan `mut` keyword dan nama variable.

```rust
let mut ganteng = "Adi";
```

> `let mut` → identifier untuk mutable variable
> 
> 
> `ganteng` → variable name
> 
> `"Adi"` → variable value
> 

→ Contoh

```rust
fn main() {
  let mut ganteng = "Adi";
  println!("Orang terganteng adalah {}", ganteng);
  ganteng = "Purwanto";
  println!("Orang terganteng adalah {}", ganteng);
}
```

→ Output

```bash
Orang terganteng adalah Adi
Orang terganteng adalah Purwanto
```

## 2. Scope dan Shadowing

### a. Scope dari sebuah variable

Scope dari sebuah variable itu mengacu pada visibility dari sebuah variable, atau program mana sih yang bisa mengakses variable tersebut. Semua hal itu tuh tergantung dimana kita mendeklarasikan si variable ini. variable akan memiliki scope global jika kita tidak mendeklarasikannya di dalam `{ }`, block of code.

Terdapat dua types dari variables berdasarkan scopenya.

**1). Local variable**

Local variable adalah variable yang berada di dalam block of code `{ }` , kita tidak dapat mengakses variable diluar kurung kurawal. Jadi setelah kurung kurawal tutup `}`, sebenarnya variable itu dibebaskan dan memori untuk variable tidak dialokasikan.

**2). Global variable**

Jadi, global variable itu semacam kebalikan dari local variable, dimana variable yang dideklarasikan di luar block of code dan bisa diakses di dalam block berikutnya itu bisa kita sebut sebagai global variables.

→ Contoh error

```rust
fn main() {
	{
		let dalam = 10; // * local variable
	}
	println!("{}", dalam);
}
```

→ Output

```bash
  |
5 |     println!("{}", dalam);
  |                    ^^^^^ not found in this scope
```

→ Contoh beneran

```rust
fn main() {
  let luar = 100;
	{
		let dalam = 10;
	  println!("{}", dalam);
	  println!("{}", luar);
	}
  println!("{}", luar);
}
```

→ Output

```bash
10
100
100
```

### b. Shadowing

Variable shadowing adalah teknik yang mana sebuah variable yang dideklarasi di dalam scope memiliki nama yang sama seperti variable yang di deklarasi di luar scope. Udah gitu aja 😉.

→ Contoh

```rust
fn main() {
  let luar = 100; // * variable luar di luar block
	{
		let dalam = 10;
		let luar = 50; // * variable luar di dalam block
	  println!("{}", dalam);
	  println!("{}", luar);
	}
  println!("{}", luar);
}
```

→ Output

```bash
10
50
100
```

---

Untuk stage 2 ini saya memiliki tantangan, yok di coba terus upload hasilnya di **Discussion** 🔥.

> **Tantangan:**
> 
> 
> Dekalarsikan sebuah variable `learning_purpose` yang berisi tujuan kalian belajar rust, lalu jangan lupa print di console/ terminal kalian.
> 
> **Note:** Jangan lupa kasih tulisan **mission passed!**
> 

---

Jika ada kesalahan dalam menyampaikan konsep dan penulisan mohon bantuannya di kolom discussion 🤗. Terima kasih.

> `#samasamabelajar`
> 

---

> **LIST COURSE:**
> 
> 
> **[If you don't know me, then, you would not know who I am](https://dev.to/myusufadp/if-you-dont-know-me-then-you-would-not-know-who-i-am-learn-rust-1-ah4)**
> 
> **[Stage 1](https://dev.to/myusufadp/stage-1-belajar-rust-2-5al5)**
> 

---

> [Twitter](https://twitter.com/myusufadp)
> 
> 
> [Buy me a coffe](https://saweria.co/myusufadp)
>