Metode adalah fungsi yang memberikan perilaku pada objek, terbagi menjadi empat kategori: metode instans, overload operator, Getter/Setter, dan metode abstrak.
1. Instance methods Metode Instans
- Merupakan metode milik objek instans dari suatu kelas;
- Dapat mengakses variabel instans secara langsung dan menggunakan kata kunci
this; - Memiliki isi fungsi lengkap untuk menjalankan perhitungan bisnis dan operasi logika.
import 'dart:math';
class Point {
final double x;
final double y;
// Konstruktor untuk inisialisasi variabel instans
Point(this.x, this.y);
// Metode instans: hitung jarak dua titik
double distanceTo(Point other) {
var dx = x - other.x;
var dy = y - other.y;
return sqrt(dx * dx + dy * dy);
}
}
void main() {
Point p1 = Point(0, 0);
Point p2 = Point(3, 4);
print(p1.distanceTo(p2)); // Cetak 5.0
}Code language: JavaScript (javascript)
2. Operators Overload Operator
- Sebagian besar operator pada dasarnya adalah metode instans dengan nama khusus;
- Sintaks deklarasi:
operator Operator(parameter) TipeKembali { ... }; - Daftar operator yang bisa di-overload:
< > <= >= == ~- + / ~/ * %| ˆ & << >>> >>[]= [] - Operator bawaan tidak dapat di-overload (contoh:
!=, diimplementasikan otomatis Dart di lapisan bawah, tidak perlu definisi manual); - Saat melakukan overload
==, wajib menimpahashCodejuga, jika tidak pengecekan kesamaan akan bermasalah.
class Vector {
final int x, y;
Vector(this.x, this.y);
// Overload + untuk penjumlahan vektor
Vector operator +(Vector v) => Vector(x + v.x, y + v.y);
// Overload - untuk pengurangan vektor
Vector operator -(Vector v) => Vector(x - v.x, y - v.y);
// Overload == untuk pengecekan kesamaan
@override
bool operator ==(Object other) =>
other is Vector && x == other.x && y == other.y;
// Timpaan hashCode yang sepasang
@override
int get hashCode => Object.hash(x, y);
}
void main() {
final v = Vector(2, 3);
final w = Vector(2, 2);
assert(v + w == Vector(4, 5));
assert(v - w == Vector(0, 1));
print(v + w);
}Code language: JavaScript (javascript)
Dengan overload operator, kita bisa melakukan operasi +, -, == dan operasi angka lainnya pada dua objek Vector layaknya bilangan biasa.
3. Getters and setters Aksesor
get: metode hanya baca, untuk mengambil properti hasil hitung, tanpa parameter;set: metode tulis, untuk mengubah variabel terkait, hanya memiliki satu parameter;- Semua variabel instans memiliki getter implisit, variabel yang bisa diubah memiliki setter implisit tambahan;
- Kelebihan: nanti variabel biasa bisa diubah menjadi logika perhitungan tanpa mengubah kode pemanggil luar;
- Operator penambah/pengurang
++/--hanya memanggil getter satu kali dan menyimpan nilai untuk menghindari efek samping.
/// Persegi panjang sistem koordinat layar, titik asal (0,0) ada di sudut kiri atas
class Rectangle {
double left, top, width, height;
Rectangle(this.left, this.top, this.width, this.height);
// Getter: hitung batas kanan
double get right => left + width;
// Setter: tetapkan batas kanan dan perbarui left secara terbalik
set right(double value) => left = value - width;
// Getter: hitung batas bawah
double get bottom => top + height;
// Setter: tetapkan batas bawah dan perbarui top secara terbalik
set bottom(double value) => top = value - height;
}
void main() {
var rect = Rectangle(3, 4, 20, 15);
assert(rect.left == 3);
// Panggil setter
rect.right = 12;
assert(rect.left == -8);
print(rect.left); // -8
}Code language: JavaScript (javascript)
4. Abstract methods Metode Abstrak
- Hanya mendefinisikan antarmuka tanpa isi fungsi, tanda titik koma
;menggantikan implementasi; - Hanya bisa ditulis di dalam
abstract classkelas abstrak atau mixin; - Kelas turunan wajib menimpa dan mengimplementasikan semua metode abstrak, jika tidak kelas turunan juga harus ditandai sebagai
abstract.
// Kelas abstrak yang berisi metode abstrak
abstract class Doer {
// Metode abstrak: hanya deklarasi, tanpa implementasi
void doSomething();
}
// Kelas turunan biasa, wajib implementasi semua metode abstrak induk
class EffectiveDoer extends Doer {
@override
void doSomething() {
print("Jalankan logika bisnis spesifik");
}
}
void main() {
Doer worker = EffectiveDoer();
worker.doSomething(); // Cetak: Jalankan logika bisnis spesifik
}Code language: JavaScript (javascript)
Perbandingan
| Tipe Metode | Ciri Utama | Penanda Sintaks | Skenario Penggunaan |
|---|---|---|---|
| Metode Instans Instance | Akses variabel instans, isi logika lengkap | Deklarasi fungsi biasa | Perilaku umum objek (perhitungan, operasi bisnis) |
| Overload Operator Operator | Metode instans nama khusus, gunakan kata kunci operator | operator +() dll | Penjumlahan, pengurangan, indeks dan pengecekan kesamaan objek buatan sendiri |
| Getter/Setter | Baca/tulis properti; get tanpa parameter, set satu parameter | get / set | Enkapsulasi properti hasil hitung, satu pintu akses baca tulis luar |
| Metode Abstrak Abstract | Tanpa isi metode, hanya deklarasi antarmuka | Titik koma ; setelah signature metode | Tentukan spesifikasi di kelas induk abstrak, paksa implementasi di kelas turunan |
Previous: Primary Constructors (konstruktor utama)