Menu
Coddy logo textTech

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.

challenge icon

Görev

Kolay

Kayı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) ve x alanlarına sahip bir kayıt döndüren y iş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.x ve p2.y - p1.y olarak hesapla
  • main.dart: Geometri dosyanı içe aktar ve kayıtları uygulamada göster:
    • createPoint kullanarak 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 dx ve dy değişkenlerine çıkarmak için yapı sökümünü kullan; ardından Distance: 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=4

Kendin 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]
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Dart derleyicisi