_ Ön Ek Kuralı
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 31 / 110.
Alt çizgi ön eki _, Dart'ta üyeleri özel olarak işaretlemenin yoludur. private gibi anahtar kelimeler kullanan dillerin aksine Dart, görünürlüğü denetlemek için bu adlandırma kuralına dayanır.
Alt çizgiyi hem alanlara hem de metotlara uygulayabilirsiniz:
class Counter {
int _count = 0; // Gizli alan
void _increment() { // Gizli metot
_count++;
}
void increase() { // Genel metot
_increment();
print('Count: $_count');
}
}Alt çizgi; değişkenler, metotlar, getter'lar, setter'lar ve hatta sınıf adları gibi her türlü tanımlayıcı için çalışır. _Helper adlı bir sınıf, kendi kütüphanesine özel olacaktır.
class Person {
String _name; // Gizli
int _age; // Gizli
Person(this._name, this._age);
String get name => _name; // Genel getter
void _validateAge(int age) { } // Gizli metot
}Aynı sınıf içinde, özel üyelere normal bir şekilde erişirsiniz. Kısıtlama yalnızca kütüphane dışındaki kodlar için geçerlidir. Bu kural, kodu okurken hangi üyelerin yalnızca dahili kullanım için olduğunu anında netleştirir; _ ile başlayan her şey bir uygulama detayıdır.
Görev
KolayAlt çizgi önekinin dahili uygulama ayrıntılarını nasıl gizli tutarken temiz bir genel arayüz sunduğunu gösteren bir oyun için puan takip sistemi oluşturalım.
kodunuzu iki dosyaya ayıracaksınız:
score_tracker.dart: Oyuncunun puanını uygun kapsülleme ile yöneten birScoreTrackersınıfı oluşturun. Sınıf şunlara sahip olmalıdır:- Herkesin kimin oynadığını görebilmesi için genel bir
String playerName int _scoreile başlatılan özel bir0- ham puan korunmalıdırint _bonusMultiplierile başlatılan özel bir1- bu, dahili bir oyun mekaniğidir- Oyuncu adını alan bir yapıcı
- Özel
scoredeğerini döndüren genel bir_scoregetter'ı _applyBonus(int points)değerini döndüren özel birpoints * _bonusMultipliermetodu- Gerçekte eklenen puanı hesaplamak için dahili olarak
addPoints(int points)kullanan,_applyBonusdeğerini güncelleyen ve_scoreyazdıran genel birAdded [calculated] points!metodu activateDoubleBonus()değerini_bonusMultiplierolarak ayarlayan ve2yazdıran genel birDouble bonus activated!metodu- Oyuncunun mevcut durumunu gösteren genel bir
displayStats()metodu
- Herkesin kimin oynadığını görebilmesi için genel bir
main.dart: Puan takip sisteminizi içe aktarın ve bir oyun oturumunu simüle edin:ScoreTrackeroyuncusu için bir'Alex'oluşturundisplayStats()metodunu çağırın10puan ekleyin25puan ekleyin- Çift bonusu etkinleştirin
15puan ekleyin (bu puan iki katına çıkarılmalıdır)displayStats()metodunu çağırın- Genel getter'ı kullanarak
Final score: [score]yazdırın
displayStats() metodu şu biçimde yazdırmalıdır:
=== Player Stats ===
Player: [playerName]
Current Score: [_score]Özel _applyBonus metodunun ve _bonusMultiplier alanının bonus hesaplamasını dahili olarak nasıl yönettiğine dikkat edin. Harici kod yalnızca genel metotları görür ve çarpan sistemi hakkında hiçbir şey bilmez - bu, alt çizgi kuralının arkasında gizlenen bir uygulama ayrıntısıdır.
Beklenen çıktı:
=== 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: 65Kendin dene
import 'score_tracker.dart';
void main() {
// TODO: 'Alex' oyuncusu için bir ScoreTracker oluşturun
// TODO: displayStats() fonksiyonunu çağırın
// TODO: 10 puan ekleyin
// TODO: 25 puan ekleyin
// TODO: İki kat bonusu (double bonus) etkinleştirin
// TODO: 15 puan ekleyin (bu ikiye katlanmalı)
// TODO: displayStats() fonksiyonunu çağırın
// TODO: Genel alıcıyı (public getter) kullanarak 'Final score: [score]' yazdırın
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Nesne Tabanlı Programlamanın Temelleri
Harici DosyalarKütüphaneler ve İçe AktarmalarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar SözcüğüMetotlarÖrnek DeğişkenleriYapıcıların TemelleriTekrar - Basit Hesap Makinesi4Null Güvenliği
Null Güvenliğine GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Sözcüğü ve Null GüvenliğiNull-Aware OperatörlerSınıflarda Null GüvenliğiTekrar - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulamak ve GenişletmekBirden Çok ArayüzTekrar - Şekil Hesaplayıcı10Koleksiyonlar ve Generics
List, Set, Map Genel BakışTür Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorTekrar - Generic Depolama2Dart'ta Yapıcılar
Varsayılan YapıcıAdlandırılmış YapıcılarBaşlatıcı ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Ön Ek KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DerinliğiBilgi GizlemeTekrar - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Çok Mixin KullanımıMixin'lerde on Anahtar SözcüğüMixin ve Kalıtım KarşılaştırmasıMixin ve Arayüz KarşılaştırmasıÖzet - Hayvan Sistemi11Özel Metotlar
toString() Geçersiz KılmahashCode & == Geçersiz KılmaComparable Arayüzücall() MetodunoSuchMethod Geçersiz KılmaÖzet - Özel Koleksiyon14Tasarım Desenleri Bölüm 1
Tasarım Desenlerine GirişSingleton DeseniFactory DeseniObserver DeseniStrategy Deseni3Sınıf Özellikleri
Örnek ve Static ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatic Metotlar ve AlanlarGetter ve Setter'larÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar SözcüğüMetot Geçersiz Kılma@override Açıklamasıfinal Sınıf Anahtar SözcüğüKurucular ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriArayüzler Yoluyla Çok BiçimlilikÇalışma Zamanı Tür Denetimiis ve as OperatörleriCovariant Anahtar KelimesiTekrar - Ödeme İşlemcisi12Asenkron OOP
Future'ler ve async/awaitStream TemelleriStream DenetleyicileriAsenkron YapıcılarSınıf Metotlarında AsenkronlukÖzet - Veri Getirici15Tasarım Desenleri Bölüm 2
Komut DeseniAdaptör DeseniDekoratör DeseniŞablon Metot DeseniDurum DeseniBileşik DesenDepo DeseniKendi başına pratik yap: Online Dart derleyicisi