evilfactorylabs / belajar-rust

mini ebook - belajar bahasa pemrograman Rust
https://belajar-rust.vercel.app/
MIT License
30 stars 5 forks source link

Tidak bisa menjalankan hasil dari sub bab Associated Functions #14

Open kresnasatya opened 4 years ago

kresnasatya commented 4 years ago

Halo, saya mencoba kode sub bab Associated Functions di bab Struct.

impl People {
    fn count_income(d: i32, i: i32) -> People {
        People { days: d, income: i }
    }
}

fn main() {
    let show = People::count_income(30, 3000);
    println!("{:#?}", show);
}

Saat saya menjalankan kode di atas tidak berhasil karena modul People tidak dideklarasikan. Berikut screenshotnya.

Screen Shot 2020-09-27 at 16 33 16

Saya mencoba mendeklarasikan struct People sebelum kode impl People seperti di bawah ini.

struct People;

impl People {
    fn count_income(d: i32, i: i32) -> People {
        People { days: d, income: i }
    }
}

fn main() {
    let show = People::count_income(30, 3000);
    println!("{:#?}", show);
}

Namun, saat saya jalankan tidak berhasil karena People tidak memiliki field days dan income. Berikut screenshotnya.

Screen Shot 2020-09-27 at 16 37 02

Kemudian, saya coba menambahkan field days dan income di struct People kode masih tidak bisa dijalankan karena masalah formatting.

struct People {
    days: i32,
    income: i32
}

impl People {
    fn count_income(d: i32, i: i32) -> People {
        People { days: d, income: i }
    }
}

fn main() {
    let show = People::count_income(30, 3000);
    println!("{:#?}", show);
}
Screen Shot 2020-09-27 at 16 41 07

Akhirnya, saya coba tambahkan #[derive(Debug)] di atas struct People barulah berjalan sesuai dengan ekspektasi.

#[derive(Debug)]
struct People {
    days: i32,
    income: i32
}

impl People {
    fn count_income(d: i32, i: i32) -> People {
        People { days: d, income: i }
    }
}

fn main() {
    let show = People::count_income(30, 3000);
    println!("{:#?}", show);
}
Screen Shot 2020-09-27 at 16 42 51

Saya penasaran mengapa saya harus mendefinisikan struct People lagi? Padahal di dalam impl People sudah mendefinisikan struct People secara tidak langsung.

Cc mas @adiatma, @ri7nz, @kevanantha

Terima kasih.

adiatma commented 4 years ago

Sebelumnya thanks udah buat issue mas @satyakresna 🙏

Oke, bantu jawab nih.

struct bisa dibilang custom struktur data, yang isinnya bisa ada macem2, bisa integer, dan string di dalamnya. impl itu sebuah blok implementasi yang terasosiasi dengan tipe data tertentu, karna implement sangat bergantung dengan tipe data, jadinya butuh untuk membuat struct dulu, agar bisa menggunakan impl.

Semoga bisa menjawab

kresnasatya commented 4 years ago

karna implement sangat bergantung dengan tipe data, jadinya butuh untuk membuat struct dulu, agar bisa menggunakan impl

Makasih mas @adiatma atas penjelasannya. 🙏

Di bagian contoh kode sub bab Associated functions tidak memuat struct People yang menyebabkan saya menemukan error tersebut. Tetapi, langkah-langkah yang saya lakukan di atas agar kode berhasil berjalan apakah sudah benar ya? Supaya saya bisa bantu kontribusi perbaiki dokumentasinya.

adiatma commented 4 years ago

Terimakasih mas @satyakresna, langkah2nya udah sesuai mas, thanks ya...

di tunggu kontribusinya 🙏