Memahami Argumen Positional vs Named di Dart

Friday, 31 May 2024 5 read minutes

Cover Article
Photo by Greg Bulla

Dart adalah bahasa pemrograman modern yang menawarkan berbagai fitur untuk memudahkan pengembangan perangkat lunak, salah satunya adalah penggunaan argumen positional dan named. Kali ini kita akan membahas perbedaan antara argumen positional dan named dalam Dart, serta memberikan contoh penggunaannya dengan lebih detail. Perlu dicatat bahwa beberapa fitur yang akan dibahas, seperti record dan destructuring, memerlukan Dart versi 3 ke atas.

Argumen Positional

Argumen positional adalah argumen yang diidentifikasi berdasarkan posisinya dalam daftar argumen. Posisi argumen dalam panggilan fungsi menentukan nilai mana yang diberikan ke parameter mana.

void main() {
  printPerson('Doni', 24, 162);
}

void printPerson(String name, int age, int height) {
  print('Name: $name, Age: $age, Height: $height');
}

Dalam contoh di atas, printPerson adalah sebuah fungsi yang menerima tiga argumen positional: name, age, dan height. Saat memanggil fungsi ini, kita memberikan nilai-nilai tersebut dalam urutan yang sesuai.

Argumen Named

Argumen named adalah argumen yang diidentifikasi berdasarkan nama parameter mereka. Ini memungkinkan kita untuk menentukan nilai parameter dalam panggilan fungsi dengan menggunakan nama parameter tersebut, yang membuat kode lebih mudah dibaca dan dipahami.

void main() {
  printPerson(name: 'Doni', age: 24, height: 162);
}

void printPerson({String name, int age, int height}) {
  print('Name: $name, Age: $age, Height: $height');
}

Dalam contoh ini, printPerson menggunakan argumen named. Saat memanggil fungsi ini, kita menentukan nilai parameter dengan menggunakan nama parameter tersebut, sehingga urutan argumen tidak lagi penting.

Menggunakan Named Arguments pada Record

Dart juga mendukung penggunaan argumen named dalam record. Record adalah tipe data yang memungkinkan kita untuk mengelompokkan beberapa nilai menjadi satu kesatuan. Dalam Dart, kita bisa menggunakan argumen positional maupun named untuk mendefinisikan record. Fitur ini memerlukan Dart versi 3 ke atas.

void main() {
  Map<String, dynamic> json = {
    'name': 'Doni',
    'age': 24,
    'height': 162
  };

  var person = getPerson(json);
  print(person.name); // 'Doni'
  print(person.age); // 24
  print(person.height); // 162

  // Menggunakan destructuring
  final (:name, :age, :height) = getPerson(json);
  print(name); // 'Doni'
  print(age); // 24
  print(height); // 162
}

({String name, int age, int height}) getPerson(Map<String, dynamic> json) {
  return (
    name: json['name'],
    age: json['age'],
    height: json['height'],
  );
}

Dalam contoh ini, getPerson mengembalikan record dengan argumen named. Kita dapat mengakses nilai-nilai dalam record tersebut menggunakan nama parameter.

Destructuring pada Dart

Dart mendukung destructuring, yang memungkinkan kita untuk mengekstrak nilai-nilai dari sebuah record dan menetapkannya ke variabel-variabel individual. Destructuring membuat kode lebih bersih dan lebih mudah dibaca. Fitur ini juga memerlukan Dart versi 3 ke atas.

void main() {
  Map<String, dynamic> json = {
    'name': 'Doni',
    'age': 24,
    'height': 162
  };

  final (:name, :age, :height) = getPerson(json);
  print(name); // 'Doni'
  print(age); // 24
  print(height); // 162
}

({String name, int age, int height}) getPerson(Map<String, dynamic> json) {
  return (
    name: json['name'],
    age: json['age'],
    height: json['height'],
  );
}

Dengan destructuring, kita dapat langsung mengekstrak nilai-nilai dari record getPerson dan menetapkannya ke variabel name, age, dan height.

Keuntungan Menggunakan Named Arguments

  1. Keterbacaan yang Lebih Baik: Argumen named meningkatkan keterbacaan kode karena kita dapat melihat dengan jelas parameter mana yang diberikan nilai tertentu.

  2. Urutan Tidak Penting: Kita tidak perlu khawatir tentang urutan argumen saat memanggil fungsi, sehingga mengurangi potensi kesalahan.

  3. Dokumentasi yang Jelas: Penggunaan nama parameter berfungsi sebagai dokumentasi langsung tentang apa yang dilakukan fungsi tersebut.

Kombinasi Positional dan Named Arguments

Dart memungkinkan penggunaan kombinasi argumen positional dan named dalam satu fungsi. Ini berguna ketika kita memiliki parameter yang wajib (positional) dan parameter opsional (named).

void main() {
  printPerson('Doni', age: 24, height: 162);
}

void printPerson(String name, {int age, int height}) {
  print('Name: $name, Age: $age, Height: $height');
}

Dalam contoh ini, name adalah argumen positional yang wajib, sedangkan age dan height adalah argumen named yang opsional. Kita dapat memanggil fungsi ini dengan memberikan nilai untuk name sebagai argumen positional, dan memberikan nilai untuk age dan height sebagai argumen named.

Penanganan Default Values dalam Named Arguments

Dart juga memungkinkan kita untuk menetapkan nilai default untuk argumen named. Ini berguna ketika kita ingin memastikan bahwa argumen memiliki nilai tertentu jika tidak diberikan oleh pemanggil fungsi.

void main() {
  printPerson('Doni');
}

void printPerson(String name, {int age = 24, int height = 162}) {
  print('Name: $name, Age: $age, Height: $height');
}

Dalam contoh ini, age dan height memiliki nilai default masing-masing 24 dan 162. Jika kita memanggil printPerson tanpa memberikan nilai untuk age dan height, nilai default tersebut akan digunakan.

Menggunakan Required Named Arguments

Dalam Dart, kita dapat menandai argumen named sebagai required. Ini berarti pemanggil fungsi harus memberikan nilai untuk argumen tersebut, dan jika tidak, akan terjadi kesalahan kompilasi.

void main() {
  printPerson(name: 'Doni', age: 24, height: 162);
}

void printPerson({required String name, required int age, required int height}) {
  print('Name: $name, Age: $age, Height: $height');
}

Dalam contoh ini, name, age, dan height adalah argumen named yang wajib. Jika kita mencoba memanggil printPerson tanpa memberikan nilai untuk salah satu dari argumen tersebut, maka Dart akan menghasilkan kesalahan kompilasi.

Oke, jadi itu tadi ya tentang argumen positional dan named yang bisa digunakan pada Dart. Argumen positional dan named dalam Dart akan menawarkan fleksibilitas dan keterbacaan yang lebih baik dalam penulisan fungsi. Dengan penggunaan yang tepat, kita dapat menulis kode yang lebih jelas, terstruktur, dan mudah dipahami. Penggunaan record dengan named arguments dan destructuring lebih lanjut meningkatkan efisiensi dan keterbacaan kode. Memanfaatkan fitur-fitur ini adalah langkah penting untuk menjadi programmer Dart yang lebih efektif, terutama dengan kemampuan baru yang tersedia dalam Dart versi 3 ke atas.

section icon
section title icon recents articles
Latest Articles just for you

Stay updated with the latest articles crafted to enhance your knowledge.
Discover new insights and stay ahead with our recent content.

Card image cap
Mengenal Artificial Intelligence untuk Pemula dalam Kehidupan Sehari-hari
Monday, 25 November 2024

Artificial Intelligence (AI) atau kecerdasan buatan adalah cabang ilmu komputer yang bertujuan untuk menciptakan sistem atau mesin yang dapat berpikir dan bertindak seperti manusia. AI digunakan di berbagai aspek kehidupan kita, mulai dari asisten vi

Read more
Card image cap
Panduan Lengkap Menggunakan json_serializable dan json_annotation untuk Model yang Rapi di Flutter
Tuesday, 29 October 2024

Dalam pengembangan aplikasi Flutter, sering kali kita perlu mengonversi data dari JSON ke objek Dart atau sebaliknya. Ini terutama umum dalam aplikasi yang mengambil data dari API atau menyimpan data secara lokal dalam format JSON. Untuk mempermudah ...

Read more
Card image cap
Pengenalan Widget dan Lifecycle dalam Flutter
Thursday, 17 October 2024

Widget adalah komponen dasar yang digunakan dalam Flutter untuk membangun antarmuka pengguna (UI). Hampir semua elemen visual di aplikasi Flutter merupakan widget, mulai dari teks, tombol, hingga tata letak seperti baris dan kolom. Dalam pengembangan...

Read more
Card image cap
Panduan Pemula untuk Membuat Aplikasi Pertama dengan Flutter
Saturday, 12 October 2024

Setelah menyiapkan Flutter SDK di sistem kamu, penting untuk memahami bagaimana struktur proyek Flutter diatur dan bagaimana cara menjalankan aplikasi kamu di berbagai lingkungan pengembangan. Pada artikel kali ini kita akan menjelaskan secara mendal...

Read more