Menu
CoddyTech

Operator ? dan !

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Dart di Coddy. Pelajaran 25 dari 110.

Saat bekerja dengan tipe nullable, Dart menyediakan dua operator penting untuk mengakses nilai dengan aman. Operator akses yang memperhatikan null ?. dan operator penegasan null ! memberimu kendali atas cara menangani nilai yang mungkin null.

Operator ?. mengakses property atau method dengan aman pada nilai yang bisa bernilai null. Jika nilainya null, seluruh ekspresi mengembalikan null alih-alih menyebabkan program crash:

String? name = 'Alice';
print(name?.length);  // 5

name = null;
print(name?.length);  // null (tidak terjadi crash!)

Operator ! memberi tahu Dart, "Saya yakin nilai ini tidak null." Operator ini mengubah tipe yang nullable menjadi non-nullable, tetapi memunculkan error jika nilainya ternyata null:

String? maybeName = 'Bob';
String definite = maybeName!;  // OK, kita menegaskan bahwa nilainya bukan null
print(definite.length);  // 3

String? empty = null;
// String crash = empty!;  // error saat dijalankan! Nilainya null

Gunakan ?. saat kamu ingin menangani nilai null dengan baik. Gunakan ! hanya saat kamu benar-benar yakin suatu nilai ada, mungkin setelah memeriksanya dengan pernyataan if atau saat kamu tahu logikanya menjamin adanya nilai. Penggunaan ! secara berlebihan menggagalkan tujuan keamanan null dan dapat menyebabkan crash saat runtime.

challenge icon

Tantangan

Mudah

Mari kita buat sistem inventaris produk yang menunjukkan cara menggunakan nilai nullable dengan aman menggunakan operator ?. dan !.

Kamu akan membuat dua file untuk menata kodemu:

  • product.dart: Definisikan class Product yang merepresentasikan item dalam inventaris. Beberapa produk memiliki informasi lengkap, sementara produk lainnya masih dalam proses pencatatan. Class-mu harus memiliki:
    • String name yang non-nullable, setiap produk harus memiliki nama
    • double price yang non-nullable, setiap produk harus memiliki harga
    • String? description yang nullable, beberapa produk belum memiliki deskripsi
    • String? category yang nullable, beberapa produk belum dikategorikan
    • Constructor yang menerima name dan price sebagai parameter wajib
    • Method getDescriptionLength() yang mengembalikan panjang deskripsi menggunakan ?., atau null jika tidak ada deskripsi
    • Method getCategoryUppercase() yang mengembalikan kategori dalam huruf kapital menggunakan !. Method ini mengasumsikan kategori sudah ditetapkan
    • Method displayProduct() yang mencetak informasi produk, menampilkan No description saat description bernilai null dan Uncategorized saat category bernilai null
  • main.dart: Impor class produkmu dan tunjukkan cara menggunakan kedua operator:
    • Buat produk bernama 'Laptop' dengan harga 999.99, lalu tetapkan deskripsinya menjadi 'High-performance computing device' dan kategorinya menjadi 'Electronics'
    • Buat produk bernama 'Mystery Item' dengan harga 49.99 (biarkan description dan category bernilai null)
    • Untuk Laptop: panggil displayProduct(), cetak Description length: [length] menggunakan getDescriptionLength(), dan cetak Category: [uppercase] menggunakan getCategoryUppercase()
    • Untuk Mystery Item: panggil displayProduct() dan cetak Description length: [length] menggunakan getDescriptionLength() (hasilnya akan menampilkan null)

Method displayProduct() harus mencetak dengan format berikut:

Product: [name] - $[price]
Description: [description or "No description"]
Category: [category or "Uncategorized"]

Output yang diharapkan:

Product: Laptop - $999.99
Description: High-performance computing device
Category: Electronics
Description length: 32
Category: ELECTRONICS
Product: Mystery Item - $49.99
Description: No description
Category: Uncategorized
Description length: null

Coba sendiri

import 'product.dart';

void main() {
  // TODO: Buat produk bernama 'Laptop' dengan harga 999.99
  // Lalu atur deskripsinya menjadi 'High-performance computing device'
  // Dan atur kategorinya menjadi 'Electronics'
  
  // TODO: Buat produk bernama 'Mystery Item' dengan harga 49.99
  // Biarkan deskripsi dan kategorinya bernilai null
  
  // TODO: Untuk Laptop:
  // - Panggil displayProduct()
  // - Cetak "Description length: [length]" menggunakan getDescriptionLength()
  // - Cetak "Category: [uppercase]" menggunakan getCategoryUppercase()
  
  // TODO: Untuk Mystery Item:
  // - Panggil displayProduct()
  // - Cetak "Description length: [length]" menggunakan getDescriptionLength()
}
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