Stage 1 - Introduction | Belajar Rust #2
Tags: belajarrust, rust, rustindonesia, belajarrustindonesia
Published: 2022-01-14 21:01:26

Untuk stage ini masih sangat *"Easy Peasy Lemon Squeezy”,* dalam stage ini saya akan membahas hal-hal basic mengenai Rust. Jika kalian kepo saya menggunakan Replit untuk menulis code-nya, jika kalian ingin menggunakan local text-editor silahkan saja, tapi jangan lupa install Rust-nya loh wajib hukumnya, banyak tutorial di google dan youtube kok.

> Semua Rust code ditulis didalam file dengan **.rs** extension
> 

### 1. Program Pertama Saya

```rust
fn main() {
    println!("Halo, dunia!");
}
```

> fn → function notation
> 

> main() → mendeklarasi sebuah main function
> 

**Anatomi dari Program Halo, dunia!**

- *main* function adalah awal dari setiap program Rust.
- Apa saja yang diisi dalam sepasang kurung kurawal {} merupakan block of code.
- *println!* macro menerima string **“Halo, dunia!”** dan memunculkannya di screen/ terminal.

**Apa sih macro?**

Macro merupakan sebuah expression yang memiliki tanda seru (bukan berarti dia asik loh tapi tanda ! ← itu) sebelum kurung (), contohnya.

```rust
macro_name!();
```

**Compile dan Run Program**

```bash
➜  ~ rustc src/main.rs 
➜  ~ ./main 
Halo, dunia!
```

## 2. Formating Dasar

Sekarang saya ingin mengenalkan kepada kalian bagaimana untuk format sebuat statement di Rust dengan gaya yang beda-beda. Di bab 1 (anggap aja bab kali ye) kita sudah mengetahui bagaimana cara print sebuah string ke console . *“Tapi kan saya gak mungkin mau print string/ kata statik saja?”*, eittss tenang saja kita bisa kok print strings dalam format tertentu menggunakan **placeholders** yang sudah disediakan oleh Rust.

```rust
println!("{}", 18);
```

> {} → Placeholder notation
> 
> 
> 18 → Placeholder value
> 
> **Note:** Rust tidak mengijinkan kita sekalipun/ haram hukumnya untuk print numbers maupun variables secara langsung di **println!()** macro. Kita perlu placeholder **{}** untuk print numbers maupun variables.
> 

**Single Placeholder**

Ketika kita ingin melakukan print sebuah single value kita bisa menggunakan single placeholder

```rust
fn main() {
	println!("Tanggal: {}", 18);
}
```

→ Output

```bash
Tanggal: 18
```

**Multiple Placeholders**

Selain single placeholder, kita juga bisa menggunakan multiple placeholders di **println!()** macro. *Jumlah dari placeholders harus/ wajib (fardhu ain) sama dengan jumlah values yang akan di print.*

```rust
fn main() {
	println!("My name is {}, you can call me {}", "Adi", "Kincup");
}
```

→ Output

```bash
My name is Adi, you can call me Kincup
```

**Positional Arguments**

Kita bisa menspesifikan dimana posisi sebuah values berada. Setiap value kita diberikan nomor berdasarkan urutan. Value pertama diberi nilai 0, berikutnya diberi nilai 1, dan seterusnya berurutan.

> **Kenapa?**
> 

> Values bisa di taruh di urutan mana saja
> 

> Kita bisa menulis value 1 kali dan digunakan beberapa kali
> 

```rust
fn main() {
	println!("My name is {1}, you can call me {0} or {1}", "Adi", "Kincup");
}
```

→ Output

```bash
My name is Kincup, you can call me Adi or Kincup
```

**Named Arguments**

Kita bisa juga memberikan nama argument dan assign sebuah value. Konsep yang diberikan mirip dengan positional arguments namun kita bisa assign value secara explicit.

```rust
fn main() {
	println!("My name is {name}, you can call me {call} or {name}", name = "Adi",call = "Kincup");
}
```

→ Output

```bash
My name is Adi, you can call me Kincup or Adi
```

**Placeholder Traits**

Kita bisa mengkonversi value ke binary, hexadecimal, atau octal

```rust
fn main() {
	println!("Umur : 23, biner: {:b}, hexa: {:x}, octal: {:o}", 23, 23, 23);
}
```

→ Output

```bash
Umur : 23, biner: 10111, hexa: 17, octal: 27
```

**Basic Math**

Kita bisa melakukan kalkulasi basic dan placeholder akan menunjukan hasilnya.

```rust
fn main() {
	println!("{} * {} = {}", 2, 3, 2 * 3);
}
```

→ Output

```bash
2 * 3 = 6
```

**Placeholder for a Debug Trait**

Jika kita ingin mencoba/ testing print banyak nilai namun kita malas menggunakan multiple placeholders, kita bisa menggunakan single placeholder dengan bantuann debug trait (**{:?}**). 

```rust
fn main() {
	println!("{:?}", ("I am super very handsome!", 100));
}
```

→ Output

```bash
("I am super very handsome!", 100)
```

## 3. Printing Style

| Macro | Printing style |
| --- | --- |
| print!() | print string ke console |
| println!() | sama seperti print!(), namun menambahkan enter atau baris baru di akhir string |
| eprint!() | print dengan status error  |
| eprintln!() | sama seperti eprint!(), namun menambahkan enter atau baris baru di akhir |

## 4. Comments

Comments merupakan instruksi yang bisa dibaca oleh programmer untuk membantu menjelaskan mengenai code. Comments tidak dibaca oleh compiler.

**Line Comments //**

Comments ini sangat direkomendasikan untuk mengkomentari sebuah line single

```rust
// ini fungsi main loh
fn main() {
  // ini fakta
	println!("{:?}", ("I am super very handsome!", 100)); // jangan lupa ini fakta
}
```

→ Output

```bash
("I am super very handsome!", 100)
```

**Block Comments /* . . . */**

Comments ini digunakan untuk men-disable large chunk of code.

```rust
// ini fungsi main loh
fn main() {
  // ini fakta
	/* 
  println!("{:?}", ("I am super very handsome!", 100));
  */ 
}
```

→ Output

```bash

```

**Doc Comments /// or //!**

→ Outer Doc Comments (**///**) → ditulis di luar blok code.

→ Inner Doc Comments (**//!**) → ditulis di dalam blok code.

```rust
/// ini outer doc comment
/// jangan lupa loh
fn main() {
  //! ini fakta
  //! ditulis fakta aja
	println!("{:?}", ("I am super very handsome!", 100)); 
}
```

→ Output

```bash
("I am super very handsome!", 100)
```

---

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)**
> 

---

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