Iterable dan Iterator
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 68 dari 110.
Setiap kali kamu menggunakan perulangan for-in pada List, Set, atau koleksi lainnya, kamu menggunakan Iterable dan Iterator di balik layar. Memahami konsep-konsep ini memungkinkanmu membuat class sendiri yang bisa digunakan dalam perulangan.
Iterable adalah object apa pun yang dapat menghasilkan rangkaian nilai. Ada satu persyaratan utama: getter iterator yang mengembalikan Iterator. Iterator inilah yang sebenarnya bergerak melalui elemen satu per satu:
var numbers = [1, 2, 3];
var iterator = numbers.iterator;
while (iterator.moveNext()) {
print(iterator.current); // 1, lalu 2, lalu 3
}method moveNext() berpindah ke elemen berikutnya dan mengembalikan true jika ada, atau false jika sudah selesai. property current memberikan elemen saat ini.
Untuk membuat class-mu sendiri dapat diiterasi, implementasikan interface Iterable:
class Countdown extends Iterable<int> {
final int start;
Countdown(this.start);
@override
Iterator<int> get iterator => CountdownIterator(start);
}
class CountdownIterator implements Iterator<int> {
int _current;
CountdownIterator(int start) : _current = start + 1;
@override
int get current => _current;
@override
bool moveNext() {
if (_current > 0) {
_current--;
return true;
}
return false;
}
}
void main() {
for (var n in Countdown(3)) {
print(n); // 3, 2, 1, 0
}
}Sekarang Countdown berfungsi dengan perulangan for-in dan semua method Iterable seperti map, where, dan fold. Pola ini penting saat membangun koleksi khusus yang terintegrasi dengan mulus ke dalam ekosistem koleksi Dart.
Tantangan
MudahMari buat generator rentang khusus yang bisa diiterasi menggunakan perulangan for-in! Kamu akan membuat class Iterable dan Iterator sendiri untuk menghasilkan urutan angka dalam rentang yang ditentukan.
Kamu akan menyusun kodemu ke dalam dua file:
range.dart: Buat dua class yang bekerja sama untuk menghasilkan urutan angka:- Class
RangeIteratoryang mengimplementasikanIterator<int>. Class ini harus melacak posisi saat ini dan mengetahui kapan harus berhenti. Iterator dimulai sebelum elemen pertama, jadimoveNext()harus dipanggil sebelum mengaksescurrent. - Class
Rangeyang memperluasIterable<int>. Class ini menerima nilaistartdanenddalam konstruktornya, serta menyediakan getteriteratoryang mengembalikanRangeIterator.
startdanend. Contohnya,Range(1, 5)harus menghasilkan: 1, 2, 3, 4, 5.- Class
main.dart: Impor file rentangmu dan tunjukkan iterable khusus buatanmu:- Buat
Range(1, 5)dan gunakan perulanganfor-inuntuk mencetak setiap angka pada barisnya sendiri - Cetak satu baris kosong
- Buat
Range(10, 13)dan gunakan methodmapuntuk menggandakan setiap nilai, lalu cetak list hasilnya
- Buat
Karena class Range-mu memperluas Iterable, class tersebut otomatis mendapatkan akses ke semua method koleksi yang canggih, seperti map, where, dan fold. Itulah keunggulan mengimplementasikan antarmuka Iterable!
Output yang diharapkan:
1
2
3
4
5
[20, 22, 24, 26]Coba sendiri
import 'range.dart';
void main() {
// TODO: Buat Range(1, 5) dan gunakan loop for-in untuk mencetak setiap angka
// TODO: Cetak satu baris kosong
// TODO: Buat Range(10, 13), gunakan map untuk menggandakan setiap nilai, lalu cetak list tersebut
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar OOP
file Eksternallibrary dan ImporPengantar OOPClass dan ObjectKata kunci thismethodVariabel InstanceDasar-Dasar ConstructorRingkasan: Kalkulator Sederhana4Keamanan Null
Pengantar Keamanan NullBisa Null vs Tidak Bisa NullOperator ? dan !Kata Kunci late dan Keamanan NullOperator Penanganan NullKeamanan Null dalam classRangkuman: Sistem Profil Pengguna7class Abstrak & Antarmuka
class AbstrakMethod abstrakAntarmuka di DartAntarmuka ImplisitMengimplementasikan vs MemperluasBeberapa AntarmukaRingkasan: Kalkulator Bentuk10Koleksi dan Generik
Gambaran Umum list, set, dan MapKoleksi dengan Tipe AmanKelas GenerikMetode GenerikBatasan GenerikIterable dan IteratorUlasan: Penyimpanan Generik2Konstruktor dalam Dart
Konstruktor DefaultKonstruktor BernamaInitializer ListsKonstruktor KonstanKonstruktor FactoryKonstruktor RedirectingRangkuman, Pembuat Bentuk5Enkapsulasi
Member Publik vs PrivatKonvensi Prefiks _Privasi Tingkat libraryPendalaman Getter & SetterPenyembunyian InformasiRingkasan: Catatan Siswa8Mixin
Pengantar MixinMembuat MixinMenggunakan Beberapa MixinKata Kunci on pada MixinMixin vs. PewarisanMixin vs. InterfaceRangkuman: Sistem Hewan3Property Class
Anggota Instance vs StaticField Final dan ConstVariabel LateMethod dan Field StaticGetter dan SetterRangkuman: Pengelola Rekening Bank6Pewarisan
Pewarisan DasarKata Kunci superPenimpaan methodAnotasi @overrideKata Kunci class finalKonstruktor dan PewarisanRangkuman, Hierarki Karyawan9Polimorfisme
Dasar-Dasar PolimorfismePolimorfisme melalui AntarmukaPemeriksaan Tipe saat RuntimeOperator is & asKata Kunci KovarianRangkuman: Pemroses PembayaranLatihan sendiri: Compiler Dart online