_ Öneki Kuralı
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası — ders 31 / 110.
Alt çizgi öneki _, Dart'ın üyeleri gizli (private) olarak işaretleme yöntemidir. private gibi anahtar kelimeler kullanan dillerin aksine Dart, görünürlüğü kontrol etmek 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
KolayBir oyun için, alt çizgi önekinin dahili uygulama ayrıntılarını gizli tutarken temiz bir genel arayüzü nasıl sunduğunu gösteren bir puan takipçisi oluşturalım.
Kodunuzu iki dosya halinde düzenleyeceksiniz:
score_tracker.dart: Uygun kapsülleme (encapsulation) ile bir oyuncunun puanını yöneten birScoreTrackersınıfı oluşturun. Sınıf şunlara sahip olmalıdır:- Genel bir
String playerName- kimin oynadığını herkes görebilir 0değerine başlatılmış özel birint _score- ham puan korunmalıdır1değerine başlatılmış özel birint _bonusMultiplier- bu dahili bir oyun mekaniğidir- Oyuncu adını alan bir yapıcı (constructor)
- Özel
_scoredeğerini döndüren genel bir getterscore points * _bonusMultiplierdeğerini döndüren özel bir metot_applyBonus(int points)- Eklenen gerçek puanları hesaplamak için dahili olarak
_applyBonusmetodunu kullanan,_scoredeğerini güncelleyen veAdded [calculated] points!yazdıran genel bir metotaddPoints(int points) _bonusMultiplierdeğerini2olarak ayarlayan veDouble bonus activated!yazdıran genel bir metotactivateDoubleBonus()- Oyuncunun mevcut durumunu gösteren genel bir metot
displayStats()
- Genel bir
main.dart: Puan takipçinizi içe aktarın ve bir oyun oturumu simüle edin:'Alex'oyuncusu için birScoreTrackeroluşturundisplayStats()metodunu çağırın10puan ekleyin25puan ekleyin- Çift bonusu (double bonus) etkinleştirin
15puan ekleyin (bu ikiye katlanmalıdır)displayStats()metodunu çağırın- Genel getter'ı kullanarak
Final score: [score]yazdırın
displayStats() metodu şu formatta 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 fikri yoktur - bu, alt çizgi kuralının arkasına gizlenmiş bir uygulama detayı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: 65Kopya kağıdı
Alt çizgi ön eki _, Dart'ta üyeleri özel (private) olarak işaretler. Bu adlandırma kuralı, private gibi anahtar kelimeler kullanmadan görünürlüğü kontrol eder.
Alt çizgiyi alanlara ve metotlara uygulayın:
class Counter {
int _count = 0; // Özel alan
void _increment() { // Özel metot
_count++;
}
void increase() { // Genel metot
_increment();
print('Count: $_count');
}
}Alt çizgi herhangi bir tanımlayıcı için çalışır - değişkenler, metotlar, getter'lar, setter'lar ve sınıf adları:
class Person {
String _name; // Özel
int _age; // Özel
Person(this._name, this._age);
String get name => _name; // Genel getter
void _validateAge(int age) { } // Özel metot
}Özel üyelere aynı sınıf içinden erişilebilir ancak kütüphane dışındaki kodlar için kısıtlanmıştır. _ ile başlayan her şey bir uygulama detayıdır.
Kendin 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
1OOP Temelleri
Harici DosyalarKütüphaneler ve ImportlarOOP'ye GirişSınıflar ve Nesnelerthis Anahtar KelimesiMetotlarÖrnek DeğişkenleriConstructor TemelleriÖzet - Basit Hesap Makinesi4Null Safety
Null Safety'ye GirişNullable ve Non-Nullable? ve ! OperatörleriLate Anahtar Kelimesi ve Null SafetyNull-Aware OperatörleriSınıflarda Null SafetyÖzet - Kullanıcı Profili Sistemi7Soyut Sınıflar ve Arayüzler
Soyut SınıflarSoyut MetotlarDart'ta ArayüzlerÖrtük ArayüzlerUygulama vs. GenişletmeÇoklu ArayüzlerÖzet - Şekil Hesaplayıcı10Koleksiyonlar ve Generic'ler
List, Set, Map Genel BakışTip Güvenli KoleksiyonlarGeneric SınıflarGeneric MetotlarGeneric KısıtlamalarIterable ve IteratorÖzet - Generic Depolama2Dart'ta Yapıcılar
Varsayılan Yapıcıİsimlendirilmiş Yapıcılarİlklendirme ListeleriSabit YapıcılarFabrika YapıcılarıYönlendiren YapıcılarÖzet - Şekil Oluşturucu5Kapsülleme
Public ve Private Üyeler_ Öneki KuralıKütüphane Düzeyinde GizlilikGetter ve Setter DetaylarıBilgi GizlemeÖzet - Öğrenci Kayıtları8Mixin'ler
Mixin'lere GirişMixin OluşturmaBirden Fazla Mixin KullanımıMixin'lerde on Anahtar KelimesiMixin vs KalıtımMixin vs ArayüzÖzet - Hayvan Sistemi11Özel Metotlar
toString() OverridehashCode ve == OverrideComparable Arayüzücall() MetodunoSuchMethod OverrideÖzet - Özel Koleksiyon14Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıObserver KalıbıStrategy Kalıbı17Final Meydan Okumaları
E-Öğrenme PlatformuBankacılık SistemiOyun Karakter SistemiAraç Kiralama Servisi3Sınıf Özellikleri
Instance ve Statik ÜyelerFinal ve Const AlanlarLate DeğişkenlerStatik Metotlar ve AlanlarGetters ve SettersÖzet - Banka Hesabı Yöneticisi6Kalıtım
Temel Kalıtımsuper Anahtar KelimesiMetot Ezme@override Anotasyonufinal Sınıf Anahtar KelimesiYapıcı Metotlar ve KalıtımÖzet - Çalışan Hiyerarşisi9Çok Biçimlilik
Çok Biçimlilik TemelleriInterface'ler ile Çok BiçimlilikÇalışma Zamanı Tip Kontrolüis ve as OperatörleriCovariant Anahtar KelimesiÖzet - Ödeme İşlemcisi12Asenkron OOP
Futures ve async/awaitStream TemelleriStream Controller'larAsenkron KurucularSınıf Metotlarında Asenkron KullanımıÖzet - Data Fetcher15Tasarım Kalıpları Bölüm 2
Komut KalıbıAdaptör KalıbıDekoratör KalıbıŞablon Metot KalıbıDurum KalıbıKompozit KalıbıRepository Kalıbı