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.
Tantangan
MudahMari 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 classScoreTrackeryang mengelola skor pemain dengan enkapsulasi yang tepat. Class ini harus memiliki:String playerNamepublik, semua orang bisa melihat siapa yang sedang bermainint _scoreprivat yang diinisialisasi dengan0, skor mentah harus dilindungiint _bonusMultiplierprivat yang diinisialisasi dengan1, ini adalah mekanisme internal game- Constructor yang menerima nama pemain
- Getter publik
scoreyang mengembalikan_scoreprivat - Method privat
_applyBonus(int points)yang mengembalikanpoints * _bonusMultiplier - Method publik
addPoints(int points)yang menggunakan_applyBonussecara internal untuk menghitung poin yang benar-benar ditambahkan, memperbarui_score, dan mencetakAdded [calculated] points! - Method publik
activateDoubleBonus()yang menetapkan_bonusMultipliermenjadi2dan mencetakDouble bonus activated! - Method publik
displayStats()yang menampilkan status pemain saat ini
main.dart: Impor pelacak skor dan simulasikan sesi game:- Buat
ScoreTrackeruntuk pemain'Alex' - Panggil
displayStats() - Tambahkan
10poin - Tambahkan
25poin - Aktifkan bonus ganda
- Tambahkan
15poin (poin ini seharusnya digandakan) - Panggil
displayStats() - Cetak
Final score: [score]menggunakan getter publik
- Buat
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: 65Coba 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
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online