Menu
CoddyTech

Pengantar Keamanan Null

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

Salah satu sumber bug yang paling umum dalam pemrograman adalah mencoba menggunakan nilai yang tidak ada. Di Dart, “ketiadaan nilai” khusus ini direpresentasikan oleh null. Fitur null safety di Dart membantumu menemukan error ini sebelum kodemu dijalankan.

Tanpa null safety, variabel apa pun berpotensi bernilai null, sehingga dapat menyebabkan program crash saat runtime ketika kamu mencoba menggunakannya:

// Di Dart versi lama (tanpa keamanan null)
String name;  // Bisa bernilai null!
print(name.length);  // Programmu akan berhenti jika name bernilai null

Dengan null safety yang diaktifkan (Dart 2.12+), compiler membedakan variabel yang dapat menampung null dan variabel yang tidak dapat menampungnya. Secara default, variabel bersifat non-nullable, variabel tersebut harus selalu berisi nilai yang valid:

String name = 'Alice';  // Harus memiliki nilai
print(name.length);     // Aman, name tidak pernah null

Compiler akan menolak untuk mengompilasi kode yang variabel non-nullable-nya mungkin bernilai null. Ini memindahkan deteksi error dari waktu runtime ke waktu kompilasi, sehingga programmu lebih andal. Dalam pelajaran berikutnya, kamu akan belajar cara mendeklarasikan tipe nullable saat memang membutuhkannya, serta operator yang disediakan Dart untuk bekerja dengan aman menggunakan nilai yang berpotensi null.

challenge icon

Tantangan

Mudah

Mari kita buat sistem kartu kontak sederhana yang menunjukkan pentingnya variabel non-nullable. Kamu akan membuat sistem yang mewajibkan setiap kontak memiliki informasi valid yang terjamin.

Kamu akan mengatur kodemu ke dalam dua file:

  • contact.dart: Definisikan class Contact yang merepresentasikan informasi kontak seseorang. Karena kita menggunakan null safety, setiap field harus memiliki nilai yang valid, tidak boleh ada data yang hilang! Class-mu harus memiliki:
    • String firstName untuk nama depan kontak
    • String lastName untuk nama belakang kontak
    • String email untuk alamat email kontak
    • int phoneDigits untuk jumlah digit dalam nomor teleponnya
    • Sebuah constructor yang menerima keempat nilai
    • Sebuah getter fullName yang mengembalikan gabungan nama depan dan nama belakang dengan spasi di antaranya
    • Method displayCard() yang mencetak informasi kontak
  • main.dart: Impor class kontakmu dan buat dua kontak untuk menunjukkan bahwa semua field dijamin memiliki nilai:
    • Buat kontak dengan nama depan 'Emma', nama belakang 'Wilson', email 'emma@mail.com', dan jumlah digit telepon 10
    • Buat kontak dengan nama depan 'James', nama belakang 'Brown', email 'james@work.com', dan jumlah digit telepon 11
    • Panggil displayCard() pada setiap kontak sesuai urutan di atas

Method displayCard() harus mencetak dengan format persis seperti ini:

--- Contact Card ---
Name: [fullName]
Email: [email]
Phone digits: [phoneDigits]

Perhatikan bahwa setiap variabel harus diinisialisasi dengan nilai yang nyata. Inilah null safety! Compiler menjamin bahwa saat kamu mengakses fullName, email, atau field lainnya, nilainya akan selalu valid.

Output yang diharapkan:

--- Contact Card ---
Name: Emma Wilson
Email: emma@mail.com
Phone digits: 10
--- Contact Card ---
Name: James Brown
Email: james@work.com
Phone digits: 11

Coba sendiri

import 'contact.dart';

void main() {
  // TODO: Buat kontak pertama dengan:
  // - nama depan: 'Emma'
  // - nama belakang: 'Wilson'
  // - email: 'emma@mail.com'
  // - jumlah digit nomor telepon: 10

  // TODO: Buat kontak kedua dengan:
  // - nama depan: 'James'
  // - nama belakang: 'Brown'
  // - email: 'james@work.com'
  // - jumlah digit nomor telepon: 11

  // TODO: Panggil displayCard() pada setiap kontak secara berurutan
}
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