Kayıtlar (Dart 3)
Coddy'nin Dart Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 86 / 110.
Dart 3, tam bir sınıf oluşturmadan birden çok değeri birlikte paketlemenin hafif bir yolu olan kayıtları kullanıma sundu. Kayıtlar değişmezdir, yerleşik eşitlik özelliğine sahiptir ve bir işlevden birden çok değer döndürmek veya ilişkili verileri geçici olarak gruplamak için mükemmeldir.
Değerleri parantez içine alarak bir kayıt oluşturun:
void main() {
// İki değerli basit bir kayıt
var point = (10, 20);
print(point.$1); // 10 - ilk elemana erişim
print(point.$2); // 20 - ikinci elemana erişim
// Adlandırılmış alanlara sahip kayıtlar
var person = (name: 'Alice', age: 30);
print(person.name); // Alice
print(person.age); // 30
}Konumsal alanlara $1, $2 vb. ile erişilirken, adlandırılmış alanlar doğrudan adlarını kullanır. Her iki stili de tek bir kayıtta karıştırabilirsiniz.
Record'lar, fonksiyonlardan birden fazla değer döndürürken öne çıkar — yalnızca iki veri parçası döndürmek için sınıf oluşturmaya gerek yoktur:
(int, int) divideWithRemainder(int a, int b) {
return (a ~/ b, a % b);
}
(String name, int age) getUser() {
return ('Bob', 25);
}
void main() {
var (quotient, remainder) = divideWithRemainder(17, 5);
print('$quotient remainder $remainder'); // 3 kalan 2
var (name, age) = getUser();
print('$name is $age'); // Bob 25 yaşında
}Kayıtlar, değerlerine dayalı eşitliği otomatik olarak destekler; bu da == işlecini kendiniz uygulamanıza gerek kalmadan karşılaştırmalar için kullanılmalarını kolaylaştırır. Basit, değişmez veri gruplamalarına ihtiyaç duyduğunuzda kayıtları; metotlara, değiştirilebilirliğe veya daha karmaşık davranışlara ihtiyaç duyduğunuzda sınıfları kullanın.
Görev
KolayKayıtları kullanarak bir koordinat sistemi oluşturalım! Kayıtlarla temsil edilen 2B noktalarla çalışan işlevler oluşturacak ve tam sınıflar oluşturmadan birden fazla ilişkili değeri döndürmenin ve bunlarla çalışmanın ne kadar kolay olduğunu göstereceksin.
Kodunu iki dosyaya ayıracaksın:
geometry.dart: Koordinat verileriyle çalışmak için kayıtları kullanan işlevler oluştur:- Adlandırılmış
createPoint(int x, int y)vexalanlarına sahip bir kayıt döndürenyişlevi. Dönüş türü({int x, int y})olmalıdır - İki nokta arasındaki orta noktayı hesaplayan ve adlandırılmış alanlara sahip bir kayıt olarak döndüren
midpoint(({int x, int y}) p1, ({int x, int y}) p2)işlevi. Hesaplama için tamsayı bölmesi (~/) kullan - Sıralı alanlara sahip bir kayıt döndüren
distance(({int x, int y}) p1, ({int x, int y}) p2)işlevi: yatay uzaklık (x farkı) ve dikey uzaklık (y farkı). Dönüş türü(int, int)olmalıdır.p2.x - p1.xvep2.y - p1.yolarak hesapla
- Adlandırılmış
main.dart: Geometri dosyanı içe aktar ve kayıtları uygulamada göster:createPointkullanarak iki nokta oluştur:(2, 4)konumunda A noktası ve(10, 8)konumunda B noktası- Adlandırılmış alanları kullanarak
Point A: ([x], [y])yazdır - Adlandırılmış alanları kullanarak
Point B: ([x], [y])yazdır - Orta noktayı hesapla ve
Midpoint: ([x], [y])yazdır - Uzaklığı hesapla ve değerleri
dxvedydeğişkenlerine çıkarmak için yapı sökümünü kullan; ardındanDistance: dx=[dx], dy=[dy]yazdır
Kayıtların birden fazla değeri düzenli bir şekilde döndürmene nasıl olanak sağladığına dikkat et: anlam önemli olduğunda açıklık için adlandırılmış alanlar, bağlam açık olduğunda ise sıralı alanlar!
Beklenen çıktı:
Point A: (2, 4)
Point B: (10, 8)
Midpoint: (6, 6)
Distance: dx=8, dy=4Kendin dene
import 'geometry.dart';
void main() {
// TODO: createPoint kullanarak (2, 4) konumunda A noktasını oluşturun
// TODO: createPoint kullanarak (10, 8) konumunda B noktasını oluşturun
// TODO: İsimlendirilmiş alanları kullanarak A Noktasını yazdırın: Point A: ([x], [y])
// TODO: İsimlendirilmiş alanları kullanarak B Noktasını yazdırın: Point B: ([x], [y])
// TODO: Orta noktayı hesaplayın ve yazdırın: Midpoint: ([x], [y])
// TODO: Mesafeyi hesaplayın ve dx ile dy değişkenlerine ayıklamak için yapı sökme (destructuring) kullanın
// Ardından yazdırın: Distance: dx=[dx], dy=[dy]
}
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 Depolama13İleri Düzey OOP Kavramları
Kompozisyon ve KalıtımGenişletme MetotlarıÇağrılabilir SınıflarMühürlü Sınıflar (Dart 3)Kayıtlar (Dart 3)Desenler ve Eşleştirme (3.0)Metot İçeren Enum'lar2Dart'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