Operator Null-Conditional
Akses aman dengan ?.
Operator Null-Conditional adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.
Masalah Rangkaian Nilai Kosong
Mengakses anggota pada referensi yang tidak memiliki nilai akan melempar NullReferenceException. Ini merupakan salah satu kerusakan saat program berjalan yang paling umum dalam C#.
Saat Anda merangkai pemanggilan seperti user.Address.City, bagian mana pun dalam rangkaian tersebut mungkin tidak memiliki nilai, dan solusi lama adalah menumpuk pemeriksaan if.
Mengenal ?.
Operator kondisional untuk nilai kosong ?. menghentikan evaluasi seluruh ekspresi lebih awal. Jika sisi kirinya tidak memiliki nilai, hasilnya juga tidak memiliki nilai, bukan berupa pengecualian.
Operator ini dapat dibaca sebagai: "akses anggota ini, tetapi hanya jika objeknya memiliki nilai."
string name = null;
int? length = name?.Length;
System.Console.WriteLine(length == null);Hasilnya Dapat Menyimpan Nilai Kosong
Karena ?. dapat menghasilkan nilai kosong, jenis hasilnya juga dapat menyimpan nilai kosong. name?.Length berjenis int?, bukan int.
Itulah sebabnya Anda menyimpannya dalam int?, bukan dalam int biasa.
string text = "hello";
int? len = text?.Length;
System.Console.WriteLine(len);Demo yang Dapat Dijalankan
Program ini menunjukkan bahwa ?. mengembalikan nilai ketika objeknya ada, dan null ketika objeknya tidak ada.
Jalankan program ini dan perhatikan bahwa tidak ada pengecualian yang pernah dilemparkan.
using System;
class Program
{
static void Main()
{
string a = "world";
string b = null;
Console.WriteLine(a?.ToUpper());
Console.WriteLine(b?.ToUpper() ?? "(null)");
}
}Merangkai Beberapa ?.
Anda dapat merangkai ?. pada beberapa anggota. Begitu salah satu bagiannya tidak memiliki nilai, seluruh rangkaian berhenti dan mengembalikan null.
Jadi, customer?.Order?.Total tetap aman meskipun customer atau Order tidak memiliki nilai.
string s = null;
int? upperLen = s?.ToUpper()?.Length;
System.Console.WriteLine(upperLen == null);Pengindeks Kondisional untuk Nilai Kosong ?[]
Tersedia bentuk pengindeks, yaitu ?[], untuk larik dan daftar. Jika koleksinya tidak memiliki nilai, akses indeks mengembalikan null dan tidak menyebabkan program gagal.
Perhatikan: bentuk ini melindungi koleksi yang tidak memiliki nilai, bukan indeks yang berada di luar rentang.
int[] data = null;
int? first = data?[0];
System.Console.WriteLine(first == null);Memanggil Metode dengan Aman
?. juga melindungi pemanggilan metode. list?.Clear() memanggil Clear hanya jika list memiliki nilai; jika tidak, tidak ada tindakan yang dilakukan.
Untuk metode yang mengembalikan void, seluruh pernyataan cukup tidak melakukan apa-apa saat nilainya kosong.
System.Collections.Generic.List<int> list = null;
list?.Add(5);
System.Console.WriteLine("No crash");Menaikkan Peristiwa dengan Aman untuk Utas
Salah satu penggunaan klasiknya adalah menaikkan peristiwa. SomeEvent?.Invoke(this, args) memicu peristiwa dengan aman hanya jika setidaknya ada satu penangan yang berlangganan.
Pola ini menggantikan pemeriksaan nilai kosong lama yang dapat mengalami kondisi balapan antara pemeriksaan dan pemanggilan.
System.Action handler = null;
handler?.Invoke();
System.Console.WriteLine("Invoked safely");Menggabungkan dengan ??
?. secara alami dapat dipasangkan dengan operator penggabungan nilai kosong ?? untuk menyediakan nilai pengganti ketika rangkaiannya tidak memiliki nilai.
name?.Length ?? 0 memberikan panjangnya, atau 0 jika name tidak memiliki nilai.
string name = null;
int length = name?.Length ?? 0;
System.Console.WriteLine(length);Catatan Penting
Meskipun jenis nilai akhirnya tidak dapat menyimpan nilai kosong, penggunaan ?. membuat ekspresinya dapat menyimpan nilai kosong. list?.Count berjenis int?, bukan int.
Jika Anda memerlukan int biasa, lanjutkan dengan ?? 0 atau gunakan GetValueOrDefault().
var list = new System.Collections.Generic.List<int> { 1, 2 };
int count = list?.Count ?? 0;
System.Console.WriteLine(count);Perbandingan Lengkap
Program ini membandingkan pendekatan if yang panjang dengan versi ?. yang ringkas. Keduanya mencegah pengecualian, tetapi ?. jauh lebih bersih.
using System;
class Program
{
static void Main()
{
string s = null;
int len = s != null ? s.Length : -1;
Console.WriteLine(len);
Console.WriteLine(s?.Length ?? -1);
}
}Pemeriksaan Singkat
Uji pemahaman Anda tentang operator kondisional untuk nilai kosong.
Rangkuman
Operator kondisional untuk nilai kosong ?. (dan pengindeks ?[]) menghentikan akses anggota ketika objeknya tidak memiliki nilai, lalu mengembalikan null alih-alih melempar pengecualian.
Hasilnya dapat menyimpan nilai kosong, jadi gabungkan dengan ?? untuk memberikan nilai pengganti.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Operator Null-Conditional” gratis?
Ya — teks lengkap “Operator Null-Conditional” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Operator Null-Conditional”?
Akses aman dengan ?. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai C# Academy?
Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Operator Null-Conditional” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?
Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Tipe Nilai Nullable
- Operator Null-Conditional
- Operator Null-Coalescing
- Melindungi dari Null