Menu
CoddyTech

Kata Kunci Kovarian

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 61 dari 110.

Saat kamu meng-override method di subclass, Dart biasanya mengharuskan tipe parameter sama persis. Namun, terkadang kamu ingin method subclass menerima tipe yang lebih spesifik daripada parent. Kata kunci covariant memungkinkan hal ini.

Pertimbangkan skenario ketika class Animal memiliki method yang menerima Animal lain:

class Animal {
  void chase(Animal other) {
    print('Chasing an animal');
  }
}

class Dog extends Animal {
  @override
  void chase(covariant Dog other) {
    print('Dog chasing another dog');
  }
}

Tanpa covariant, Dart akan mengeluh bahwa Dog bukan tipe yang sama dengan Animal. Dengan menambahkan covariant sebelum parameter, kamu memberi tahu Dart: "Aku tahu tipe ini lebih spesifik, dan aku akan memastikan hanya tipe yang tepat yang diberikan."

Ini berguna ketika subclass secara logis hanya boleh bekerja dengan jenisnya sendiri:

void main() {
  Dog dog1 = Dog();
  Dog dog2 = Dog();
  
  dog1.chase(dog2);  // Berhasil: Dog mengejar anjing lain
}

Namun, berhati-hatilah, menggunakan covariant memindahkan keamanan tipe ke runtime. Jika kamu memanggil method melalui referensi parent dengan tipe yang salah, kamu akan mendapatkan error saat runtime, bukan error saat compile-time. Gunakan ini jika kamu yakin dengan tipe yang diteruskan.

challenge icon

Tantangan

Mudah

Mari kita buat sistem kecocokan hewan peliharaan yang menggunakan kata kunci covariant untuk memastikan hewan hanya bermain dengan sesama jenisnya. Kamu akan membuat hierarki hewan peliharaan, dengan setiap tipe memiliki method playWith yang hanya menerima hewan peliharaan dengan tipe yang sama.

Kamu akan mengatur kodemu dalam dua file:

  • pets.dart: Definisikan hierarki hewan peliharaanmu di sini:
    • Class Pet dengan property String name dan sebuah konstruktor. Sertakan method playWith(Pet other) yang mencetak [name] plays with [other.name]
    • Class Cat yang memperluas Pet dan menimpa playWith menggunakan kata kunci covariant agar hanya menerima Cat. Class ini harus mencetak [name] and [other.name] chase yarn together
    • Class Dog yang memperluas Pet dan menimpa playWith menggunakan kata kunci covariant agar hanya menerima Dog. Class ini harus mencetak [name] and [other.name] fetch the ball together
    • Class Rabbit yang memperluas Pet dan menimpa playWith menggunakan kata kunci covariant agar hanya menerima Rabbit. Class ini harus mencetak [name] and [other.name] hop around together
  • main.dart: Impor file hewan peliharaanmu dan tunjukkan bagaimana setiap tipe hewan peliharaan bermain hanya dengan sesama jenisnya:
    • Buat dua object Cat bernama 'Whiskers' dan 'Mittens', lalu buat Whiskers bermain dengan Mittens
    • Buat dua object Dog bernama 'Buddy' dan 'Max', lalu buat Buddy bermain dengan Max
    • Buat dua object Rabbit bernama 'Flopsy' dan 'Cotton', lalu buat Flopsy bermain dengan Cotton

Kata kunci covariant memungkinkan setiap subclass mempersempit tipe parameter dari Pet menjadi tipe spesifiknya, sehingga memastikan interaksi yang aman dari segi tipe antara hewan peliharaan yang sejenis.

Output yang diharapkan:

Whiskers and Mittens chase yarn together
Buddy and Max fetch the ball together
Flopsy and Cotton hop around together

Coba sendiri

import 'pets.dart';

void main() {
  // TODO: Buat dua object Cat bernama 'Whiskers' dan 'Mittens'
  // Lalu, buat Whiskers bermain dengan Mittens
  
  
  // TODO: Buat dua object Dog bernama 'Buddy' dan 'Max'
  // Lalu, buat Buddy bermain dengan Max
  
  
  // TODO: Buat dua object Rabbit bernama 'Flopsy' dan 'Cotton'
  // Lalu, buat Flopsy bermain dengan Cotton
  
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Dart online