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
Keterbacaan yang Lebih Baik: Argumen named meningkatkan keterbacaan kode karena kita dapat melihat dengan jelas parameter mana yang diberikan nilai tertentu.
Urutan Tidak Penting: Kita tidak perlu khawatir tentang urutan argumen saat memanggil fungsi, sehingga mengurangi potensi kesalahan.
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.