Static Metotlar ve Alanlar
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 20 / 110.
Artık örnek ve statik üyeler arasındaki farkı anladığına göre, statik metotları ve alanları etkili bir şekilde nasıl kullanacağını keşfedelim. Statik üyeler, tek tek nesnelerden ziyade sınıf kavramının kendisine ait olan işlevler için idealdir.
Statik alanlar, tüm örnekler arasında paylaşılan verileri depolar. Yaygın kullanım alanları arasında sayaçlar, yapılandırma değerleri veya önbelleğe alınmış veriler bulunur:
class MathHelper {
static const double pi = 3.14159;
static int calculationCount = 0;
static double circleArea(double radius) {
calculationCount++;
return pi * radius * radius;
}
}
print(MathHelper.circleArea(5)); // 78.53975
print(MathHelper.circleArea(3)); // 28.27431
print(MathHelper.calculationCount); // 2Statik metotları bir örnek üzerinde değil, doğrudan sınıf adı üzerinden çağırdığınıza dikkat edin. MathHelper sınıfı bir yardımcı program gibi çalışır; hiçbir zaman bir MathHelper nesnesi oluşturmanız gerekmez.
Önemli bir kural: statik metotlar örnek üyelerine doğrudan erişemezler. this anahtar kelimesine erişimleri yoktur çünkü herhangi bir belirli nesneye bağlı değillerdir:
class Counter {
int value = 0; // Örnek alanı
static int total = 0; // Statik alan
void increment() {
value++; // Tamam - örnek metodu örnek alanına erişiyor
total++; // Tamam - örnek metodu statik alana erişebilir
}
static void reset() {
total = 0; // Tamam - statik metot statik alana erişiyor
// value = 0; // Hata! Örnek alanına erişilemez
}
}İşlevsellik nesne durumuna bağlı olmadığında statik üyeleri kullanın - yardımcı fonksiyonlar (utility functions), fabrika takibi (factory tracking) veya paylaşılan sabitler (shared constants) ideal adaylardır.
Görev
KolayNesne oluşturmaya gerek kalmadan yardımcı işlevler sağlamak için statik metotların ve alanların nasıl birlikte çalıştığını gösteren, dize işlemleri için bir yardımcı (utility) sınıfı oluşturalım.
Kodunuzu düzenlemek için iki dosya oluşturacaksınız:
string_utils.dart: Yardımcı bir araç görevi gören birStringUtilssınıfı tanımlayın. Sınıfınız şunlara sahip olmalıdır:'-'değerine ayarlanmış birstatic const String defaultSeparator- Kaç işlemin gerçekleştirildiğini takip etmek için
0'dan başlayan birstatic int operationCount operationCountdeğerini artıran ve ters çevrilmiş dizeyi döndüren statik bir metotreverse(String text)operationCountdeğerini artıran ve iki dizeyidefaultSeparatorile birleştirerek döndüren statik bir metotjoin(String first, String second)operationCountdeğerini artıran ve ünlü harflerin (a, e, i, o, u - büyük/küçük harf duyarsız) sayısını döndüren statik bir metotcountVowels(String text)- Gerçekleştirilen toplam işlem sayısını gösteren bir dize döndüren statik bir metot
getStats()
main.dart: Yardımcı sınıfınızı içe aktarın ve statik metotlarını kullanın:'hello'ilereverse()metodunu çağırın ve sonucu yazdırın'dart've'lang'ilejoin()metodunu çağırın ve sonucu yazdırın'Programming'ilecountVowels()metodunu çağırın veVowels: [count]şeklinde yazdırıngetStats()kullanarak istatistikleri yazdırın
Metotlar statik olduğu için hepsini doğrudan sınıf adı üzerinden çağırmayı unutmayın; herhangi bir StringUtils nesnesi oluşturmayacaksınız.
getStats() metodu şu formatta çıktı vermelidir:
Operations performed: [operationCount]Beklenen çıktı:
olleh
dart-lang
Vowels: 3
Operations performed: 3Kendin dene
import 'string_utils.dart';
void main() {
// TODO: 'hello' ile reverse() fonksiyonunu çağırın ve sonucu yazdırın
// TODO: 'dart' ve 'lang' ile join() fonksiyonunu çağırın ve sonucu yazdırın
// TODO: 'Programming' ile countVowels() fonksiyonunu çağırın ve "Vowels: [count]" yazdırın
// TODO: getStats() kullanarak istatistikleri 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