Async dalam Method Class
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 80 dari 110.
Sekarang setelah kamu tahu cara menangani inisialisasi asinkron dengan method factory, mari kita lihat cara membuat method instance biasa menjadi asinkron. Caranya mudah: cukup tambahkan async ke method mana pun dan buat method tersebut mengembalikan Future.
class WeatherService {
String _location;
WeatherService(this._location);
Future<String> fetchTemperature() async {
await Future.delayed(Duration(seconds: 1));
return '22°C in $_location';
}
Future<void> updateLocation(String newLocation) async {
await Future.delayed(Duration(milliseconds: 500));
_location = newLocation;
print('Location updated to $_location');
}
}
Future<void> main() async {
var service = WeatherService('London');
var temp = await service.fetchTemperature();
print(temp);
await service.updateLocation('Paris');
}method async dapat mengakses dan mengubah variabel instance seperti method biasa. Perbedaan utamanya adalah pemanggil harus menggunakan await untuk menunggu hasilnya. method yang mengembalikan Future<void> tidak mengembalikan nilai, tetapi tetap perlu ditunggu jika kamu ingin memastikan method tersebut selesai sebelum melanjutkan.
Kamu juga dapat menggabungkan beberapa pemanggilan async dalam sebuah method, atau memanggil method async lainnya dari class yang sama:
Future<String> getFullReport() async {
var temp = await fetchTemperature();
var humidity = await fetchHumidity();
return '$temp, Humidity: $humidity';
}Pola ini penting untuk class yang berinteraksi dengan sumber daya eksternal, seperti API, database, atau operasi apa pun yang membutuhkan waktu.
Tantangan
MudahMari buat pelacak portofolio saham yang mengelola harga saham dan menghitung nilai portofolio menggunakan method async! Kamu akan membuat class yang menyimulasikan pengambilan data saham waktu nyata dan menggabungkan beberapa operasi async untuk menghasilkan laporan.
Kamu akan mengatur kodemu ke dalam dua file:
portfolio.dart: Buat classStockPortfolioyang melacak saham dan jumlahnya. Class-mu harus memiliki:Map<String, int>privat bernama_holdingsyang menyimpan simbol saham dan jumlah saham yang dimiliki- Constructor yang menginisialisasi
_holdingssebagai map kosong - Method
addStock(String symbol, int quantity)yang menambahkan atau memperbarui kepemilikan saham (tidak async) - Method async
fetchPrice(String symbol)yang mengembalikanFuture<double>. Simulasikan jeda selama 50 milidetik, lalu kembalikan harga yang dihitung sebagai: panjang simbol dikalikan 25.5 - Method async
getStockValue(String symbol)yang mengembalikanFuture<double>. Method ini harus menunggufetchPriceuntuk simbol tersebut, mengalikannya dengan jumlah saham yang dimiliki, lalu mengembalikan nilai totalnya. Jika simbol tidak ada dalam holdings, kembalikan 0.0 - Method async
getTotalValue()yang mengembalikanFuture<double>. Method ini harus menghitung nilai gabungan semua holdings dengan menunggugetStockValueuntuk setiap saham dan menjumlahkan hasilnya - Method async
generateReport()yang mengembalikanFuture<String>. Method ini harus membuat laporan yang menampilkan nilai setiap saham dan nilai total. Format setiap baris sebagai[symbol]: $[value](nilai dengan 1 angka desimal), diikuti baris terakhirTotal: $[totalValue](juga dengan 1 angka desimal)
main.dart: Impor file portofoliomu dan tunjukkan cara method async bekerja sama di dalam sebuah class:- Buat instance
StockPortfolio - Tambahkan holdings berikut:
AAPLdengan 10 saham,GOOGLdengan 5 saham,MSFTdengan 8 saham - Cetak
Fetching portfolio data... - Tunggu dan cetak hasil
generateReport()
- Buat instance
Perhatikan bagaimana generateReport() memanggil method async lainnya dalam class yang sama, dan bagaimana setiap method dibangun berdasarkan method lainnya. Gunakan toStringAsFixed(1) untuk memformat nilai desimal!
Output yang diharapkan:
Fetching portfolio data...
AAPL: $1020.0
GOOGL: $637.5
MSFT: $816.0
Total: $2473.5Coba sendiri
import 'portfolio.dart';
void main() async {
// TODO: Buat instance StockPortfolio
// TODO: Tambahkan kepemilikan saham:
// - AAPL sebanyak 10 lembar saham
// - GOOGL sebanyak 5 lembar saham
// - MSFT sebanyak 8 lembar saham
// TODO: Cetak "Fetching portfolio data..."
// TODO: Tunggu dan cetak hasil generateReport()
}
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