Skip to content

Commit

Permalink
feat: improve var mutability explanation
Browse files Browse the repository at this point in the history
  • Loading branch information
novalagung committed Sep 29, 2023
1 parent 7f854a2 commit 8c74aec
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
4 changes: 4 additions & 0 deletions docs/basic/seleksi-kondisi-if.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ println!("result_d adalah {result_d}");

Blok seleksi kondisi pada contoh di atas menjadi penentu nilai variabel `result_d`. Dengan kebutuhan tersebut, kita bisa juga memanfaatkan `let if` untuk mendapatkan hasil yang ekuivalen.

> Pada kode di atas, deklarasi variabel `result_d` dan pengisian nilainya adalah dipisah statement-nya. Penulisan seperti ini diperbolehkan pada variable immutable (tanpa perlu membuatnya mutable) selama operasi assignment hanya dilakukan sekali saja setelah deklarasi.
>
> Lebih detailnya dibahas pada chapter [Variabel section A.4.5](/basic/variabel#a45-deklarasi-variabel-tanpa-predefined-value).

Kode di atas jika diubah ke bentuk `let if` hasilnya menjadi seperti ini:

```rust
Expand Down
25 changes: 24 additions & 1 deletion docs/basic/variabel.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,12 @@ Perlu diketahui, bahwa *by default* semua variabel adalah *immutable*. Immutable

Lalu bagaimana cara agar nilai variabel bisa diubah? Caranya dengan menambahkan keyword `mut` (yang merupakan kependekan dari *mutable*) saat pendefinisian variabel tersebut.

> Catatan tambahan:
>
> - Operasi assignment pada variabel immutable hanya boleh dilakukan sekali. Dan pada kode di atas telah dicontohkan caranya bagaimana. Variabel dideklarasikan sekaligus diisi nilainya.
>
> - Perlu diketahui bahwa sebenarnya diperbolehkan untuk memecah statement deklarasi variable dan assignment nilai sebagai 2 statement terpisah. Lebih jelasnya dibahas setelah ini pada section [section A.4.5](/basic/variabel#a45-deklarasi-variabel-tanpa-predefined-value).

## A.4.3. Keyword `mut`

Ok, mari kita coba, ubah statement deklarasi variabel `message_number`, tambahkan keyword `mut`. Lalu jalankan ulang program.
Expand Down Expand Up @@ -178,7 +184,24 @@ Notasi penulisan tipe data adalah `namavariabel: tipedata`. Contoh seperti di at

## A.4.5. Deklarasi variabel tanpa *predefined value*

Sesuai dengan penjelasan di [dokumentasi spesifikasi Rust](https://doc.rust-lang.org/error-index.html#E0381), **tidak diperbolehkan mendeklarasikan variabel tanpa predefined value**. Jika dipaksa akan muncul error pada baris kode yang menggunakan variabel tersebut.
Sesuai dengan penjelasan di [dokumentasi spesifikasi Rust](https://doc.rust-lang.org/error-index.html#E0381), variable yang tidak ada value-nya akan memunculkan error saat program di-run.

Meski demikian, diperbolehkan untuk memisahkan variable statement untuk deklarasi variable dan pengisian value. Sebagai contoh, statement `message_number` pada kode berikut ...

```rust
let message_number = 1;
println!("message number {}", message_number);
```

... boleh dituliskan dalam 2 statement terpisah seperti ini:

```rust
let message_number: i32;
message_number = 1;
println!("message number {}", message_number);
```

Intinya, operasi assignment hanya diperbolehkan 1x saja pada variabel *immutable*, baik itu saat deklarasi variable atau setelahnya.

## A.4.6. Deklarasi banyak variabel dalam satu statement

Expand Down

0 comments on commit 8c74aec

Please sign in to comment.