Dasar-Dasar Stream
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 77 dari 110.
Jika Future memberikan satu nilai, Stream memberikan urutan nilai seiring waktu. Bayangkan seperti pipa yang dapat mengeluarkan beberapa bagian data, cocok untuk peristiwa, pembaruan waktu nyata, atau memproses data bagian demi bagian.
Kamu dapat membuat stream sederhana menggunakan Stream.fromIterable() atau fungsi generator asinkron dengan async* dan yield:
Stream<int> countToThree() async* {
yield 1;
yield 2;
yield 3;
}
Future<void> main() async {
await for (var number in countToThree()) {
print(number);
}
}
// output: 1, 2, 3Kata kunci async* menandai fungsi yang mengembalikan Stream, dan yield mengeluarkan setiap nilai. Untuk mengonsumsi stream, gunakan await for yang memproses setiap nilai saat tiba.
Kamu juga dapat mendengarkan stream menggunakan method listen(), yang menerima fungsi callback:
Stream<String> greetings() async* {
yield 'Hello';
yield 'Hi';
yield 'Hey';
}
void main() {
greetings().listen((message) {
print(message);
});
}Perbedaan utama dengan Future: Future selesai sekali dengan satu nilai, sedangkan Stream dapat menghasilkan banyak nilai sebelum selesai. Karena itu, Stream ideal untuk menangani data yang terus mengalir, seperti interaksi pengguna, pembacaan sensor, atau data yang tiba dalam beberapa bagian.
Tantangan
MudahMari buat sistem timer hitung mundur yang mengeluarkan nilai seiring waktu menggunakan stream! Kamu akan membuat class yang menghasilkan urutan angka hitung mundur, sekaligus menunjukkan cara stream mengirimkan beberapa nilai, bukan hanya satu.
Kamu akan mengatur kodemu ke dalam dua file:
countdown.dart: Buat classCountdownyang menghasilkan stream hitung mundur. Class-mu harus memiliki:- Field
start(int) yang menyimpan angka awal hitung mundur - Constructor yang menerima angka awal
- Method
countDown()yang mengembalikanStream<int>. Gunakanasync*danyielduntuk mengeluarkan angka daristarthingga0(inklusif) - Method
countDownWithMessage()yang mengembalikanStream<String>. Method ini harus mengeluarkan string dengan format'T-minus [number]'untuk setiap angka daristarthingga1, lalu mengeluarkan'Liftoff!'sebagai nilai terakhir
- Field
main.dart: Impor file hitung mundurmu dan tunjukkan kedua method stream. Fungsi main-mu harus menggunakan async dan:- Membuat instance
Countdownyang dimulai dari3 - Mencetak
Number countdown: - Menggunakan
await foruntuk melakukan iterasi melaluicountDown()dan mencetak setiap angka - Mencetak baris kosong
- Mencetak
Launch sequence: - Menggunakan
await foruntuk melakukan iterasi melaluicountDownWithMessage()dan mencetak setiap pesan
- Membuat instance
Perhatikan bagaimana setiap pernyataan yield mengeluarkan nilai melalui stream, dan await for memproses setiap nilai saat nilai itu tiba. Berbeda dengan Future yang memberikan satu hasil, stream-mu akan mengeluarkan beberapa nilai secara berurutan!
Output yang diharapkan:
Number countdown:
3
2
1
0
Launch sequence:
T-minus 3
T-minus 2
T-minus 1
Liftoff!Coba sendiri
import 'countdown.dart';
Future<void> main() async {
// TODO: Buat instance Countdown yang dimulai dari 3
// TODO: Cetak 'Number countdown:'
// TODO: Gunakan await for untuk mengulangi countDown() dan mencetak setiap angka
// TODO: Cetak baris kosong
// TODO: Cetak 'Launch sequence:'
// TODO: Gunakan await for untuk mengulangi countDownWithMessage() dan mencetak setiap pesan
}
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 Pembayaran12OOP Asinkron
Futures & async/awaitDasar-Dasar StreamPengontrol StreamKonstruktor AsinkronAsync dalam Method ClassRangkuman: Pengambil DataLatihan sendiri: Compiler Dart online