C# - Nullables (Bahasa Indonesia)

Hai, para pemula pemrograman! Hari ini, kita akan mendalamkan dunia yang menarik dari Nullables di C#. Jangan khawatir jika Anda baru dalam pemrograman – saya akan menggulirkan konsep ini secara bertahap, sama seperti yang saya lakukan untuk ribuan murid selama tahun-tahun mengajar saya. Mari kita mulai perjalanan menarik ini bersama!

C# -  Nullables

Apa itu Nullables?

Bayangkan Anda mengisi sebuah formulir, dan ada kolom untuk nama tengah Anda. Tetapi apa jika Anda tidak memiliki nama tengah? Dalam dunia nyata, Anda hanya tinggalkannya kosong. Di C#, kita memiliki konsep yang sama disebut Nullables.

Nullables adalah fitur khusus di C# yang memungkinkan jenis nilai (seperti int, double, bool) memiliki state tambahan: null. Biasanya, jenis nilai tidak bisa null, tetapi Nullables memberikan fleksibilitas ini.

Sintaks Dasar

Untuk mendeklarasikan jenis Nullable, kita gunakan simbol ? setelah nama jenis. Ini contohnya:

int? nullableInt = null;
double? nullableDouble = 3.14;
bool? nullableBool = true;

Dalam kode ini:

  • nullableInt adalah integer yang bisa null, dan kita telah mensetnya ke null.
  • nullableDouble adalah double yang bisa null, tetapi kita memberinya nilai.
  • nullableBool adalah boolean yang bisa null, dan kita mensetnya ke true.

Memeriksa Null

Saat bekerja dengan Nullables, sangat penting untuk memeriksa jika mereka memiliki nilai sebelum menggunakannya. Kita bisa melakukan ini menggunakan properti HasValue:

int? maybeNumber = null;

if (maybeNumber.HasValue)
{
Console.WriteLine($"Nilai adalah: {maybeNumber.Value}");
}
else
{
Console.WriteLine("Nilai adalah null");
}

Kode ini memeriksa jika maybeNumber memiliki nilai. Jika ya, kita cetak nilai; jika tidak, kita katakan itu null.

Menggunakan Nilai Nullable

Untuk menggunakan nilai dari Nullable, kita bisa mengakses properti Value nya. Namun, kita harus hati-hati! Jika kita mencoba mengakses Value dari Nullable yang null, kita akan mendapat pengecualian. Ini adalah cara aman untuk melakukannya:

int? possibleAge = 25;

int actualAge = possibleAge ?? 0;

Console.WriteLine($"Umur: {actualAge}");

Dalam contoh ini, jika possibleAge null, actualAge akan diatur ke 0. Hal ini membawa kita ke topik berikutnya...

Operator Null Coalescing (??)

Operator null coalescing (??) adalah seperti seorang penjaga yang ramah yang membantu kita menangani nilai null yang potensial. Itu adalah cara singkat untuk mengatakan "Gunakan nilai ini jika bukan null, jika tidak gunakan nilai cadangan ini."

Penggunaan Dasar

Berikut cara kita menggunakan operator null coalescing:

string name = null;
string displayName = name ?? "Guest";

Console.WriteLine($"Selamat datang, {displayName}!");

Dalam kode ini, jika name null (yang benar), displayName akan diatur ke "Guest". Itu adalah cara singkat untuk menyediakan nilai default.

Menyusun Operator Null Coalescing

Kita bisa menyusun beberapa operator ?? untuk memeriksa nilai potensial yang berbeda:

string firstName = null;
string middleName = null;
string lastName = "Smith";

string fullName = firstName ?? middleName ?? lastName ?? "Unknown";

Console.WriteLine($"Nama lengkap: {fullName}");

Kode ini akan menggunakan nilai pertama yang bukan null, atau "Unknown" jika semua null.

Null Coalescing dengan Pemanggilan Method

Operator ?? juga bisa digunakan dengan pemanggilan method:

public string GetUserName()
{
// Bayangkan method ini mungkin mengembalikan null
return null;
}

string userName = GetUserName() ?? "DefaultUser";
Console.WriteLine($"Pengguna: {userName}");

Hal ini sangat berguna saat berurusan dengan method yang mungkin mengembalikan null.

Contoh Praktis

Marilah kita lihat beberapa contoh dunia nyata di mana Nullables dan operator null coalescing sangat berguna:

Contoh 1: Input Pengguna

Console.Write("Masukkan umur Anda (atau tekan Enter untuk melewatkan): ");
string input = Console.ReadLine();

int? age = string.IsNullOrEmpty(input) ? null : int.Parse(input);

string message = age.HasValue
? $"Anda berusia {age.Value} tahun."
: "Umur tidak disediakan.";

Console.WriteLine(message);

Kode ini memungkinkan pengguna memasukkan umur mereka atau melewatkan pertanyaan. Kita menggunakan Nullable int untuk merepresentasikan umur, yang mungkin atau mungkin tidak disediakan.

Contoh 2: Query Database

Bayangkan kita mencari informasi pengguna dari database:

public class User
{
public string Name { get; set; }
public int? Age { get; set; }
}

User user = GetUserFromDatabase(); // Misalkan method ini ada

string ageDisplay = user.Age.HasValue
? $"{user.Age.Value} tahun"
: "Umur tak diketahui";

Console.WriteLine($"Pengguna: {user.Name ?? "Anonim"}, {ageDisplay}");

Dalam contoh ini, kita menggunakan Nullables untuk menangani kemungkinan bahwa umur pengguna mungkin tidak ada dalam database, dan kita menggunakan operator null coalescing untuk menyediakan nama default jika itu tidak tersedia.

Kesimpulan

Nullables dan operator null coalescing adalah alat yang kuat di C# yang membantu kita menulis kode yang lebih kuat dan fleksibel. Mereka memungkinkan kita untuk menangani situasi di mana data mungkin hilang, membuat program kita lebih kokoh dan ramah pengguna.

Ingat, pemrograman adalah seperti memasak – itu memerlukan latihan untuk benar. Jangan takut untuk mencoba konsep ini dalam proyek Anda sendiri. Sebelum Anda tahu, Anda akan menggunakan Nullables dan ?? seperti seorang ahli!

Tetap kode, tetap belajar, dan terutama, bersenang-senang dalam perjalanan pemrograman Anda!

Metode/Operator Deskripsi Contoh
? (Deklarasi jenis Nullable) Mendeklarasikan jenis nilai sebagai nullable int? nullableInt = null;
HasValue Memeriksa jika nullable memiliki nilai if (nullableInt.HasValue) { ... }
Value Mengakses nilai dari nullable int value = nullableInt.Value;
?? (Operator null coalescing) Menyediakan nilai default untuk null int result = nullableInt ?? 0;
GetValueOrDefault() Mengembalikan nilai atau default jika null int value = nullableInt.GetValueOrDefault();
GetValueOrDefault(T defaultValue) Mengembalikan nilai atau default tertentu jika null int value = nullableInt.GetValueOrDefault(10);

Credits: Image by storyset