Pola dan Pencocokan (3.0)
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 87 dari 110.
Dart 3 memperkenalkan pencocokan pola, cara ampuh untuk menguraikan dan memeriksa data dalam satu ekspresi. Pola memungkinkan kamu mengambil nilai dari object, memeriksa strukturnya, dan mengikat variabel, semuanya sekaligus.
Kamu sudah melihat destructuring dasar dengan record. Pattern memperluas ini agar bisa digunakan dengan object, list, dan map:
void main() {
// Pola list
var numbers = [1, 2, 3];
var [a, b, c] = numbers;
print('$a, $b, $c'); // 1, 2, 3
// Pola map
var user = {'name': 'Alice', 'age': 30};
var {'name': name, 'age': age} = user;
print('$name is $age'); // Alice berusia 30
}Pola menjadi sangat ampuh dalam ekspresi switch. Kamu dapat mencocokkan tipe, nilai, dan struktur secara bersamaan:
String describe(Object obj) {
return switch (obj) {
int n when n < 0 => 'Negative number',
int n => 'Positive number: $n',
String s => 'String of length ${s.length}',
[int first, ...] => 'List starting with $first',
_ => 'Something else',
};
}
void main() {
print(describe(-5)); // Bilangan negatif
print(describe(42)); // Bilangan positif: 42
print(describe([1, 2, 3])); // List yang diawali dengan 1
}Klausa when menambahkan kondisi pada pola, dan ... mencocokkan elemen yang tersisa dalam list. Garis bawah _ berfungsi sebagai wildcard yang cocok dengan apa pun. Jika digabungkan dengan sealed class, pola memungkinkan penanganan struktur data kompleks yang menyeluruh dan aman dari segi tipe.
Tantangan
MudahMari buat classifier data yang menggunakan pencocokan pola untuk menganalisis dan mengategorikan berbagai jenis input! Kamu akan membuat sistem yang dapat mengidentifikasi dan mendeskripsikan berbagai struktur data menggunakan fitur pencocokan pola yang andal di Dart 3.
Kamu akan mengatur kodemu ke dalam dua file:
classifier.dart: Buat fungsi bernamaclassifyyang menerima parameterObjectdan mengembalikan deskripsiString. Gunakan ekspresi switch dengan pencocokan pola untuk menangani kasus-kasus berikut:- list kosong
[]harus mengembalikanEmpty list - list dengan tepat satu elemen integer harus mengembalikan
Single item: [value] - list dengan tepat dua elemen harus mengembalikan
Pair: [first] and [second] - list yang diawali integer dan diikuti elemen lainnya harus mengembalikan
List starting with [first], length: [total length](gunakan pola sisa...) - map yang berisi kedua kunci
'name'dan'age'harus mengembalikan[name] is [age] years old(gunakan destrukturisasi pola map) - integer negatif (gunakan klausa
when) harus mengembalikanNegative: [value] - integer bernilai nol harus mengembalikan
Zero - integer lainnya harus mengembalikan
Positive: [value] - nilai lainnya harus mengembalikan
Unknown type
- list kosong
main.dart: Impor classifier-mu dan tunjukkan pencocokan pola dengan berbagai input. Cetak hasil klasifikasi untuk setiap nilai berikut:- list kosong
[] - list dengan satu elemen:
[42] - list dengan dua elemen:
['hello', 'world'] - list yang lebih panjang:
[1, 2, 3, 4, 5] - map:
{'name': 'Alice', 'age': 25} - integer
-10 - integer
0 - integer
99
- list kosong
Tantangan ini menggabungkan pola list, pola map, klausa when untuk penjaga, dan pola sisa (...), semua fitur utama pencocokan pola dari pelajaran ini!
Output yang diharapkan:
Empty list
Single item: 42
Pair: hello and world
List starting with 1, length: 5
Alice is 25 years old
Negative: -10
Zero
Positive: 99Coba sendiri
import 'classifier.dart';
void main() {
// TODO: Gunakan fungsi classify untuk mengelompokkan setiap nilai
// dan cetak hasilnya
// Uji dengan list kosong
print(classify([]));
// TODO: Uji dengan list berisi satu elemen: [42]
// TODO: Uji dengan list berisi dua elemen: ['hello', 'world']
// TODO: Uji dengan list yang lebih panjang: [1, 2, 3, 4, 5]
// TODO: Uji dengan map: {'name': 'Alice', 'age': 25}
// TODO: Uji dengan bilangan bulat -10
// TODO: Uji dengan bilangan bulat 0
// TODO: Uji dengan bilangan bulat 99
}
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 Generik13Konsep OOP Lanjutan
Komposisi vs PewarisanExtension methodClass yang Dapat DipanggilSealed class (Dart 3)Records (Dart 3)Pola dan Pencocokan (3.0)Enum dengan method2Konstruktor 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