Menu
CoddyTech

Konvensi Prefiks _

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 31 dari 110.

Awalan garis bawah _ adalah cara Dart menandai member sebagai privat. Tidak seperti bahasa yang menggunakan kata kunci seperti private, Dart mengandalkan konvensi penamaan ini untuk mengatur visibilitas.

Kamu dapat menerapkan garis bawah pada field dan method:

class Counter {
  int _count = 0;        // Field privat
  
  void _increment() {    // Method privat
    _count++;
  }
  
  void increase() {      // Method publik
    _increment();
    print('Count: $_count');
  }
}

Garis bawah berfungsi untuk pengenal apa pun, variabel, method, getter, setter, dan bahkan nama class. Class bernama _Helper akan bersifat privat untuk library-nya.

class Person {
  String _name;          // Privat
  int _age;              // Privat
  
  Person(this._name, this._age);
  
  String get name => _name;           // Getter publik
  void _validateAge(int age) { }      // method privat
}

Di dalam class yang sama, kamu mengakses member privat seperti biasa. Pembatasan ini hanya berlaku untuk kode di luar library. Konvensi ini langsung memperjelas saat membaca kode, member mana yang hanya ditujukan untuk penggunaan internal, yaitu apa pun yang diawali dengan _ merupakan detail implementasi.

challenge icon

Tantangan

Mudah

Mari buat pelacak skor untuk sebuah game yang menunjukkan bagaimana awalan garis bawah menyembunyikan detail implementasi internal sekaligus menampilkan antarmuka publik yang rapi.

Kamu akan mengatur kodemu ke dalam dua file:

  • score_tracker.dart: Buat class ScoreTracker yang mengelola skor pemain dengan enkapsulasi yang tepat. Class ini harus memiliki:
    • String playerName publik, semua orang bisa melihat siapa yang sedang bermain
    • int _score privat yang diinisialisasi dengan 0, skor mentah harus dilindungi
    • int _bonusMultiplier privat yang diinisialisasi dengan 1, ini adalah mekanisme internal game
    • Constructor yang menerima nama pemain
    • Getter publik score yang mengembalikan _score privat
    • Method privat _applyBonus(int points) yang mengembalikan points * _bonusMultiplier
    • Method publik addPoints(int points) yang menggunakan _applyBonus secara internal untuk menghitung poin yang benar-benar ditambahkan, memperbarui _score, dan mencetak Added [calculated] points!
    • Method publik activateDoubleBonus() yang menetapkan _bonusMultiplier menjadi 2 dan mencetak Double bonus activated!
    • Method publik displayStats() yang menampilkan status pemain saat ini
  • main.dart: Impor pelacak skor dan simulasikan sesi game:
    • Buat ScoreTracker untuk pemain 'Alex'
    • Panggil displayStats()
    • Tambahkan 10 poin
    • Tambahkan 25 poin
    • Aktifkan bonus ganda
    • Tambahkan 15 poin (poin ini seharusnya digandakan)
    • Panggil displayStats()
    • Cetak Final score: [score] menggunakan getter publik

Method displayStats() harus mencetak dengan format berikut:

=== Player Stats ===
Player: [playerName]
Current Score: [_score]

Perhatikan bagaimana method privat _applyBonus dan field _bonusMultiplier menangani perhitungan bonus secara internal. Kode eksternal hanya melihat method publik dan tidak mengetahui sistem pengali. Ini adalah detail implementasi yang disembunyikan oleh konvensi garis bawah.

Output yang diharapkan:

=== Player Stats ===
Player: Alex
Current Score: 0
Added 10 points!
Added 25 points!
Double bonus activated!
Added 30 points!
=== Player Stats ===
Player: Alex
Current Score: 65
Final score: 65

Coba sendiri

import 'score_tracker.dart';

void main() {
  // TODO: Buat ScoreTracker untuk pemain 'Alex'
  
  // TODO: Panggil displayStats()
  
  // TODO: Tambahkan 10 poin
  
  // TODO: Tambahkan 25 poin
  
  // TODO: Aktifkan bonus ganda
  
  // TODO: Tambahkan 15 poin (poin ini harus digandakan)
  
  // TODO: Panggil displayStats()
  
  // TODO: Cetak 'Final score: [score]' menggunakan getter publik
}
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 Dart online