Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Mari 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 bernama classify yang menerima parameter Object dan mengembalikan deskripsi String. Gunakan ekspresi switch dengan pencocokan pola untuk menangani kasus-kasus berikut:
    • list kosong [] harus mengembalikan Empty 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 mengembalikan Negative: [value]
    • integer bernilai nol harus mengembalikan Zero
    • integer lainnya harus mengembalikan Positive: [value]
    • nilai lainnya harus mengembalikan Unknown type
  • 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

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: 99

Coba 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
}
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