Skip to content

Commit

Permalink
fix: typo (#88)
Browse files Browse the repository at this point in the history
* fix: typo

* feat: update contributor list

* feat: preposition updates

---------

Co-authored-by: novalagung <[email protected]>
  • Loading branch information
ardiantovn and novalagung authored Apr 26, 2024
1 parent 8eb1daf commit facf2ba
Show file tree
Hide file tree
Showing 43 changed files with 118 additions and 117 deletions.
1 change: 1 addition & 0 deletions docs/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Berikut merupakan hall of fame kontributor yang sudah berbaik hati menyisihkan w

1. [Acep Saepudin](https://github.com/acepsaepudin)
1. [Afifurrohman](https://github.com/afifurrohman-id)
1. [ardiantovn](https://github.com/ardiantovn)
1. [Fal](https://github.com/d0tf)
1. [Fredianto](https://github.com/nferdazel)
1. [I Putu Saputrayana](https://github.com/iyansr)
Expand Down
12 changes: 6 additions & 6 deletions docs/basic/array.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ description: Belajar array pada rust. Contoh penerapan array, iterasi array, dan
keywords: [rust, belajar rust, array rust, slice rust]
---

Pada chapter awal kita sudah mempelajari tipe data primitif jenis scalas. Selain *scalar types* ada juga tipe data primitif lainnya yaitu **compound types**. Compound types sendiri adalah jenis tipe data kolektif yang isinya banyak data. Kesemua data tersebut memiliki tipe data yang sama dan di-group menjadi satu.
Pada chapter awal kita sudah mempelajari tipe data primitif jenis scalar. Selain *scalar types* ada juga tipe data primitif lainnya yaitu **compound types**. Compound types sendiri adalah jenis tipe data kolektif yang isinya banyak data. Kesemua data tersebut memiliki tipe data yang sama dan di-group menjadi satu.

Array adalah salah satu tipe data compound yang tersedia di Rust, dan pada chapter ini kita akan mempelajarinya.

Expand Down Expand Up @@ -49,7 +49,7 @@ Selanjutnya mari kita bahas dengan detail contoh di atas.

Variabel `numbers` dideklarasikan sebagai array *mutable* dengan metode deklarasi type inference, yang tipe datanya didapat langsung dari nilai.

Value dari `numbers` adalah `[24, 12, 32, 7]`, yang dimana artinya sebuah array dengan size 4, bertipe numerik, dengan isi `24`, `12`, `32`, `7`.
Value dari `numbers` adalah `[24, 12, 32, 7]`, yang mana artinya sebuah array dengan size 4, bertipe numerik, dengan isi `24`, `12`, `32`, `7`.

Sintaks `[24, 12, 32, 7]` adalah salah satu cara menulis literal array. Tulis saja data yang diinginkan dengan separator `,` dan diapit tanda kurung siku `[ ]`.

Expand Down Expand Up @@ -138,7 +138,7 @@ Jika kawan-kawan menggunakan ekstensi VSCode `rust-analyzer`, akan terlihat info

## A.13.3. Macam-macam deklarasi array

Array lebih mudah dideklarasikan dengan metode *type inference*. Namun tak menutup kemungkinan ada kebutuhan dimana array harus dideklarasikan dengan menuliskan tipe datanya secara eksplisit. Berikut adalah macam-macam cara mendeklarasikan array.
Array lebih mudah dideklarasikan dengan metode *type inference*. Namun tak menutup kemungkinan ada kebutuhan di mana array harus dideklarasikan dengan menuliskan tipe datanya secara eksplisit. Berikut adalah macam-macam cara mendeklarasikan array.

### ◉ Deklarasi array dengan metode *type inference*

Expand Down Expand Up @@ -257,7 +257,7 @@ loop {
}
```

Iterasi array menggunakan `while` dan `loop` umumnya kurang praktis jika dibandingkan dengan `for in`. Tapi pastinya ada case dimana `while` dan/atau `loop` akan dibutuhkan.
Iterasi array menggunakan `while` dan `loop` umumnya kurang praktis jika dibandingkan dengan `for in`. Tapi pastinya ada case di mana `while` dan/atau `loop` akan dibutuhkan.

## A.13.7. Iterasi array menggunakan `for in` dan *tuple*

Expand All @@ -277,7 +277,7 @@ for (i, name) in names.iter().enumerate() {

Variabel `names` yang notabene bertipe data `[&str; 4]` perlu dikonversi ke tipe `Iterator` terlebih dahulu caranya lewat pemanggilan method `.iter()`. Kemudian dari tipe tersebut perlu dikonversi lagi ke tipe `Enumerate` dengan cara memanggil method `.enumerate()`.

Setelah mendapatkan objek bertipe `Enumerate`, keyword `for in` digunakan untuk menampung tiap elemen array dalam bentuk *tuple* `(i, name)`. Variabel `i` disitu berisi counter iterasi, dan `name` adalah value-nya.
Setelah mendapatkan objek bertipe `Enumerate`, keyword `for in` digunakan untuk menampung tiap elemen array dalam bentuk *tuple* `(i, name)`. Variabel `i` di situ berisi counter iterasi, dan `name` adalah value-nya.

> - Lebih jelasnya mengenai traits dibahas pada chapter [Traits](/basic/traits)
> - Lebih jelasnya mengenai `Enumerate` dibahas pada chapter [TraitIterator](/basic/trait-iterator)
Expand Down Expand Up @@ -311,7 +311,7 @@ for sub_arr in data_arr {
// spinach, jalapeno,
```

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.
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.

---

Expand Down
4 changes: 2 additions & 2 deletions docs/basic/associated-function.md
Original file line number Diff line number Diff line change
Expand Up @@ -170,13 +170,13 @@ impl NamaStruct {

## A.24.3. Tipe data `Self`

Tipe data `Self` (perhatikan huruf `S`-nya adalah kapital) merupakan representasi untuk tipe data struct atau trait dimana blok kode `impl` dideklarasikan.
Tipe data `Self` (perhatikan huruf `S`-nya adalah kapital) merupakan representasi untuk tipe data struct atau trait di mana blok kode `impl` dideklarasikan.

> Tipe data `Self` hanya bisa digunakan dalam blok kode `impl`

Sebagai contoh, pada kode yang sudah dipraktikkan, keyword `impl` diterapkan dalam pembuatan *associated items* untuk struct `LegoSet`. Dalam blok kode tersebut, tipe data `LegoSet` bisa diganti dengan `Self`.

Silakan lihat contoh dibawah ini, ada 4 buah cara deklarasi fungsi `new` yang kesemuanya adalah ekuivalen.
Silakan lihat contoh di bawah ini, ada 4 buah cara deklarasi fungsi `new` yang kesemuanya adalah ekuivalen.

```rust
impl LegoSet {
Expand Down
20 changes: 10 additions & 10 deletions docs/basic/attributes.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ Attribute dikategorikan menjadi 2:
- Outer attributes
- Inner attributes

Keduanya memiliki kegunaan yang sama, pembedanya adalah posisi dimana attribute harus dituliskan.
Keduanya memiliki kegunaan yang sama, pembedanya adalah posisi di mana attribute harus dituliskan.

Outer attribute dituliskan tepat sebelum target (crate, module, module item, atau lainnya) dengan notasi penulisan seperti berikut:

Expand All @@ -35,7 +35,7 @@ struct LegoSet {
}
```

Sedikit berbeda dengan inner attribute, penulisannya berada didalam target (crate, module, module item, atau lainnya). Notasi penulisannya:
Sedikit berbeda dengan inner attribute, penulisannya berada di dalam target (crate, module, module item, atau lainnya). Notasi penulisannya:

- `#![attribute = "value"]`
- `#![attribute(key = "value")]`
Expand Down Expand Up @@ -75,7 +75,7 @@ fn main() {

![Attribute](img/attribute-1.png)

Kode di atas menghasilkan error karena enum `Superhero` tidak mengadopsi trait `PartialEq` yang dimana trait ini diperlukan dalam seleksi kondisi menggunakan keyword `if` dan operator `==`.
Kode di atas menghasilkan error karena enum `Superhero` tidak mengadopsi trait `PartialEq` yang mana trait ini diperlukan dalam seleksi kondisi menggunakan keyword `if` dan operator `==`.

Cara mengatasi error tersebut adalah dengan mengimplementasikan trait `PartialEq` secara eksplisit. Sekarang coba tambahkan kode berikut pada deklarasi enum `Superhero`, maka error akan hilang.

Expand Down Expand Up @@ -206,11 +206,11 @@ fn main() {
}
```

Ada beberapa key yang tersedia pada attribute `cfg`, diantaranya:
Ada beberapa key yang tersedia pada attribute `cfg`, di antaranya:

### ◉ Configuration `target_os`

Digunakan untuk menandai bahwa item atau statement dibawah definisi attribute ini dikhususkan untuk sistem operasi tertentu.
Digunakan untuk menandai bahwa item atau statement di bawah definisi attribute ini dikhususkan untuk sistem operasi tertentu.

```rust
#[cfg(target_os = "value")]
Expand All @@ -230,7 +230,7 @@ Opsi value yang tersedia:

### ◉ Configuration `target_arch`

Digunakan untuk menandai bahwa item atau statement dibawah definisi attribute ini dikhususkan untuk arsitektur CPU tertentu.
Digunakan untuk menandai bahwa item atau statement di bawah definisi attribute ini dikhususkan untuk arsitektur CPU tertentu.

```rust
#[cfg(target_arch = "value")]
Expand Down Expand Up @@ -301,10 +301,10 @@ Ada beberapa attribute *key* yang bisa digunakan untuk override *lint* warning:

- `#[deny(lint_rule)]` atau `#[forbid(lint_rule)]` untuk melarang suatu *lint rule* yang *default*-nya adalah diperbolehkan.<br />List `lint_rule` bisa dilihat di https://doc.rust-lang.org/rustc/lints/listing/deny-by-default.html.

Selain 3 attribute di atas, ada juga beberapa attribute lainnya untuk keperluan *diagnostic*, diantaranya:
Selain 3 attribute di atas, ada juga beberapa attribute lainnya untuk keperluan *diagnostic*, di antaranya:

- `#[deprecated]` digunakan untuk menandai bahwa kode dibawahnya adalah *deprecated*.
- `#[must_use]` digunakan untuk mendandai bahwa kode dibawahnya harus digunakan, jika tidak maka akan muncul error.
- `#[deprecated]` digunakan untuk menandai bahwa kode di bawahnya adalah *deprecated*.
- `#[must_use]` digunakan untuk mendandai bahwa kode di bawahnya harus digunakan, jika tidak maka akan muncul error.

## A.49.5. Attribute *type system*

Expand Down Expand Up @@ -356,7 +356,7 @@ fn main() {

Sayangnya dalam penggunaan attribute `non_exhaustive` ini, efeknya **hanya bisa dirasakan jika digunakan pada enum atau struct yang berbeda crate**.

Pada contoh di atas, tempat dimana enum dideklarasikan dan digunakan adalah masih dalam satu crate yang sama, jadi kode tetap menghasilkan error.
Pada contoh di atas, tempat di mana enum dideklarasikan dan digunakan adalah masih dalam satu crate yang sama, jadi kode tetap menghasilkan error.

> Attribute `non_exhaustive` ini jika digunakan pada struct efeknya saat deklarasi variabel boleh tidak menuliskan value property.

Expand Down
4 changes: 2 additions & 2 deletions docs/basic/basic-memory-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Dalam bahasa yang menerapkan ARC, programmer dianjurkan untuk perhatian dan bija

### ◉ Manual memory management

Manual memory management berarti programmer dibebani secara penuh dalam hal manajemen memori, mengharuskan programmer untuk super hati-hati dalam pengalokasian memory, kapan waktunya, dimana alokasinya (apakah *heap* atau *stack*), dan kapan harus melakukan operasi dealokasi memory.
Manual memory management berarti programmer dibebani secara penuh dalam hal manajemen memori, mengharuskan programmer untuk super hati-hati dalam pengalokasian memory, kapan waktunya, di mana alokasinya (apakah *heap* atau *stack*), dan kapan harus melakukan operasi dealokasi memory.

Metode manajemen memori ini dipakai dalam system programming contohnya bahasa C dan C++.

Expand Down Expand Up @@ -68,7 +68,7 @@ Hasilnya adalah angka biner berikut:

## A.32.3. Stack memory

Masih dalam topik manajemen memori, ada dua hal lagi yang sangat penting untuk diketahui, yaitu *stack* dan *heap*. Keduanya adalah bagian dari memory, tempat dimana alokasi dilakukan.
Masih dalam topik manajemen memori, ada dua hal lagi yang sangat penting untuk diketahui, yaitu *stack* dan *heap*. Keduanya adalah bagian dari memory, tempat di mana alokasi dilakukan.

Data disimpan dalam stack memory dalam bentuk stack. Karakteristik dari stack:

Expand Down
2 changes: 1 addition & 1 deletion docs/basic/borrowing.md
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ Pada kode di atas, mutable borrow terjadi di banyak tempat, yaitu di block fungs

### ◉ Method `contains` milik `String`

Pada contoh di atas kita menerapkan method baru bernama `contains`. Method ini tersedia untuk tipe data `String`, gunanya adalah untuk mengecek apakah string memiliki substring `x`, dimana `x` adalah argumen pemanggilan method. Method ini mengembalikan nilai `bool`.
Pada contoh di atas kita menerapkan method baru bernama `contains`. Method ini tersedia untuk tipe data `String`, gunanya adalah untuk mengecek apakah string memiliki substring `x`, yang mana `x` sendiri adalah argumen pemanggilan method. Method ini mengembalikan nilai `bool`.

Contoh penerapan method `contains`:

Expand Down
2 changes: 1 addition & 1 deletion docs/basic/closures.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ Perbedaan minor lainnya ada pada notasi penulisan parameter. Pada fungsi tanda `

### ◉ formatted print `{:.n}`

Notasi penulisan formatted print `{:.n}` digunakan untuk mem-format bilangan desimal dimana `n` adalah jumlah digit setelah tanda `.`.
Notasi penulisan formatted print `{:.n}` digunakan untuk mem-format bilangan desimal di mana `n` adalah jumlah digit setelah tanda `.`.

Sebagai contoh, variabel `pi` berikut memiliki 0 digit angka dibelakang koma. Untuk menampilkan hanya 4 angka terdepan, bisa gunakan `{:.4}`. Perlu diketahui bahwa angka dibelakang koma yang muncul otomatis dibulatkan.

Expand Down
6 changes: 3 additions & 3 deletions docs/basic/datetime.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ chrono = "0.4.23"

### ◉ Tipe `DateTime<Local>`

`DateTime<Local>` (gabungan dari tipe data `chrono::datetime::DateTime` dan generic `chrono::offset::local::Local`) adalah representasi untuk tipe data datetime dengan **timezone offset sesuai dengan dimana program dijalankan**.
`DateTime<Local>` (gabungan dari tipe data `chrono::datetime::DateTime` dan generic `chrono::offset::local::Local`) adalah representasi untuk tipe data datetime dengan **timezone offset sesuai dengan di mana program dijalankan**.

Sebagai contoh, penulis berlokasi di Jawa Timur, maka ketika ada suatu data bertipe `DateTime<Local>` artinya timezone offset-nya adalah WIB (atau GMT+7).

Expand Down Expand Up @@ -83,7 +83,7 @@ Statement di atas menghasilkan data datetime dengan isi `2023-03-01 01:02:03 UTC

### ◉ Via `DateTime::<Utc>::from()`

Cara ini pas digunakan pada situasi dimana kita perlu membuat object datetime dari sebuah [UNIX timestamp](https://en.wikipedia.org/wiki/Unix_time).
Cara ini pas digunakan pada situasi di mana kita perlu membuat object datetime dari sebuah [UNIX timestamp](https://en.wikipedia.org/wiki/Unix_time).

```rust
let sample_date3_in_utc = DateTime::<Utc>::from(UNIX_EPOCH + Duration::from_secs(1524885322));
Expand Down Expand Up @@ -166,7 +166,7 @@ Rust memilik caranya sendiri dalam pengelolaan data datetime (yang menurut penul

Tipe data ini sangat berguna dibeberapa case yang kebanyakan adalah perihal konversi data ke bentuk `DateTime`.

Mari kita praktekan dengan contoh agar lebih jelas. Dimisalkan ada keperluan dimana data UNIX time perlu di konversi ke 2 bentuk `DateTime`, dengan timezone offset `Utc` dan `Local`. Pada kasus ini, cara ke-3 dari praktek sebelumnya bisa dilakukan untuk penyelesaian case ini.
Mari kita praktekan dengan contoh agar lebih jelas. Dimisalkan ada keperluan di mana data UNIX time perlu di konversi ke 2 bentuk `DateTime`, dengan timezone offset `Utc` dan `Local`. Pada kasus ini, cara ke-3 dari praktek sebelumnya bisa dilakukan untuk penyelesaian case ini.

```rust
let timestamp: u64 = 1524885322;
Expand Down
4 changes: 2 additions & 2 deletions docs/basic/enum.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ enum NamaEnum {

`NamaEnum` di atas adalah tipe data custom yang didefinisikan bertipe enum. Sedangkan `NilaiEnum1`, `Nilai2`, dan `NilaiEnumKe3` adalah yang disebut dengan enum value. Dengan itu maka ketiga enum values tersebut tipe datanya adalah sama, yaitu `NamaEnum`.

Mari kita lanjut praktik. Berikut ini adalah definisi konstanta yang menggunakan tipe data string untuk menampung nilai konstan-nya. Lalu dibawahnya ada lagi definisi nilai konstan tetapi menggunakan enum sebagai tipe data yang digunakan.
Mari kita lanjut praktik. Berikut ini adalah definisi konstanta yang menggunakan tipe data string untuk menampung nilai konstan-nya. Lalu di bawahnya ada lagi definisi nilai konstan tetapi menggunakan enum sebagai tipe data yang digunakan.

```rust
// definisi konstanta
Expand Down Expand Up @@ -238,7 +238,7 @@ fn main() {
}
```

Bisa dilihat ada keunikan dalam penulisan seleksi kondisi `Food::MakananLainnya` dalam blok kode `match`. Disitu ada parameter bernama `m` yang parameter tersebut akan berisi data property jika memang *match* dengan `makanan_favorit`.
Bisa dilihat ada keunikan dalam penulisan seleksi kondisi `Food::MakananLainnya` dalam blok kode `match`. Di situ ada parameter bernama `m` yang parameter tersebut akan berisi data property jika memang *match* dengan `makanan_favorit`.

Coba jalankan untuk melihat hasilnya:

Expand Down
4 changes: 2 additions & 2 deletions docs/basic/file-path-directory.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ if Path::new(path).is_relative() {

## A.52.3. Module `std::fs` (file system)

`std::fs` merupakan module yang disediakan Rust untuk pengolahan file system. Didalamnya berisinya banyak sekali fungsi untuk keperluan seperti pembuatan file, modifikasi konten file, dan lainnya.
`std::fs` merupakan module yang disediakan Rust untuk pengolahan file system. Di dalamnya berisinya banyak sekali fungsi untuk keperluan seperti pembuatan file, modifikasi konten file, dan lainnya.

Sebagai contoh, untuk membuat suatu directory bisa menggunakan `fs::create_dir`. Isi argument pemanggilan fungsi dengan path dalam bentuk string (atau `std::path::Path` juga boleh).

Expand Down Expand Up @@ -142,7 +142,7 @@ match res {

Fungsi `fs::write` melakukan penulisan konten pada variabel `content` ke path `path`. Mode penulisannya adalah *overwrite* (bukan *append*), yang artinya konten lama pada filepath akan di-*replace* total dengan konten baru.

Jika file tidak ada pada `path` tujuan, maka otomatis dibuatkan file baru. Namun jika folder/directory dimana file akan dibuat/ditulis tidak ada, maka muncul error.
Jika file tidak ada pada `path` tujuan, maka otomatis dibuatkan file baru. Namun jika folder/directory di mana file akan dibuat/ditulis tidak ada, maka muncul error.

### ◉ Menghapus file (`fs::remove_file`)

Expand Down
4 changes: 2 additions & 2 deletions docs/basic/function.md
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ Pada contoh di atas, method `as_str` milik tipe data `String` digunakan untuk me

## A.17.5. *Conditional return value*

Kapan harus menggunakan keyword `return` dalam penentuan nilai balik dan kapan tidak? Jawabannya mungkin adalah preferensi, tapi di luar itu ada juga case dimana keyword `return` harus digunakan, yaitu pada fungsi yang memiliki nilai balik terkondisi. Contoh:
Kapan harus menggunakan keyword `return` dalam penentuan nilai balik dan kapan tidak? Jawabannya mungkin adalah preferensi, tapi di luar itu ada juga case di mana keyword `return` harus digunakan, yaitu pada fungsi yang memiliki nilai balik terkondisi. Contoh:

```rust
fn get_score_message(score: f32) -> &'static str {
Expand All @@ -275,7 +275,7 @@ fn main() {

Teknik penentuan nilai balik tanpa keyword `return` hanya bisa dipergunakan di akhir blok kode, contohnya pada fungsi `get_score_message` statement terakhir blok kode adalah string literal `"your score is below the passing grade"`.
**Jika pada selain akhir blok ada kondisi dimana nilai balik harus ditentukan, maka wajib menggunakan keyword `return`**. Bisa dilihat pada fungsi yang sudah ditulis, `return` statement dalam blok kode seleksi kondisi `if` dipergunakan.
**Jika pada selain akhir blok ada kondisi di mana nilai balik harus ditentukan, maka wajib menggunakan keyword `return`**. Bisa dilihat pada fungsi yang sudah ditulis, `return` statement dalam blok kode seleksi kondisi `if` dipergunakan.
## A.17.6. Nilai balik fungsi bertipe string literal `&str`
Expand Down
Loading

0 comments on commit facf2ba

Please sign in to comment.