Skip to content

Commit 1ca0495

Browse files
committed
fix: typo
1 parent 4532619 commit 1ca0495

49 files changed

Lines changed: 182 additions & 175 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

docs/basic/advanced-traits.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ fn calculate_and_print_result(name: String, item: &impl Area) {
142142
}
143143
```
144144

145-
Manfaat penerapan trait sebagai tipe data parameter fungsi adalah saat pemanggilan fungsi, parameter tersebut bisa diisi dengan argument data bertipe apapun dengan catatan tipe dari data tersebut mengimplementasikan trait yang sama dengan yang digunakan pada parameter.
145+
Manfaat penerapan trait sebagai tipe data parameter fungsi adalah saat pemanggilan fungsi, parameter tersebut bisa diisi dengan argument data bertipe apa pun dengan catatan tipe dari data tersebut mengimplementasikan trait yang sama dengan yang digunakan pada parameter.
146146

147147
Contohnya seperti pada fungsi `calculate_and_print_result` di atas yang parameter ke-2 bertipe `&impl Area`, nantinya saat fungsi tersebut dipanggil, kita bisa sisipi parameter ke-2 dengan object `circle_one` ataupun `circle_two`.
148148

@@ -211,7 +211,7 @@ Mari praktikkan. Lakukan modifikasi berikut pada beberapa kode yang telah di tul
211211
}
212212
```
213213

214-
Dengan perubahan kode yang telah dilakukan di atas, parameter `item` milik fungsi `calculate_and_print_result()` bisa diisi dengan nilai argument apapun asalkan memenuhi kriteria tipe yang ditentukan, yaitu: haruse meng-implement trait `Area` dan trait `Circumference`.
214+
Dengan perubahan kode yang telah dilakukan di atas, parameter `item` milik fungsi `calculate_and_print_result()` bisa diisi dengan nilai argument apa saja asalkan memenuhi kriteria tipe yang ditentukan, yaitu: harus meng-implement trait `Area` dan trait `Circumference`.
215215

216216
Notasi penulisan tipe-datanya `&(impl Trait1 + Trait2 + Trait3 + ...)`.
217217

@@ -278,7 +278,7 @@ Trait bisa juga digunakan sebagai tipe data return value. Caranya gunakan notasi
278278
Contohnya bisa dilihat pada kode berikut. Ada dua fungsi baru dideklarasikan:
279279

280280
1. Fungsi `new_circle` dengan return type adalah `impl Area`, dan data yang dikembalikan adalah bertipe `two_dimensional::Circle`.
281-
1. Fungsi `new_square` dengan return type adalah `impl Area + Circumference`, dan data yang dikembalikan adalah bertipe `two_dimensional::Square`.
281+
2. Fungsi `new_square` dengan return type adalah `impl Area + Circumference`, dan data yang dikembalikan adalah bertipe `two_dimensional::Square`.
282282

283283
```rust
284284
fn main() {

docs/basic/array.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,12 +306,14 @@ for sub_arr in data_arr {
306306
println!();
307307
}
308308

309+
// output ⬇️
310+
//
309311
// salad, fried rice,
310312
// apple, coconut,
311313
// spinach, jalapeno,
312314
```
313315

314-
Variabel `data_arr` pada contoh di atas bertipe data`[[&str; 2]; 3]`, yang artinya adalah sebuah array dengan size 3, dengan isi elemen adalah juga array dengan size 2. Selalu ingat bahwa size array adalah fixed.
316+
Variabel `data_arr` pada contoh di atas bertipe data `[[&str; 2]; 3]`, yang artinya adalah sebuah array dengan size 3, dengan isi elemen adalah juga array dengan size 2. Selalu ingat bahwa size array adalah fixed.
315317

316318
---
317319

docs/basic/associated-function.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: A.24. Associated Function
44
sidebar_label: A.24. Associated Function
55
---
66

7-
Chapter ini membahas tentang *associated function*. Kita akan belajar apa itu associated function dan apa perbedannya dengan fungsi biasa.
7+
Chapter ini membahas tentang *associated function*. Kita akan belajar apa itu associated function dan apa perbedaannya dengan fungsi biasa.
88

99
## A.24.1. *Associated item* & *associated function*
1010

@@ -216,7 +216,7 @@ Struct adalah salah satu dari beberapa item yang ada di Rust. Struct bisa saja b
216216

217217
Sekarang, kode yang sudah dipraktikkan di atas akan kita refactor. Struct `LegoSet` beserta associated items-nya dipindah ke module file bernama `lego`, dengan itu maka pemanggilan struct tersebut harus menggunakan path `lego::LegoSet`.
218218

219-
Kurang lebih struktur package mendi seperti ini:
219+
Kurang lebih struktur package menjadi seperti ini:
220220

221221
```bash title="package source code structure"
222222
my_package

docs/basic/attributes.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -482,7 +482,7 @@ Pada contoh di atas, tempat di mana enum dideklarasikan dan digunakan adalah mas
482482
483483
## A.51.6. Attribute *modules*
484484

485-
Aturan manajemen di Rust cukup ketat, dan sudah dibahas secara mendetal pada chapter [Module System ➜ Module](/basic/module-basic), yang intinya adalah ada dua cara pembuatan module:
485+
Aturan manajemen di Rust cukup ketat, dan sudah dibahas secara mendetail pada chapter [Module System ➜ Module](/basic/module-basic), yang intinya adalah ada dua cara pembuatan module:
486486

487487
- Cara ke-1: dengan mendefinisikan module pada file bernama `nama_module.rs`
488488
- Cara ke-2: dengan mendefinisikan module pada file bernama `nama_module/mod.rs`
@@ -548,7 +548,7 @@ Lebih detailnya mengenai attribute testing dibahas pada chapter [Testing](#/wip/
548548

549549
Lebih detailnya mengenai attribute macros dibahas pada chapter [Macro](#/wip/macro).
550550

551-
## A.51.9 Attribute lainnya
551+
## A.51.9. Attribute lainnya
552552

553553
Rust memiliki cukup banyak attribute yang list-nya bisa dilihat pada link ini https://doc.rust-lang.org/reference/attributes.html.
554554

docs/basic/basic-memory-management.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,15 @@ GC adalah metode manajemen memori otomatis pada bahasa pemrograman. GC memiliki
2020

2121
Proses dealokasi pada GC terjadi di belakang layar secara asynchronous.
2222

23-
Beberapa bahasa pemrograman yang menerapkan GC di antara adalah Java, C#, Go, Lisp, dan banyak bahasa lainnya.
23+
Beberapa bahasa pemrograman yang menerapkan GC di antaranya adalah Java, C#, Go, Lisp, dan banyak bahasa lainnya.
2424

2525
### ◉ Automatic reference counting (ARC)
2626

27-
ARC adalah metode manajemen memori yang diterapkan pada bahasa Objective-C dan Swift. Cara ARC me-manage memory adalah dengan mencatat *reference* object dan segala aktifitas yang terjadi pada object tersebut.
27+
ARC adalah metode manajemen memori yang diterapkan pada bahasa Objective-C dan Swift. Cara ARC me-manage memory adalah dengan mencatat *reference* object dan segala aktivitas yang terjadi pada object tersebut.
2828

2929
Di ARC, ada satuan yang disebut dengan *retain count* yang merupakan representasi jumlah banyaknya variabel atau object yang memegang suatu *reference*. Ketika *reference* sudah pindah ke luar scope atau dihapus isinya dan dilihat pada catatan rupanya tidak ada variabel yang memegang *reference* tersebut, maka dilakukan proses dealokasi memory.
3030

31-
Dalam bahasa yang menerapkan ARC, programmer dianjurkan untuk perhatian dan bijak dalam pengalokasian variabel beserta nilainya. Mana data yang diperlukan untuk di-retain secara *strong* dan mana yang tidak, harus pas sesuai dengan kebutuhan. Jika tidak hati-hati maka program mempunyai resiko lebih tinggi untuk menemui error *deadlocks* ataupun *memory leaks* (yang juga akan dibahas pada chapter ini).
31+
Dalam bahasa yang menerapkan ARC, programmer dianjurkan untuk berhati-hati dan bijak dalam pengalokasian variabel beserta nilainya. Mana data yang diperlukan untuk di-retain secara *strong* dan mana yang tidak, harus pas sesuai dengan kebutuhan. Jika tidak hati-hati maka program mempunyai resiko lebih tinggi untuk menemui error *deadlock* ataupun *memory leaks* (yang juga akan dibahas pada chapter ini).
3232

3333
### ◉ Manual memory management
3434

@@ -169,7 +169,7 @@ Ok, lanjut ke block fungsi `main` berikutnya, yaitu `let a = 4`. Saat dipanggil
169169
| <span style={{color: '#2e8555'}}>**3**</span> | <span style={{color: '#2e8555'}}>**a**</span> | <span style={{color: '#2e8555'}}>**4**</span> | <span style={{color: '#2e8555'}}>**milik fungsi `main()`**</span> |
170170
| 0 | x | 24 | milik fungsi `main()` |
171171

172-
Kemudian sampai di statement terakhir fungsi `main`. Ketika `let b = 14` dipanggil maka ada penambahan data baru pada stack frame pertama.
172+
Kemudian sampai di statement terakhir fungsi `main`. Ketika `let b = 18` dipanggil maka ada penambahan data baru pada stack frame pertama.
173173

174174
| No. | Variabel | Nilai | *Stack frame* |
175175
|:-:|:-:|:-:|:-|

docs/basic/block-expression.md

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ Kemudian ada beberapa variabel baru yang didefinisikan di dalam block, yaitu `y`
4545
Sebagai contoh, kode berikut menghasilkan error:
4646

4747
```rust
48-
let x = 24;
48+
fn main() {
49+
let x = 24;
4950

50-
{
51-
let y = 12;
52-
let z = x + y;
53-
};
51+
{
52+
let y = 12;
53+
let z = x + y;
54+
};
5455

55-
println!("z: {}", z); // <------ error
56+
println!("z: {}", z); // <------ error
57+
}
5658
```
5759

5860
O iya, dalam penulisannya, statement block harus diikuti tanda semicolon `;` sebagai penanda akhir statement, dengan beberapa pengecualian yang akan ikut dibahas pada section setelah ini.
@@ -164,7 +166,7 @@ Pembahasan mengenai unsafe block expression ada pada chapter [Safe & Unsafe](#/w
164166

165167
Block biasa diterapkan untuk isolasi sebuah proses yang tidak perlu di-reuse. Jika proses adalah di-reuse, dianjurkan untuk menggunakan fungsi dalam penerapannya.
166168

167-
Di bahasa pemrograman lain juga ada block yang penerapannya kurang lebih adalah sama. Namun perlu diketahui, di Rust block memiliki berbedaan yang bisa dibilang signifikan, yaitu dalam hal manajemen memory.
169+
Di bahasa pemrograman lain juga ada block yang penerapannya kurang lebih adalah sama. Namun perlu diketahui, di Rust block memiliki perbedaan yang bisa dibilang signifikan, yaitu dalam hal manajemen memory.
168170

169171
Rust menerapkan konsep memory management bernama **ownership**. Setiap kali Rust selesai mengeksekusi block kode, baik itu fungsi, block expression, atau jenis block lainnya; akan dilakukan evaluasi pengecekan ownership yang ada dalam block tersebut. Untuk data yang owner-nya tidak berpindah ke luar scope, maka akan dilakukan proses dealokasi memory untuk data tersebut. Dengan approach ini penggunaan memory menjadi efisien.
170172

docs/basic/borrowing.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,7 @@ let d = &false;
307307
let e = &String::from("rust");
308308
```
309309

310-
Ketiga variabel, semuanya adalah *borrower* atau peminjam data. Lalu siapa *owner*-nya? jawabannya adalah tidak ada, atau silakan juga simpulkan bawah data tersebut owner-nya adalah program.
310+
Ketiga variabel, semuanya adalah *borrower* atau peminjam data. Lalu siapa *owner*-nya? jawabannya adalah tidak ada, atau silakan juga simpulkan bahwa data tersebut owner-nya adalah program.
311311

312312
Yang lebih penting untuk diurusi pada contoh di atas bukan siapa owner-nya, melainkan bagaimana caranya agar data pinjaman tersebut tidak di-dealokasi saat block kode selesai.
313313

docs/basic/build-dan-run-program-rust.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ cargo build --release
4444

4545
![Optimized build](img/build-dan-run-program-rust-2.png)
4646

47-
Untuk release, file binary berada dalam path `target/release`. File binary nya adalah optimized, size nya lebih kecil. Mungkin untuk program `hello world` tidak akan signifikan bedanya, tapi untuk project real sangat dianjurkan untuk menggunakan optimized build.
47+
Untuk release, file binary berada dalam path `target/release`. File binary nya adalah optimized, size-nya lebih kecil. Mungkin untuk program `hello world` tidak akan signifikan bedanya, tapi untuk project real sangat dianjurkan untuk menggunakan optimized build.
4848

4949
## A.2.3. Command `rustc`
5050

docs/basic/closures.md

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ title: A.48. Closures
44
sidebar_label: A.48. Closures
55
---
66

7-
Chapter ini membahas tentang closures. Closures sendiri merupakan block fungsi anonimus (anonymous function) yang memiliki kelebihan bisa mengakses item-item yang posisinya berada di luar block closure tersebut tetapi masih dalam current block scope.
7+
Chapter ini membahas tentang closures. Closures sendiri merupakan block fungsi anonim (anonymous function) yang memiliki kelebihan bisa mengakses item-item yang posisinya berada di luar block closure tersebut tetapi masih dalam current block scope.
88

99
Topik closures sangat erat hubungannya dengan [Trait ➜ Function](/basic/trait-function), namun pada chapter ini pembahasan hanya difokuskan pada bagian penerapan closures saja. Penulis anjurkan untuk lanjut ke chapter berikutnya setelah selesai dengan chapter ini.
1010

@@ -57,8 +57,8 @@ Sebagai contoh, variabel `pi` berikut memiliki 0 digit angka dibelakang koma. Un
5757
```rust
5858
let pi = 3.1415926535;
5959

60-
println!("{:.4}", pi); // 3.1416
61-
println!("{pi:.4}"); // 3.1416
60+
println!("{:.4}", pi); // output ➜ 3.1416
61+
println!("{pi:.4}"); // output ➜ 3.1416
6262
```
6363

6464
## A.48.2. Notasi penulisan closure
@@ -127,8 +127,8 @@ Tidak ada yang spesial mengenai cara mengakses item yang berada di luar block cl
127127
let num = 5;
128128
let display = || println!("{num}");
129129

130-
println!("{num}"); // 5
131-
display(); // 5
130+
println!("{num}"); // output ➜ 5
131+
display(); // output ➜ 5
132132
```
133133

134134
Beda lagi jika data di luar block closure adalah diubah (di-mutate) nilainya dari dalam closure, jika seperti itu maka ada beberapa hal yang perlu diperhatikan.
@@ -143,7 +143,7 @@ let increase_by = |x: i32| {
143143
};
144144

145145
increase_by(10);
146-
println!("{num}"); // 15
146+
println!("{num}"); // output ➜ 15
147147
```
148148

149149
![Closure](img/closures-1.png)
@@ -177,7 +177,7 @@ let mut increase_by = |x: i32| num += x;
177177
num += 5;
178178
increase_by(10);
179179

180-
println!("{num}"); // 20
180+
println!("{num}"); // output ➜ 20
181181
```
182182

183183
![Closure](img/closures-2.png)
@@ -197,7 +197,7 @@ num += 5;
197197
increase_by(10);
198198
}
199199

200-
println!("{num}"); // 20
200+
println!("{num}"); // output ➜ 20
201201
```
202202

203203
Solusi di atas efektif untuk menghilangkan error borrowing yang sebelumnya muncul, tapi setelah d-refactor kode menjadi tidak sesuai spesifikasi awal. Pada kode yang baru di atas, deklarasi closure `increase_by` terjadi di dalam block expression, artinya closure ini hanya akan bisa digunakan pada block kode tersebut saja, tidak bisa di-reuse di luar block.
@@ -211,7 +211,7 @@ let increase_by = |num: &mut i32, x: i32| *num += x;
211211
num += 5;
212212
increase_by(&mut num, 10);
213213

214-
println!("{num}"); // 20
214+
println!("{num}"); // output ➜ 20
215215
```
216216

217217
Pada contoh di atas, closure `increase_by` ditambahi parameter baru. Sekarang ada 2 parameter, yaitu `num` yang tipe-nya adalah pointer `&mut i32` dan parameter `x`. Di dalam block closure, `num` di-dereference (menggunakan operator `*`) kemudian diubah nilainya. Setelah eksekusi statement selesai, data pinjaman tersebut langsung dikembalikan ke pemilik. Inilah kenapa kode di atas tidak menghasilkan error.
@@ -228,11 +228,11 @@ Contohnya bisa dilihat berikut ini:
228228
let mut num = 5;
229229
let mut increase_by = move |x: i32| {
230230
num += x;
231-
println!("{num} (from closure)"); // 15
231+
println!("{num} (from closure)"); // output ➜ 15
232232
};
233233

234234
increase_by(10);
235-
println!("{num}"); // 5
235+
println!("{num}"); // output ➜ 5
236236
```
237237

238238
Closure `increase_by` di atas memiliki keyword `move` dalam pendefinisiannya. Dengan ini maka semua variabel di luar scope closure jika diakses dari dalam closure, maka variabel tersebut berpindah owner-nya (*move semantics*).
@@ -259,7 +259,7 @@ fn do_something() -> impl Fn() {
259259
}
260260
```
261261

262-
Tipe `impl Fn()` adalah ekuvalen dengan closure `|| { }`. Contoh penerapannya pada `main`:
262+
Tipe `impl Fn()` adalah ekuivalen dengan closure `|| { }`. Contoh penerapannya pada `main`:
263263

264264
```rust
265265
fn main() {

docs/basic/datetime.md

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ edition = "2021"
2222
chrono = "0.4.44"
2323
```
2424

25+
> Silakan gunakan versi terbaru crate `chrono` yang tersedia di [crates.io](https://crates.io/crates/chrono)
26+
2527
## A.52.2. Tipe data `DateTime`
2628

2729
`chrono` menyediakan cukup banyak tipe data untuk merepresentasikan informasi tanggal dan waktu, tetapi yang paling penting untuk diketahui dan dipahami ada dua, yaitu:
@@ -186,7 +188,8 @@ let sample_date_in_local_tz = Local.from_local_datetime(&naive_date_time).unwrap
186188
println!("sample date 1 (in utc): {sample_date_in_utc}");
187189
println!("sample date 2 (in local_tz): {sample_date_in_local_tz}");
188190

189-
// output ➜
191+
// output ⬇️
192+
//
190193
// sample date 1 (in utc): 2018-04-28 03:15:22 UTC
191194
// sample date 2 (in local_tz): 2018-04-28 03:15:22 +07:00
192195
```
@@ -215,7 +218,8 @@ println!("date (in utc): {date_in_utc}");
215218
let date2_in_local_tz = DateTime::<Local>::from(date_in_utc);
216219
println!("date (in local): {date2_in_local_tz}");
217220

218-
// output ➜
221+
// output ⬇️
222+
//
219223
// date (in local): 2023-03-02 17:33:37.750279900 +07:00
220224
// date (in utc): 2023-03-02 10:33:37.750279900 UTC
221225
// date (in local): 2023-03-02 17:33:37.750279900 +07:00
@@ -275,23 +279,23 @@ Contoh pengaplikasian keduanya bisa dilihat pada kode berikut:
275279
```rust
276280
let date1: DateTime<Local> = Local::now();
277281
println!("date1 (in local): {}", date1);
278-
// date1 (in local): 2023-03-02 18:13:39.954831600 +07:00
282+
// output ➜ date1 (in local): 2023-03-02 18:13:39.954831600 +07:00
279283

280284
let str_from_date1 = date1.format("%Y-%m-%d %H:%M:%S %z").to_string();
281285
println!("date1 (in string): {}", str_from_date1);
282-
// date1 (in string): 2023-03-02 18:13:39 +0700
286+
// output ➜ date1 (in string): 2023-03-02 18:13:39 +0700
283287

284288
let date1_from_str = Local.datetime_from_str(&str_from_date1, "%Y-%m-%d %H:%M:%S %z").unwrap();
285289
println!("date1 (in local): {}", date1_from_str);
286-
// date1 (in local): 2023-03-02 18:13:39 +07:00
290+
// output ➜ date1 (in local): 2023-03-02 18:13:39 +07:00
287291

288292
let date2_from_str = Utc.datetime_from_str("03/01/2023 13:04 +0000", "%m/%d/%Y %H:%M %z").unwrap();
289293
println!("date2 (in utc): {}", date2_from_str);
290-
// date2 (in utc): 2023-03-01 13:04:00 UTC
294+
// output ➜ date2 (in utc): 2023-03-01 13:04:00 UTC
291295

292296
let str_from_date2 = date2_from_str.format("%Y-%m-%d %H:%M:%S %z").to_string();
293297
println!("date2 (in string): {}", str_from_date2);
294-
// date2 (in string): 2023-03-01 13:04:00 +0000
298+
// output ➜ date2 (in string): 2023-03-01 13:04:00 +0000
295299
```
296300

297301
## A.52.9. DateTime formatting syntax

0 commit comments

Comments
 (0)