Menu
CoddyTech

Fungsi Terkait

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Rust di Coddy. Pelajaran 4 dari 61.

Tidak semua fungsi dalam blok impl perlu beroperasi pada instance yang sudah ada. Fungsi yang tidak menerima self sebagai parameter disebut fungsi terkait: fungsi tersebut terkait dengan tipe itu sendiri, bukan dengan instance tertentu.

Kegunaan paling umum dari fungsi terkait adalah membuat constructor. Berdasarkan konvensi, fungsi ini sering diberi nama new:

struct Player {
    name: String,
    score: u32,
}

impl Player {
    fn new(name: String) -> Player {
        Player {
            name,
            score: 0,
        }
    }
}

Perhatikan bahwa tidak ada parameter self. Fungsi ini tidak memerlukan Player yang sudah ada agar bisa berfungsi. Sebaliknya, fungsi ini membuat dan mengembalikan Player yang benar-benar baru. Tipe pengembaliannya adalah struct itu sendiri.

Untuk memanggil fungsi terkait, gunakan sintaks :: dengan nama tipe, bukan notasi titik:

fn main() {
    let player1 = Player::new(String::from("Alice"));
    
    println!("{} starts with {} points", player1.name, player1.score);
    // output: Alice starts with 0 points
}

Pola ini menyediakan cara yang rapi untuk menginisialisasi struct dengan nilai default atau logika validasi, sekaligus menggabungkan logika pembuatannya dengan definisi tipe. Kamu mungkin sudah pernah melihat sintaks ini pada String::from(): itu juga merupakan fungsi terkait!

challenge icon

Tantangan

Mudah

Buat struct Book dengan dua field: title (String) dan pages (u32).

Tambahkan blok implementasi untuk Book dengan fungsi terkait bernama new yang:

  • Menerima parameter title: String
  • Mengembalikan Book baru dengan judul yang diberikan dan pages diatur ke 0

Tambahkan juga method bernama info yang menerima &self dan mengembalikan String dengan format: "{title} has {pages} pages"

Kamu akan menerima satu input:

  • Judul buku (String)

Gunakan fungsi terkait Book::new untuk membuat buku dengan judul yang diberikan, lalu cetak hasil pemanggilan method info.

Format output yang diharapkan:

{title} has {pages} pages

Coba sendiri

use std::io;

// TODO: Definisikan struct Book dengan field title (String) dan pages (u32)


// TODO: Tambahkan blok impl untuk Book yang berisi:
// - Fungsi terkait `new` yang menerima title dan mengembalikan Book dengan pages bernilai 0
// - Method `info` yang mengembalikan String dengan format "{title} has {pages} pages"


fn main() {
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let title = input.trim().to_string();

    // TODO: Gunakan Book::new untuk membuat Book dengan title yang diberikan
    // TODO: Cetak hasil pemanggilan method info
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Rust online