Ringkasan tiga operator (as /is/is!)
| Operator | Keterangan fungsi |
|---|---|
as | Konversi tipe paksa; juga digunakan untuk memberikan alias pustaka |
is | Pemeriksaan tipe: mengembalikan true jika objek termasuk tipe yang ditentukan |
is! | Pemeriksaan tipe: mengembalikan true jika objek bukan tipe yang ditentukan |
Syarat agar obj is T bernilai benar: objek obj mengimplementasikan atau mewarisi tipe T (termasuk kelas induk, antarmuka dan tipe nullable).
Contoh: Objek apapun is Object? selalu bernilai true.
Operator is
Pemeriksaan tipe yang aman
Memeriksa tipe objek saat runtime; jika hasilnya true, di dalam blok kode Anda bisa langsung gunakan objek sebagai tipe tersebut tanpa konversi manual. Jika objek bernilai null atau tipe tidak cocok, akan mengembalikan false tanpa memunculkan pengecualian.
Contoh di bawah menggunakan objek kelas. Jika Anda belum mempelajari kelas, anggap saja kelas sebagai cetakan untuk membuat data.
class Person {
String firstName = '';
}
class Employee extends Person {}
void main() {
dynamic employee = Employee();
// Pemeriksaan tipe dengan is
if (employee is Person) {
// Setelah masuk cabang, employee otomatis dikenali sebagai tipe Person
employee.firstName = "Jack";
print(employee.firstName); // Menampilkan Jack
}
dynamic emptyObj = null;
if (emptyObj is Person) {
// Tidak akan dijalankan, null tidak cocok dengan Person
print("Cocok");
}
}Code language: Dart (dart)
Kode di atas mendefinisikan kelas Person lalu kelas Employee yang mewarisi Person.
Dalam kode, is dipakai untuk cek apakah objek bertipe Person. Jika benar, Anda bisa pakai langsung sebagai Person di dalam blok {}. Hal ini karena kita menggunakan tipe dinamis pada dynamic employee = Employee();.
Pada contoh kedua dynamic emptyObj = null;, nilainya null sehingga emptyObj is Person bernilai false dan kode di dalam {} tidak dijalankan.
Operator is!
Pemeriksaan tipe terbalik
Sintaks:
variabel is! tipe
Sebenarnya sama dengan hasil operator is yang dinegasikan.
Sama dengan !(variabel is tipe), berfungsi mengecek bahwa objek bukan tipe target.
Lihat contoh berikut:
class Person {
String name = '';
}
void main() {
dynamic obj = "teks";
if (obj is! Person) {
print("obj bukan tipe Person");
}
}Code language: Dart (dart)
Contoh di atas akan menjalankan kode di blok dan mencetak “obj bukan tipe Person”, karena obj bukan instance yang dibuat dari cetakan Person.
Operator as
Konversi tipe paksa
Cara pakai:
(variabel as tipeTarget).properti/methodCode language: JavaScript (javascript)
Gunakan hanya jika Anda 100% yakin objek tersebut adalah tipe target, jika tidak akan muncul pengecualian runtime. Demi ketahanan program, tidak disarankan pakai secara berlebihan.
class Teacher {
String name = '';
}
void main() {
dynamic jason = Teacher();
// Paksa ubah ke Teacher untuk akses properti
(jason as Teacher).name = "Jason";
print((jason as Teacher).name); // Jason
}Code language: Dart (dart)
Hasil output contoh di atas adalah Jason
Kita langsung buat objek Teacher dengan dynamic jason = Teacher();, jadi bisa jamin 100% bahwa ia tipe Teacher sehingga tidak ada error saat pakai cara ini.

Jika tulis kode seperti di bawah, akan muncul error.
class Teacher {
String name = '';
}
class Car {
String name = '';
}
void main() {
dynamic jason = Teacher();
// Paksa ubah ke Car untuk akses properti
(jason as Car).name = "Jason";//❌error
print((jason as Car).name); //❌error
}Code language: Dart (dart)
Error muncul karena jason awalnya objek tipe Teacher tapi kita paksa konversi ke tipe Car.
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Unhandled exception:
type 'Teacher' is not a subtype of type 'Car' in type cast
#0 main (file:///D:/dartdemo/firstdart/bin/firstdart.dart:12:10)
#1 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:314:19)
#2 _RawReceivePort._handleMessage (dart:isolate-patch/isolate-patch.dart:193:12)Code language: PHP (php)
Perbandingan inti as dan is
// Cara 1: Konversi paksa pakai as
(employee as Person).firstName = 'Bob';
// Cara 2: Cek dulu pakai is baru pakai objek
if (employee is Person) {
employee.firstName = 'Bob';
}Code language: JavaScript (javascript)
Perilaku ketika employee bernilai null atau bukan tipe Person:
- Versi as: Akan memunculkan pengecualian
CastErrordan program berhenti; - Versi is: Tidak masuk cabang if, tidak ada error dan tidak menjalankan apapun.
Meskipun kodenya sedikit lebih panjang, prioritaskan pakai metode is agar program lebih tangguh.
Kegunaan kedua as
Kegunaan kedua as
as tidak hanya untuk konversi tipe: saat import pustaka bisa dipakai untuk memberi alias pustaka
import 'dart:math' as math;
void main() {
// Panggil kelas/method melalui alias pustaka
print(math.pi); // Menampilkan 3.141592653589793
}Code language: JavaScript (javascript)
Contoh lengkap akhir
class Animal {}
class Cat extends Animal {}
void main() {
dynamic obj = Cat();
// 1. Cek dengan is
if (obj is Animal) {
print("obj bertipe Animal");
}
// 2. Cek terbalik pakai is!
if (obj is! String) {
print("obj bukan string");
}
// 3. Konversi paksa pakai as
Animal a = obj as Animal;
// Contoh salah yang menyebabkan program crash
dynamic str = "hello";
// Animal error = str as Animal; // Memunculkan CastError
}Code language: JavaScript (javascript)