Bab 4 Variabel dan Tipe Data

# Deklarasi Variabel

Pelajari cara mendeklarasikan variable di C#: menentukan tipe, memberi nilai awal, hingga aturan definite assignment dari compiler.

Buka →
# Konstanta

Pelajari cara membuat nilai tetap dengan keyword const: aturan inisialisasi, larangan perubahan, dan konvensi penamaannya.

Buka →
# Tipe Nilai dan Tipe Referensi

Pahami dua keluarga tipe di C#: value type yang menyimpan nilai langsung dan reference type yang menyimpan alamat object di heap.

Buka →
# Tipe Numerik

Kenali seluruh tipe numerik C#: delapan tipe bilangan bulat dari sbyte hingga long dan tiga tipe bilangan riil float, double, serta decimal.

Buka →
# Tipe Boolean

Pelajari tipe bool yang hanya menampung true atau false, cara perbandingan menghasilkan bool, serta operator logika penggabungnya.

Buka →
# Tipe Karakter

Pelajari tipe char untuk satu karakter Unicode, escape sequence, representasi kode di balik layar, dan method bawaan pemeriksa karakter.

Buka →
# String

Kuasai tipe string: penggabungan teks, pengukuran panjang, method bawaan yang sering dipakai, dan sifat immutable yang menentukan cara mengubah teks.

Buka →
# Object dan Dynamic

Pahami tipe object sebagai induk seluruh tipe C# dan tipe dynamic yang menunda pemeriksaan operasi hingga runtime.

Buka →
# Var dan Inferensi Tipe

Pelajari keyword var yang meminta compiler menyimpulkan tipe variable dari inisialisasinya, beserta tiga batasan dan kapan var layak dipakai.

Buka →
# Konversi Tipe

Pelajari cara mengubah nilai antar tipe pada value: konversi implicit yang aman, konversi explicit berupa cast, hingga Convert.ToXxx dan int.Parse.

Buka →
# Boxing dan Unboxing

Pahami proses boxing ketika value type dikemas menjadi object di heap dan proses unboxing saat nilainya diambil kembali.

Buka →
# Default Values

Pelajari nilai default setiap tipe di C#, keyword default untuk memintanya secara eksplisit, dan perbedaan perlakuan variable lokal versus field.

Buka →
# Batas dan Overflow

Pahami batas setiap tipe numerik, perilaku overflow saat batas terlampaui, serta mode checked dan unchecked untuk mengendalikannya.

Buka →
# Type Casting

Pelajari cast pada sudut pandang hierarki tipe: upcasting ke tipe induk, downcasting ke tipe turunan, serta operator as, is, dan type pattern.

Buka →

Bab 5 Operator

# Operator Aritmetika

Pelajari lima operator aritmetika C#: penjumlahan, pengurangan, perkalian, pembagian, dan modulo, termasuk perilaku pembagian integer serta overflow.

Buka →
# Operator Penugasan

Pelajari operator penugasan dasar (=) dan compound assignment (+=, -=, *=, /=, %=) untuk menyimpan serta memperbarui nilai variabel secara ringkas.

Buka →
# Operator Perbandingan

Pelajari enam operator perbandingan C# yang menghasilkan nilai bool, termasuk perilaku case-sensitive saat membandingkan string.

Buka →
# Operator Logika

Pelajari operator logika &&, ||, dan ! untuk menggabungkan kondisi, termasuk bukti kerja short-circuit lewat output nyata.

Buka →
# Operator Bitwise

Pelajari operator bitwise &, |, ^, dan ~ yang bekerja pada level bit integer, lengkap dengan tampilan pola biner dan pola flag.

Buka →
# Operator Increment dan Decrement

Pelajari operator ++ dan -- beserta perbedaan perilaku prefix dan postfix saat nilai variabel dibaca dan diubah.

Buka →
# Operator Ternary

Pelajari operator ternary ? : untuk memilih salah satu dari dua nilai berdasarkan kondisi bool dalam satu expression.

Buka →
# Operator Null

Pelajari operator ??, ??=, dan ?. untuk menangani nilai null pada variabel reference secara ringkas dan aman.

Buka →
# Operator Type

Pelajari operator is, as, typeof, dan sizeof untuk memeriksa tipe nilai, mengonversi dengan aman, serta membaca informasi tipe.

Buka →
# Operator Shift

Pelajari operator shift << dan >> yang menggeser bit bilangan integer, ekuivalen dengan perkalian dan pembagian pangkat dua.

Buka →
# Operator Overloading

Pelajari cara mendefinisikan perilaku operator untuk tipe buatan sendiri melalui operator overloading pada struct Uang sederhana.

Buka →
# Precedence dan Associativity

Pelajari aturan precedence dan associativity yang menentukan urutan evaluasi ketika beberapa operator dipakai dalam satu expression.

Buka →

Bab 7 Control Flow

# If dan Else

Pelajari cara program C# mengambil keputusan dengan statement if, else if, dan else beserta aturan pemakaiannya.

Buka →
# Switch Statement

Gunakan switch statement untuk membandingkan satu nilai dengan banyak case secara rapi tanpa rantai if-else yang panjang.

Buka →
# Switch Expression

Pelajari switch expression C#: sintaks panah yang mengembalikan nilai, arm bersyarat, relational pattern, hingga logical pattern and dan or.

Buka →
# Pattern Matching Dasar

Kenali pattern matching C#: type pattern dengan operator is, logical pattern not, property pattern, relational pattern, dan tuple pattern.

Buka →
# For Loop

Pelajari struktur for loop di C#: bagian init, condition, dan iterator, beserta alur eksekusinya dari awal hingga berhenti.

Buka →
# While Loop

Gunakan while loop untuk mengulang blok kode selama sebuah kondisi masih true, tanpa perlu tahu jumlah iterasi di awal.

Buka →
# Do-While Loop

Pelajari do-while loop: blok kode yang dijamin dieksekusi minimal satu kali karena kondisi diperiksa setelah body.

Buka →
# Foreach Loop

Gunakan foreach loop untuk mengunjungi setiap elemen array atau List secara berurutan tanpa mengelola indeks secara manual.

Buka →
# Break dan Continue

Kendalikan jalannya loop dengan break untuk keluar lebih awal dan continue untuk melewati iterasi tertentu.

Buka →
# Goto dan Label

Kenali goto dan label di C#: cara melompat eksekusi ke label, satu kasus yang masih wajar dipakai, dan alasan statement ini jarang dipakai.

Buka →
# Nested Loop

Pelajari nested loop di C#: loop di dalam loop untuk memproses data berlapis seperti denah kursi bioskop dan grid koordinat.

Buka →
# Control Flow Best Practices

Rangkum praktik terbaik control flow di C#: memilih statement yang tepat, mengurangi nesting dengan guard clause, dan menjaga kondisi tetap ringkas.

Buka →

Bab 8 Array dan String

# Array Satu Dimensi

Pelajari cara menyimpan banyak nilai sejenis dalam satu variabel array, membaca dan mengubah elemen melalui indeks, serta memahami batas indeks yang sah.

Buka →
# Array Multidimensi

Kelola data berbentuk tabel dengan array multidimensi: deklarasi baris dan kolom, properti Rank dan GetLength, serta penelusuran loop bersarang.

Buka →
# Array Jagged

Simpan baris dengan panjang berbeda menggunakan array jagged: array yang elemennya berupa array lain, beserta cara penelusurannya.

Buka →
# Inisialisasi dan Akses Array

Kenali bentuk-bentuk inisialisasi array, perilaku nilai default tiap elemen, serta indeks dari akhir dengan operator hat.

Buka →
# Iterasi Array

Telusuri elemen array dengan for loop ketika nomor posisi dibutuhkan, foreach untuk pembacaan berurutan, dan for terbalik untuk urutan mundur.

Buka →
# Menyalin dan Membandingkan Array

Pahami perbedaan menyalin referensi dan menyalin isi array, gunakan Clone dan CopyTo, serta bandingkan dua array dengan benar.

Buka →
# Array Class Methods

Gunakan method statik kelas Array untuk mengurutkan, membalik, mencari, mengisi, dan membersihkan elemen array tanpa menulis loop manual.

Buka →
# String Immutability

Pahami sifat immutable string: setiap operasi menghasilkan objek baru, dan lihat bagaimana perbandingan serta penulisan ulang string bekerja.

Buka →
# String Methods

Gunakan method bawaan string untuk membersihkan, memotong, memeriksa, dan memformat teks, mulai dari Trim hingga PadLeft.

Buka →
# Pencarian dan Penggantian String

Temukan posisi substring dengan IndexOf dan LastIndexOf, lalu susun ulang teks dengan Replace, Remove, dan Insert.

Buka →
# Pemisahan dan Penggabungan String

Pecah teks menjadi potongan-potongan dengan Split dan susun kembali banyak nilai menjadi satu string dengan Join serta Concat.

Buka →
# StringBuilder

Susun teks panjang secara efisien dengan StringBuilder: Append, AppendLine, Replace, dan ToString dalam satu buffer yang dapat diubah.

Buka →
# Raw String Literals

Tulis teks bertanda kutip dan backslash tanpa escape sama sekali menggunakan raw string literal dari C# 11.

Buka →
# Verbatim String Literals

Tulis jalur berkas dan teks multiline tanpa escape backslash memakai string verbatim berawalan @.

Buka →
# Interpolated String Handler

Kenali mekanisme di balik interpolasi string: pola interpolated string handler dengan AppendLiteral dan AppendFormatted untuk mengendalikan pembangunan teks.

Buka →
# Span dan Memory

Potong dan periksa string tanpa menyalin memori memakai ReadOnlySpan, siapkan buffer stackalloc, dan kenali Memory untuk skenario async.

Buka →

Bab 9 Fungsi dan Method

# Deklarasi Method

Pelajari anatomi deklarasi method di C#: return type, nama, parameter list, body, dan aturan penulisannya.

Buka →
# Pemanggilan Method

Pelajari cara memanggil method, aliran eksekusi yang berpindah lalu kembali ke titik panggilan, serta cara menangkap nilai kembalian.

Buka →
# Parameter dan Return Value

Pahami kontrak masukan dan keluaran sebuah method: perbedaan parameter dan argument, return type, serta perilaku statement return.

Buka →
# Optional Parameters

Pelajari parameter dengan nilai default (optional parameter) beserta aturan penempatan dan batasannya.

Buka →
# Named Arguments

Pelajari named arguments untuk menyebut nama parameter saat pemanggilan sehingga kode lebih terbaca dan optional parameter di tengah dapat dilewati.

Buka →
# Method Overloading

Pelajari method overloading: satu nama method dengan beberapa signature dan cara compiler memilih overload yang tepat.

Buka →
# Local Functions

Pelajari local functions, method di dalam method yang dapat membaca variabel lokal method pembungkusnya.

Buka →
# Expression-Bodied Members

Pelajari bentuk ringkas => untuk menulis method yang body-nya hanya satu expression.

Buka →
# Recursive Methods

Pelajari method rekursif: base case, recursive case, dan alur panggilan yang menumpuk di call stack.

Buka →
# Ref, Out, dan In

Pelajari tiga kata kunci penerusan referensi: ref untuk membaca dan mengubah, out untuk keluaran tambahan, dan in untuk data baca saja.

Buka →
# Params Parameter

Pelajari params untuk menerima jumlah argument yang tidak pasti tanpa menulis array secara manual.

Buka →
# Tuple Return Values

Pelajari cara mengembalikan beberapa nilai sekaligus dengan tuple type, tuple literal, dan deconstruction.

Buka →
# Extension Methods

Pelajari extension methods untuk menambah method baru pada tipe yang sudah ada melalui modifier this pada static method.

Buka →
# Partial Methods

Pelajari partial methods: deklarasi di satu bagian class, implementasi opsional di bagian lain, dan polanya pada source generator modern.

Buka →
# Desain Method yang Baik

Pelajari prinsip merancang method: satu tugas per method, penamaan deskriptif, parameter secukupnya, dan efek samping yang terkendali.

Buka →

Bab 10 Koleksi Dasar

# List

Gunakan List untuk menyimpan kumpulan item yang ukurannya dapat bertambah dan berkurang saat program berjalan.

Buka →
# Dictionary

Simpan dan cari data sebagai pasangan key-value dengan Dictionary, koleksi yang mengakses nilai lewat kunci unik tanpa memindai seluruh isi.

Buka →
# HashSet

Kelola kumpulan elemen unik dengan HashSet, koleksi yang menolak duplikat secara otomatis dan memeriksa keanggotaan dengan cepat.

Buka →
# Queue

Gunakan Queue untuk memproses item dengan urutan masuk-pertama-keluar-pertama (FIFO) seperti antrian loket bank.

Buka →
# Stack

Gunakan Stack untuk memproses item dengan urutan masuk-terakhir-keluar-pertama (LIFO), misalnya riwayat navigasi dan fitur undo.

Buka →
# LinkedList

Gunakan LinkedList untuk menyisipkan dan menghapus item di posisi mana pun dengan cepat lewat rantai node yang saling terhubung.

Buka →
# SortedList dan SortedDictionary

Simpan pasangan key-value yang selalu terurut berdasarkan kunci dengan SortedList dan SortedDictionary, beserta perbedaan performa keduanya.

Buka →
# SortedSet

Simpan elemen unik yang selalu terurut dengan SortedSet, lengkap dengan pencarian rentang lewat GetViewBetween.

Buka →
# Collection Initializers

Isi koleksi langsung saat deklarasi menggunakan collection initializer untuk List dan Dictionary tanpa pemanggilan Add berulang.

Buka →
# Collection Expression

Tulis koleksi dengan sintaks kurung siku [ ... ] dari C# 12: lebih ringkas dari initializer dan berlaku untuk berbagai tipe koleksi.

Buka →
# Memilih Tipe Koleksi

Petakan kebutuhan program ke tipe koleksi yang tepat: List, Dictionary, HashSet, Queue, Stack, atau koleksi terurut.

Buka →
# Kompleksitas Operasi Koleksi

Pahami biaya operasi koleksi dengan notasi Big-O sehingga pilihan koleksi berpijak pada performa, bukan kebiasaan.

Buka →

Bab 11 Exception Handling

# Konsep Exception

Pahami apa itu exception, apa yang dilakukan runtime saat exception muncul, dan mengapa exception perlu ditangkap.

Buka →
# Try-Catch

Bungkus kode berpotensi gagal dengan try-catch agar program tetap berjalan saat input atau data tidak valid.

Buka →
# Multiple Catch

Tangani beberapa jenis exception sekaligus dengan beberapa blok catch yang diurutkan dari tipe paling spesifik.

Buka →
# Finally

Gunakan blok finally untuk menjamin kode pembersihan selalu dijalankan, baik try berhasil, gagal, maupun tertangkap di catch.

Buka →
# Throw dan Rethrow

Lempar exception dengan throw untuk melaporkan kegagalan dari method, dan lempar ulang dengan throw; tanpa kehilangan informasi.

Buka →
# Exception Filters

Seleksi kondisi penangkapan exception dengan kata kunci when agar blok catch hanya menangani kegagalan yang memenuhi syarat.

Buka →
# Membuat Custom Exception

Definisikan tipe exception sendiri untuk kegagalan spesifik bisnis, seperti stok tidak cukup, agar penanganan lebih jelas dan aman dideteksi.

Buka →
# Exception InnerException

Bungkus exception tingkat rendah ke dalam exception berkonteks bisnis menggunakan properti InnerException tanpa kehilangan penyebab asalnya.

Buka →
# Exception StackTrace

Baca properti StackTrace untuk menelusuri rantai pemanggilan method dari titik kegagalan hingga titik masuk program.

Buka →
# Exception Best Practices

Terapkan praktik penanganan exception yang disarankan: tangkap tipe spesifik, tulis pesan yang menjelaskan, dan jangan gunakan exception untuk alur normal.

Buka →
# Exception vs Result Pattern

Bandingkan dua cara melaporkan kegagalan: melempar exception atau mengembalikan nilai yang menggambarkan hasil, beserta kapan masing-masing tepat.

Buka →

Bab 12 Pemrograman Berorientasi Objek

# Konsep OOP

Pelajari pemikiran dasar pemrograman berorientasi objek: menyatukan data dan perilaku ke dalam class, lalu menjalankannya melalui object.

Buka →
# Class dan Object

Definisikan class RekeningBank, buat object dengan new, dan buktikan bahwa setiap object menyimpan datanya sendiri.

Buka →
# Field dan Method

Bedah dua jenis anggota class: field sebagai penyimpan data object dan method sebagai perilaku yang mengoperasikan data tersebut.

Buka →
# Constructor

Pastikan data object terisi sejak awal dengan constructor yang menerima nomor, pemilik, dan saldo awal rekening.

Buka →
# Constructor Overloading

Sediakan beberapa cara membuka rekening dengan mendefinisikan lebih dari satu constructor dalam satu class.

Buka →
# Object Initializers

Isi field object langsung saat pembuatan tanpa menulis constructor tambahan dengan object initializer.

Buka →
# This Keyword

Gunakan this untuk merujuk object yang sedang menjalankan kode, membedakan field dari parameter, dan memanggil constructor lain.

Buka →
# Static Members

Simpan data milik class secara bersama melalui static field dan static method, lengkap dengan penghitung jumlah rekening.

Buka →
# Access Modifiers

Atur siapa yang boleh mengakses anggota class dengan public, private, internal, dan protected.

Buka →
# Encapsulation

Pelajari cara menyembunyikan data di dalam class dengan access modifier private dan membuka akses terkontrol melalui property serta method.

Buka →
# Inheritance

Pelajari cara class mewarisi member dari class lain melalui hubungan base class dan derived class untuk mengurangi duplikasi kode.

Buka →
# Method Overriding

Pelajari cara mengganti perilaku method warisan dengan pasangan kata kunci virtual dan override, termasuk memanggil versi aslinya lewat base.

Buka →
# Polymorphism

Pahami dynamic dispatch: satu pemanggilan method pada reference bertipe dasar dapat menjalankan perilaku berbeda sesuai tipe object aslinya.

Buka →
# Abstract Class

Pelajari cara membuat class dasar yang tidak dapat diinstansiasi dan mewajibkan setiap subclass mengisi method abstract miliknya.

Buka →
# Interface

Pelajari cara mendefinisikan kontrak perilaku dengan interface dan mengimplementasikannya pada class yang berbeda-beda.

Buka →
# Composition dan Aggregation

Pahami dua pola hubungan antar object: composition yang menyatukan siklus hidup bagian ke dalam keseluruhan, dan aggregation yang menghubungkan object secara longgar.

Buka →
# Object Equality

Pelajari cara membandingkan dua object di C#: perbandingan reference oleh operator ==, override Equals dan GetHashCode, serta IEquatable<T>.

Buka →
# Object ToString

Pelajari cara mengatur representasi teks sebuah object melalui override method ToString yang diwarisi dari class Object.

Buka →
# Object Lifecycle

Pahami siklus hidup object di C#: dibuat lewat new di heap, hidup selama masih dirujuk, lalu dibersihkan garbage collection saat tak dirujuk lagi.

Buka →
# Prinsip OOP

Rangkum empat pilar pemrograman berorientasi objek: encapsulation, inheritance, polymorphism, dan abstraction, beserta pengantar Single Responsibility Principle.

Buka →

Bab 13 Properties dan Encapsulation

# Property Dasar

Pelajari cara kerja property di C#: anggota class yang terbaca seperti field tetapi dijalankan sebagai kode aksesor get dan set.

Buka →
# Getter dan Setter

Pelajari aksesor get dan set secara detail: membaca property, menulis property lewat value, serta membatasi akses tulis dengan property get-only.

Buka →
# Auto-Implemented Properties

Pelajari auto-implemented properties: sintaks get dan set tanpa field manual karena compiler menyediakan backing field secara otomatis.

Buka →
# Init-Only Properties

Pelajari aksesor init pada property C#: nilai hanya boleh diisi saat object dibuat, lalu terkunci untuk sisa masa program.

Buka →
# Required Members

Pelajari modifier required pada property C#: compiler memaksa setiap object initializer mengisi property yang ditandai sebelum kode dikompilasi.

Buka →
# Expression-Bodied Properties

Pelajari sintaks expression-bodied untuk property C#: aksesor satu baris ditulis ringkas dengan operator =>.

Buka →
# Property Validation

Pelajari cara memasang validasi di aksesor set: nilai yang melanggar aturan ditolak lewat exception sebelum menyentuh data class.

Buka →
# Computed Properties

Pelajari computed properties: nilai yang dihitung setiap kali dibaca dari anggota class lain sehingga data turunan tidak pernah berbeda dari sumbernya.

Buka →
# Backing Fields

Pelajari backing field manual: satu field privat yang menopang beberapa property sekaligus ketika auto-implemented property tidak mencukupi.

Buka →
# Field-Backed Properties

Pelajari kata kunci field pada property C#: logika aksesor ditulis lepas tanpa mendeklarasikan backing field manual.

Buka →
# Indexers

Pelajari indexer pada class C#: mengakses item data lewat notasi kurung siku seperti array, lengkap dengan aksesor get dan set berparameter index.

Buka →
# Encapsulation Best Practices

Rangkuman praktik terbaik encapsulation: memilih akses property yang paling ketat, memusatkan validasi, dan menutup section dengan contoh class terpadu.

Buka →

Bab 14 Inheritance dan Polymorphism

# Base Class dan Derived Class

Pelajari cara membentuk hierarki class, di mana derived class mewarisi field dan method milik base class melalui satu tanda titik dua.

Buka →
# Base Keyword

Pelajari cara memakai kata kunci base untuk memanggil constructor dan method milik base class dari dalam derived class.

Buka →
# Virtual dan Override

Pelajari pasangan kata kunci virtual dan override untuk mengganti perilaku method warisan, termasuk rantai override dan perluasan dengan base.

Buka →
# New Keyword dalam Inheritance

Pelajari method hiding dengan kata kunci new, cara pemilihan versinya yang berbeda dari override, dan pesan compiler CS0108.

Buka →
# Abstract Members

Pelajari cara mewajibkan turunan mengisi implementasi melalui abstract class dan abstract member pada sistem penggajian.

Buka →
# Sealed Class dan Members

Pelajari cara menghentikan pewarisan dengan sealed pada class dan menutup rantai override dengan sealed override.

Buka →
# Interface Implementation

Pelajari implementasi interface secara teknis: member property, beberapa interface dalam satu class, dan pemeriksaan kemampuan dengan pola is.

Buka →
# Explicit Interface Implementation

Pelajari cara menyelesaikan konflik nama member antara dua interface dengan implementasi eksplisit di aplikasi kasir POS.

Buka →
# Default Interface Members

Pelajari cara memberi implementasi bawaan pada member interface sejak C# 8, sehingga class lama tetap kompatibel tanpa perubahan.

Buka →
# Covariance dan Contravariance

Pelajari cara array dan tipe generic seperti IEnumerable, Func, dan Action dikonversi mengikuti arah pewarisan tipenya.

Buka →
# Runtime Polymorphism

Pelajari cara satu pemanggilan method menjalankan implementasi berbeda saat program berjalan melalui dynamic dispatch pada hierarki armada.

Buka →
# Inheritance vs Composition

Pelajari perbandingan inheritance dan composition melalui contoh mobil dengan mesin, beserta panduan memilih di antara keduanya.

Buka →

Bab 15 Interface dan Abstraction

# Mendefinisikan Interface

Pelajari aturan mendefinisikan interface di C#: member yang boleh ditulis, akses implisitnya, dan status interface sebagai sebuah tipe.

Buka →
# Mengimplementasikan Interface

Pelajari cara class menepati kontrak interface: mengisi seluruh member, memakai implementasi lewat tipe interface, dan galat bila ada member yang tertinggal.

Buka →
# Interface Segregation

Pelajari prinsip interface segregation: memecah kontrak yang menggabungkan terlalu banyak kemampuan agar class hanya mengisi member yang benar-benar dipakai.

Buka →
# Multiple Interface Implementation

Pelajari cara satu class mengimplementasikan beberapa interface sekaligus dan mengekspos object yang sama melalui beberapa sudut pandang kontrak.

Buka →
# Interface Inheritance

Pelajari cara interface mewarisi interface lain untuk menambah kemampuan baru tanpa mengubah kontrak lama yang sudah dipakai banyak class.

Buka →
# Explicit Implementation

Pelajari cara menyelesaikan benturan member dengan nama sama dari dua interface menggunakan explicit implementation.

Buka →
# Default Interface Methods

Pelajari cara memberi badan bawaan pada member interface sehingga class lama tidak wajib mengisi method yang baru ditambahkan.

Buka →
# Abstract Class vs Interface

Pelajari perbedaan pokok abstract class dan interface beserta cara memadukan keduanya dalam satu hierarki metode pembayaran.

Buka →
# Programming to Interface

Pelajari prinsip programming to interface: mengganti ketergantungan pada class konkret dengan ketergantungan pada kontrak agar kode mudah diperluas.

Buka →
# Abstraction dalam Desain

Rangkum seluruh materi section ini menjadi keputusan desain nyata: menyusun kontrak yang tepat dan membangun alur checkout yang fleksibel.

Buka →

Bab 16 Struct, Record, dan Enum

# Struct

Pelajari cara mendefinisikan tipe data bernilai sendiri dengan struct dan memahami semantik salinan nilainya.

Buka →
# Readonly Struct

Pelajari cara membuat struct yang tidak dapat diubah setelah dibuat menggunakan modifier readonly.

Buka →
# Ref Struct

Kenali ref struct: struct khusus yang hanya boleh tinggal di stack, dengan ReadOnlySpan sebagai contoh utamanya.

Buka →
# Record Class

Pelajari record class: tipe referensi yang kesetaraannya membandingkan isi, lengkap dengan anggota yang dibangkitkan compiler.

Buka →
# Record Struct

Pelajari record struct: gabungan semantik nilai struct dan anggota kesetaraan record dalam satu deklarasi.

Buka →
# Record Equality

Pahami cara compiler menentukan dua record dianggap sama: perbandingan seluruh isi, kode hash, hingga pemeriksaan tipe runtime.

Buka →
# With Expression

Pelajari with expression: membuat salinan dengan sebagian nilai diganti, tanpa mengubah data asalnya.

Buka →
# Enum

Pelajari enum: memberi nama pada sekumpulan konstanta bernomor agar program lebih mudah dibaca dan dijaga.

Buka →
# Enum Underlying Type

Pelajari tipe dasar di balik enum: memilih byte atau short, memberi nilai eksplisit, dan berpindah antara angka dan nama.

Buka →
# Flags Enum

Pelajari flags enum: menggabungkan beberapa pilihan dalam satu nilai dengan atribut Flags dan operator bitwise.

Buka →
# Tuple Types

Pelajari tuple type di C#: struktur data ringan dengan elemen bernama, deconstruction, dan pertukaran nilai tanpa tipe baru.

Buka →
# Anonymous Types

Pelajari anonymous types: tipe sekali pakai yang dibuat compiler dari daftar property, beserta aturan kesetaraannya.

Buka →
# Value Object

Pelajari pola desain value object dari domain-driven design pada tingkat pengantar, dibangun dengan record di C#.

Buka →
# Memilih Class, Struct, Record

Rangkuman panduan memilih antara class, struct, record class, dan record struct beserta alasan teknisnya.

Buka →

Bab 17 Generics

# Generic Class

Pelajari cara mendefinisikan class dengan type parameter agar satu definisi dapat menyimpan dan mengolah tipe data apa pun dengan keamanan tipe penuh.

Buka →
# Generic Method

Pelajari cara mendeklarasikan method dengan type parameter sendiri sehingga satu method dapat bekerja untuk banyak tipe tanpa overload berulang.

Buka →
# Generic Interface

Pelajari cara mendefinisikan kontrak dengan type parameter dan mengimplementasikannya pada class generik maupun class biasa.

Buka →
# Generic Struct

Pelajari cara mendefinisikan struct dengan type parameter untuk pasangan data bernilai yang hemat memori tanpa alokasi heap tambahan.

Buka →
# Generic Constraints

Pelajari cara membatasi type parameter dengan klausa where agar badan kode generik dapat memakai kemampuan tertentu dari tipe yang diterimanya.

Buka →
# Type Parameter

Pelajari aturan scope dan konvensi penamaan type parameter, termasuk deklarasi dengan lebih dari satu type parameter.

Buka →
# Generic Type Inference

Pelajari cara compiler menyimpulkan type argument dari argumen pemanggilan, kapan inference berhasil, dan kapan kita wajib menulis type argument secara eksplisit.

Buka →
# Covariance dan Contravariance Generics

Pelajari kapan List turunan boleh dipakai sebagai kumpulan induk lewat kata kunci out dan in pada deklarasi interface dan delegate.

Buka →
# Generic Nullability

Pelajari makna tanda T? pada kode generik yang bergantung pada constraint, mulai dari Nullable<T> hingga nullable reference type.

Buka →
# Generic Math

Pelajari cara menulis algoritma hitung generik untuk semua tipe numerik dengan interface INumber<T> yang tersedia sejak .NET 7.

Buka →
# Static Abstract Interface Members

Pelajari cara mendeklarasikan anggota static abstract pada interface sehingga kode generik dapat memanggil anggota static lewat type parameter.

Buka →
# Generic Collections

Pelajari tur singkat koleksi generik inti .NET: List, Dictionary, dan IEnumerable sebagai fondasi pengelolaan data bertipe kuat.

Buka →
# Desain API Generik

Pelajari panduan merancang API generik yang nyaman dipakai, dari perbandingan dengan API berbasis object hingga daftar periksa desain.

Buka →

Bab 18 Collections dan Iterators

# Collection Interfaces

Kenali kontrak standar koleksi .NET: IEnumerable, ICollection, IList, dan IDictionary sebagai fondasi seluruh bab di section ini.

Buka →
# IEnumerable dan IEnumerator

Bongkar mekanisme foreach dengan mengenal pasangan interface IEnumerable dan IEnumerator yang mendasari semua iterasi di .NET.

Buka →
# Iterator Pattern

Pelajari pola desain yang menyembunyikan struktur internal koleksi di balik iterator: aggregate menyediakan, konsumen membaca.

Buka →
# Yield Return

Gunakan yield return untuk membuat iterator dengan singkat: compiler yang membangun state machine-nya.

Buka →
# Yield Break

Hentikan iterasi lebih awal dengan yield break ketika sisa item sudah tidak relevan untuk dikirim.

Buka →
# Lazy Iteration

Pahami sifat tunda eksekusi iterator method: badan baru berjalan saat enumerasi, dan berjalan ulang pada setiap enumerasi.

Buka →
# Custom Iterator

Bangun koleksi dengan enumerator buatan sendiri: implementasi penuh IEnumerable dan IEnumerator tanpa yield.

Buka →
# Collection Initialization

Ketahui mekanisme di balik collection initializer, cara membuat tipe kustom yang mendukungnya, dan collection expression dari C# 12.

Buka →
# Immutable Collections

Gunakan koleksi dari System.Collections.Immutable yang tidak bisa diubah, sehingga setiap modifikasi menghasilkan koleksi baru.

Buka →
# Frozen Collections

Manfaatkan FrozenDictionary dan FrozenSet dari .NET 8 untuk data yang dibangun sekali dan dibaca berkali-kali.

Buka →
# Concurrent Collections

Gambaran singkat System.Collections.Concurrent: ConcurrentDictionary dan ConcurrentQueue untuk data yang disentuh banyak thread.

Buka →
# Collection Performance

Bandingkan biaya operasi antar keluarga koleksi lewat tabel Big-O dan kuasai pralokasi capacity untuk menghemat penyalinan.

Buka →
# Collection Design

Rancang API yang menyimpan koleksi dengan aman: enkapsulasi internal, tampilan baca-saja, dan pemilihan tipe parameter yang tepat.

Buka →

Bab 19 Delegates dan Events

# Delegate Dasar

Pelajari delegate sebagai tipe yang merepresentasikan method sehingga method dapat disimpan ke variabel, dikirim, dan dipanggil lewat nama variabel.

Buka →
# Action, Func, dan Predicate

Kenali tiga tipe delegate generik bawaan .NET: Action untuk method tanpa return, Func untuk method dengan return, dan Predicate untuk uji syarat.

Buka →
# Multicast Delegate

Gunakan operator += dan -= untuk menumpuk banyak method dalam satu delegate sehingga satu pemanggilan menjalankan seluruh daftar secara berurutan.

Buka →
# Anonymous Method

Tulis delegate inline dengan keyword delegate tanpa mendeklarasikan method terpisah untuk logika kecil yang hanya dipakai satu kali.

Buka →
# Lambda Expression

Padatkan anonymous method menjadi lambda expression dengan operator => dan biarkan compiler menyimpulkan tipe parameternya.

Buka →
# Event Dasar

Pelajari keyword event yang membungkus delegate dengan aturan akses sehingga kode luar hanya dapat mendaftar dan melepas handler.

Buka →
# Event Publisher dan Subscriber

Terapkan pola publisher-subscriber: satu class menerbitkan event, modul lain berlangganan, dan publisher tidak perlu mengenal subscriber.

Buka →
# EventHandler

Ikuti konvensi .NET dengan EventHandler dan EventHandler<TEventArgs> beserta class EventArgs untuk membawa data event secara terstruktur.

Buka →
# Custom Event Accessors

Kendalikan perilaku pendaftaran handler dengan accessor add dan remove yang menulis sendiri backing field event.

Buka →
# Event Lifecycle

Ikuti empat tahap siklus hidup event, dari deklarasi, langganan, pemicuan, hingga pelepasan handler.

Buka →
# Event Memory Leaks

Lihat bagaimana publisher memegang referensi subscriber dan cegah memory leak dengan unsubscribe lewat operator -= atau pola IDisposable.

Buka →
# Delegates vs Interfaces

Bandingkan delegate dan interface sebagai dua cara menukar perilaku saat runtime, beserta panduan memilih di antara keduanya.

Buka →

Bab 20 Lambda dan Expression

# Lambda Syntax

Bedah anatomi sintaks lambda: parameter, panah =>, dan body, beserta variasi bentuknya dari tanpa parameter hingga tipe eksplisit.

Buka →
# Statement Lambda

Gunakan statement lambda dengan blok kurawal ketika logika lambda membutuhkan beberapa statement dan return eksplisit.

Buka →
# Expression Lambda

Gunakan expression lambda, bentuk paling ringkas tanpa kurawal dan return, ketika body hanya terdiri dari satu ekspresi.

Buka →
# Closure

Pahami bagaimana lambda menangkap variabel di sekitarnya by reference sehingga perubahan variabel terasa dan umurnya ikut diperpanjang.

Buka →
# Variable Capture

Amati jebakan loop variable pada closure dan perbaiki dengan menyalin nilai ke variabel lokal di setiap iterasi.

Buka →
# Expression-Bodied Lambda

Jelajahi operator => yang menjalar dari lambda ke member class: method, property, hingga menggantikan getter sederhana.

Buka →
# Expression Trees Introduction

Ubah lambda menjadi data dengan Expression<Func<>> dan telusuri pohon node-nya sebagai langkah pertama membaca kode sebagai data.

Buka →
# Func, Action, Predicate

Gunakan tabel referensi Func, Action, dan Predicate beserta contoh gabungan untuk memilih tipe delegate yang tepat saat menulis lambda.

Buka →
# Higher-Order Functions

Bangun method yang menerima dan mengembalikan method lain sehingga strategi diskon dapat dibuat dinamis lewat lambda.

Buka →
# Lambda Performance

Ukur alokasi memori lambda non-capturing versus capturing dan terapkan kebiasaan yang menekan tekanan pada garbage collector.

Buka →

Bab 21 LINQ

# Pengenalan LINQ

Pelajari LINQ (Language Integrated Query), fitur C# untuk mengkueri koleksi dengan satu sintaks terpadu, beserta peta kategori operatornya.

Buka →
# Query Syntax

Pelajari query expression C#: klausa from, where, orderby, dan select untuk menyusun kueri yang alurnya mirip SQL.

Buka →
# Method Syntax

Pelajari method syntax LINQ: extension method dan lambda expression yang menjadi bentuk asli setiap kueri C#.

Buka →
# Filtering dan Where

Pelajari operator Where untuk menyaring elemen koleksi berdasarkan satu atau beberapa syarat dengan lambda predicate.

Buka →
# Projection dan Select

Pelajari operator Select untuk membentuk ulang setiap elemen kueri menjadi field tertentu atau tipe hasil baru.

Buka →
# Ordering

Pelajari operator OrderBy, OrderByDescending, ThenBy, dan ThenByDescending untuk mengurutkan hasil kueri dengan satu atau beberapa kunci.

Buka →
# Grouping

Pelajari operator GroupBy untuk mengelompokkan elemen berdasarkan kunci dan menghitung ringkasan per grup.

Buka →
# Joining

Pelajari operator Join untuk menggabungkan dua koleksi melalui kunci yang cocok dengan pola inner join.

Buka →
# Aggregation

Pelajari operator agregasi LINQ: Count, Sum, Min, Max, Average, dan Aggregate untuk meringkas koleksi menjadi satu nilai.

Buka →
# Set Operations

Pelajari operator himpunan LINQ: Distinct, Union, Intersect, dan Except untuk membandingkan dua urutan data.

Buka →
# Partitioning

Pelajari operator partitioning LINQ: Skip, Take, SkipWhile, TakeWhile, dan Chunk untuk memotong urutan data.

Buka →
# Quantifier Operations

Pelajari operator kuantor LINQ: Any, All, dan Contains untuk menguji kecocokan elemen dengan jawaban boolean.

Buka →
# Element Operations

Pelajari operator elemen LINQ: First, Last, Single, dan ElementAt beserta perilaku default-nya saat data kosong.

Buka →
# Conversion Operations

Pelajari operator konversi LINQ: ToList, ToArray, ToDictionary, dan OfType untuk mengubah bentuk hasil kueri.

Buka →
# Deferred Execution

Pelajari deferred execution: kueri LINQ baru berjalan saat diiterasi sehingga ikut melihat perubahan sumber data.

Buka →
# Immediate Execution

Pelajari immediate execution: operator seperti Count, Sum, First, dan ToList yang langsung mengeksekusi kueri saat dipanggil.

Buka →
# LINQ to Objects

Pelajari LINQ to Objects, provider LINQ untuk koleksi di memori seperti List, array, Dictionary, dan HashSet.

Buka →
# LINQ dengan Entity Framework Core

Pelajari cara Entity Framework Core menerjemahkan kueri LINQ menjadi SQL, beserta batasan translasi yang perlu diwaspadai.

Buka →
# LINQ Performance

Pelajari dampak enumerasi berulang terhadap performa LINQ dan teknik materialisasi yang tepat.

Buka →
# LINQ Best Practices

Pelajari praktik terbaik menulis kueri LINQ: urutan operator, materialisasi, dan konsistensi gaya sintaks.

Buka →

Bab 22 Nullable Reference Types

# Nullable Value Types

Pelajari pembungkus Nullable untuk tipe nilai, ditulis dengan tanda tanya seperti int?, untuk mewakili data numerik yang mungkin belum diisi.

Buka →
# Nullable Reference Types Introduction

Kenali nullable reference types: anotasi tanda tanya pada tipe referensi dan peringatan compiler yang menggantikan NullReferenceException di saat kompilasi.

Buka →
# Nullable Context

Atur cakupan analisis nullability melalui properti Nullable pada project file dan direktif #nullable pada tingkat berkas.

Buka →
# Nullable Annotations

Pelajari makna anotasi tanda tanya dan janji non-nullable pada variabel, field, property, dan parameter method.

Buka →
# Null-State Analysis

Pahami bagaimana compiler melacak keadaan mungkin-kosong dan pasti-terisi pada setiap baris program.

Buka →
# Null-Conditional Operator

Gunakan operator ?. dan ?[] untuk menjangkau anggota data yang mungkin kosong tanpa mencacah pemeriksaan if.

Buka →
# Null-Coalescing Operator

Kuasai operator ?? dan ??= untuk memberi nilai pengganti bila data yang mungkin kosong dibaca atau diisi sekali jalan.

Buka →
# Null-Forgiving Operator

Gunakan akhiran ! untuk menyatakan kepastian kita kepada compiler serta pahami risiko penggunaannya.

Buka →
# Null Patterns

Kenali pemeriksaan null sebagai pattern matching: is null, is not null, dan arm null pada switch expression.

Buka →
# Nullable Generic Types

Pahami makna T? pada kode generik yang terikat constraint dan seluk-beluk pembungkus Nullable di baliknya.

Buka →
# Nullability Attributes

Gunakan atribut dari namespace System.Diagnostics.CodeAnalysis untuk menyatakan ulang aturan nullability pada API yang rumit.

Buka →
# Nullable API Design

Rancang API yang jujur soal keboleh-kosongan melalui return type, pola Try, required member, dan atribut nullability.

Buka →

Bab 23 Pattern Matching

# Constant Pattern

Pelajari constant pattern untuk mencocokkan input dengan konstanta angka, teks, anggota enum, dan null.

Buka →
# Type Pattern

Gunakan type pattern untuk menguji tipe runtime sebuah nilai sekaligus mengikat nilainya ke variabel bertipe tersebut.

Buka →
# Declaration Pattern

Pahami declaration pattern is T x beserta aturan definite assignment dan bentuk negasi is not T x.

Buka →
# Relational Pattern

Cocokkan nilai terhadap batas angka atau karakter dengan relational pattern menggunakan operator <, >, <=, dan >=.

Buka →
# Logical Pattern

Gabungkan pola dengan operator and, or, dan not lengkap dengan aturan prioritas serta tanda kurung.

Buka →
# Property Pattern

Periksa isi property sebuah object secara bersarang dengan property pattern, termasuk extended property pattern C# 10.

Buka →
# Positional Pattern

Bedah object melalui Deconstruct dan cocokkan tiap posisi dengan positional pattern pada record dan class.

Buka →
# List Pattern

Cocokkan isi array, list, dan string elemen demi elemen dengan list pattern serta slice pattern C# 11.

Buka →
# Var Pattern

Gunakan var pattern untuk mencocokkan dan mengikat nilai apa pun, termasuk di dalam guard dan pola lain.

Buka →
# Discard Pattern

Gunakan pola _ untuk menampung sisa kasus, melengkapi keutuhan switch, dan menampung posisi yang tidak dibutuhkan.

Buka →
# Switch Expression

Telusuri mekanika switch expression bertumpu pola: keutuhan arm, when guard, tuple input, dan arm yang melempar exception.

Buka →
# Pattern Combinators

Rangkai pola dengan and, or, not, tanda kurung, serta kombinasi lintas jenis pola pada satu expression.

Buka →
# Pattern Matching Best Practices

Kumpulkan praktik terbaik pattern matching: urutan arm, hierarki record, guard, dan batasan penggunaannya.

Buka →

Bab 24 Advanced Types

# Tuple Types dan Named Tuples

Pelajari tuple type dari sisi lanjutan: nama elemen yang bertahan lintas method, tuple sebagai key dictionary, dan perbandingannya dengan System.Tuple generik lama.

Buka →
# Anonymous Types

Pelajari anonymous types pada skenario lanjutan: array sekali pakai, tipe bersarang, with-expression, dan batasannya sebagai tipe antar method.

Buka →
# Dynamic Type

Telusuri mekanisme runtime binder di balik tipe dynamic: binding saat eksekusi, RuntimeBinderException, dan batasan yang perlu diantisipasi.

Buka →
# Object Type

Bedah tipe object dari sisi lanjutan: helper Equals dan ReferenceEquals, salinan dangkal MemberwiseClone, serta biaya alokasi yang menyertainya.

Buka →
# Nint dan Nuint

Pelajari nint dan nuint: tipe bilangan bulat berukuran mengikuti platform, konversinya dengan IntPtr, dan kapan pemakaiannya tepat.

Buka →
# Native-Sized Integers

Pahami kedudukan baru nint dan nuint sejak C# 11 sebagai native-sized integers yang sah di konteks generik, termasuk antarmuka generic math.

Buka →
# Function Pointers

Kenali function pointer C# 9: alamat method tanpa alokasi delegate, ditulis delegate* dan dijalankan di dalam konteks unsafe.

Buka →
# Ref Locals dan Ref Returns

Pelajari ref local dan ref return: method yang mengembalikan alias ke elemen data sehingga pemanggil membaca dan menulis langsung ke sumbernya.

Buka →
# Ref Fields

Pelajari ref fields C# 11: field ref struct yang menyimpan referensi ke data lain, dengan aturan escape yang menjaga keabsahan referensinya.

Buka →
# Scoped Ref

Pelajari modifier scoped C# 11 untuk membatasi rentang hidup referensi pada parameter dan field ref struct di kode tingkat rendah.

Buka →
# Required Members

Perluas modifier required ke field, constructor beratribut SetsRequiredMembers, dan perilaku with pada record yang berisi anggota required.

Buka →
# Init Accessors

Bedah aksesor init dari sisi internal: izin menulis field readonly, kerja sama dengan with pada struct, dan modreq IsExternalInit.

Buka →
# Primary Constructors

Pelajari primary constructors C# 12 untuk class dan struct: parameter yang ditangkap, pewarisan dengan base, dan bedanya dengan record.

Buka →
# Collection Expressions

Perluas collection expressions ke tipe target lanjutan: argumen ReadOnlySpan, spread ganda, dan bentuk bersarang untuk jagged array.

Buka →
# Target-Typed New

Pelajari target-typed new C# 9: new() tanpa mengulang nama tipe pada deklarasi lokal, field, argumen method, dan ekspresi kondisional.

Buka →
# Alias Any Type

Pelajari perluasan using alias C# 12 yang kini mencakup tuple, array, dan tipe komposit lain, beserta batas yang ditegakkan compiler.

Buka →
# Interceptors dan Fitur Eksperimental

Kenali dua fitur C# 12 berstatus khusus: attribute Experimental untuk menandai API belum stabil dan interceptors yang menulis ulang pemanggilan method.

Buka →
# Fitur Bahasa Berdasarkan Versi

Peta ringkas fitur bahasa C# 8 sampai C# 13 beserta tempatnya dibahas di course ini, dan cara mengatur LangVersion pada project.

Buka →

Bab 25 Memory Management

# Stack dan Heap

Kenali dua area memori utama runtime .NET, yaitu call stack untuk data sementara dan managed heap untuk objek yang dikelola garbage collector.

Buka →
# Value dan Reference Semantics

Pahami perbedaan semantik nilai dan semantik referensi di C# serta dampaknya terhadap alokasi memori dan perilaku program.

Buka →
# Object Allocation

Lihat bagaimana operator new mengalokasikan objek di managed heap dan cara mengukur jumlah byte yang dialokasikan dengan GC.GetAllocatedBytesForCurrentThread.

Buka →
# Reference Lifetime

Pelajari bagaimana usia objek ditentukan oleh rujukan yang masih terpakai dan bagaimana GC mengklaim kembali objek tanpa rujukan.

Buka →
# Garbage Collection

Kenali cara garbage collector menemukan objek tanpa rujukan dan mengklaim kembali memorinya, lengkap dengan pengukuran hitungan koleksi.

Buka →
# Large Object Heap

Pelajari Large Object Heap (LOH), area khusus di managed heap untuk objek berukuran 85.000 byte ke atas, beserta implikasinya.

Buka →
# Generations dan GC

Pahami konsep generasi 0, 1, dan 2 pada garbage collector .NET serta proses promosi objek yang selamat dari siklus GC.

Buka →
# Finalizer

Pelajari finalizer sebagai jaring pengaman terakhir runtime, beserta keterbatasannya yang serius pada waktu eksekusi dan beban GC.

Buka →
# WeakReference

Gunakan WeakReference untuk merujuk objek tanpa menahannya dari pengklaiman GC, misalnya pada cache yang boleh dibuang kapan saja.

Buka →
# Memory Pressure

Ukur tekanan memori dari laju alokasi managed dan informasikan pemakaian memori unmanaged kepada GC melalui GC.AddMemoryPressure.

Buka →
# Allocation Reduction

Teknik menekan jumlah alokasi managed: StringBuilder untuk penyambungan, span dan MemoryExtensions untuk pemrosesan tanpa alokasi.

Buka →
# Memory Management Best Practices

Rangkum praktik terbaik pengelolaan memori di C#: ukur dulu, andalkan using untuk resource, dan jaga rujukan agar tetap ramping.

Buka →

Bab 26 Garbage Collection

Bab 28 File System dan Streams

# File dan Directory

Kenali dua class statis File dan Directory di namespace System.IO untuk memeriksa, menyalin, dan menghapus berkas serta folder.

Buka →
# Path dan Path.Combine

Pelajari class Path untuk merakit dan membedah string path lintas platform tanpa menyisipkan pemisah folder secara manual.

Buka →
# Membaca File Teks

Bedah tiga method pembacaan teks pada class File: ReadAllText, ReadAllLines, dan ReadLines beserta perbedaan pemakaian memorinya.

Buka →
# Menulis File Teks

Gunakan WriteAllText untuk menimpa isi berkas dan pasangan AppendAllText serta AppendAllLines untuk menambah baris baru.

Buka →
# Membaca File Biner

Baca data mentah tanpa proses decoding lewat ReadAllBytes dan BinaryReader, lengkap dengan cara menampilkannya sebagai heksadesimal.

Buka →
# Menulis File Biner

Simpan tipe dasar dalam bentuk byte aslinya dengan BinaryWriter, lalu baca kembali dengan BinaryReader dalam urutan yang sama.

Buka →
# Stream dan StreamReader

Pahami abstraksi Stream sebagai aliran byte, lalu gunakan StreamReader untuk membacanya baris demi baris.

Buka →
# StreamWriter

Tulis teks ke stream secara bertahap lewat buffer StreamWriter, baik untuk menimpa isi lama maupun menambah di akhir berkas.

Buka →
# MemoryStream

Gunakan MemoryStream sebagai stream yang tersimpan penuh di memori untuk menguji kode stream tanpa menyentuh disk.

Buka →
# FileStream

Kendalikan pembukaan berkas di tingkat rendah dengan FileMode dan FileAccess, lalu tulis dan baca byte lewat FileStream.

Buka →
# Buffered Stream

Kurangi jumlah permintaan disk dengan menyisipkan BufferedStream di antara kode dan stream dasar.

Buka →
# Asynchronous File IO

Bebaskan thread dari menunggu disk dengan File.ReadAllTextAsync, WriteAllTextAsync, dan ReadLineAsync.

Buka →
# File Watcher

Bereaksi terhadap perubahan berkas secara otomatis dengan FileSystemWatcher, lengkap dengan batas waktu pemantauan lewat CancellationToken.

Buka →
# Temporary Files

Simpan data sekali pakai di folder temporer sistem lewat Path.GetTempPath, Path.GetTempFileName, dan Directory.CreateTempSubdirectory.

Buka →
# File Permissions

Atur izin berkas Unix lewat UnixFileMode di .NET 7+, dengan catatan singkat model ACL Windows lewat FileSecurity.

Buka →
# Penanganan Kesalahan File

Tangani kegagalan operasi I/O lewat try-catch dengan memilih exception yang tepat: FileNotFoundException, DirectoryNotFoundException, dan UnauthorizedAccessException.

Buka →

Bab 29 Serialization dan Deserialization

# Konsep Serialization

Pahami masalah inti yang diselesaikan serialization: mengubah objek di memori menjadi aliran byte agar dapat dikirim atau disimpan, lalu mengembalikannya dengan deserialization.

Buka →
# System.Text.Json

Kenali System.Text.Json, serializer JSON bawaan .NET, beserta tiga API utamanya untuk serialisasi, deserialisasi, dan pembacaan dokumen JSON.

Buka →
# JSON Serialization

Serialisasi object C# menjadi string JSON dengan JsonSerializer, termasuk perilaku default penamaan properti dan escaping karakter khusus.

Buka →
# JSON Deserialization

Mengubah teks JSON kembali menjadi object C# dengan JsonSerializer.Deserialize serta memahami pencocokan nama properti yang sensitif huruf besar-kecil.

Buka →
# JSON Options dan Konverter

Menyesuaikan perilaku System.Text.Json melalui JsonSerializerOptions: naming policy, indentasi, dan opsi lain yang paling sering dipakai.

Buka →
# Custom JSON Converter

Menulis JsonConverter<T> sendiri untuk mengatur cara tipe kustom dibaca dan ditulis, termasuk validasi nilai saat deserialization.

Buka →
# XML Serialization

Serialisasi object menjadi XML dengan XmlSerializer, termasuk syarat class yang boleh diserialisasi dan bentuk keluaran defaultnya.

Buka →
# XmlReader dan XmlWriter

Menulis dan membaca XML secara streaming dengan XmlWriter dan XmlReader tanpa memetakan dokumen ke class.

Buka →
# CSV Data Handling

Memproses CSV secara manual dengan parser sederhana dan memahami jebakan string.Split ketika koma berada di dalam tanda kutip.

Buka →
# Binary Data Formats

Menulis dan membaca data biner dengan BinaryWriter dan BinaryReader, termasuk memahami urutan tipe yang menentukan panjang hasil.

Buka →
# Versioning Data Contract

Menjaga serialisasi tetap aman ketika schema berubah: properti baru, properti hilang, dan penegakan properti wajib dengan kata kunci required.

Buka →
# Polymorphic Serialization

Menyerialisasi hierarki class dengan atribut JsonPolymorphic dan JsonDerivedType, termasuk peran type discriminator saat deserialization.

Buka →
# Serialization Security

Risiko keamanan deserialisasi data dari pihak tidak dipercaya, penanganan JsonException, dan status BinaryFormatter di .NET 9.

Buka →

Bab 30 Date, Time, dan Globalization

# DateTime

Mengenal struct DateTime untuk menyimpan titik waktu: konstruktor, properti kalender, dan makna nilai Kind.

Buka →
# DateTimeOffset

Menyimpan titik waktu beserta offsetnya terhadap UTC menggunakan DateTimeOffset agar satu momen terwakili dengan unik.

Buka →
# DateOnly dan TimeOnly

Memakai DateOnly dan TimeOnly untuk tanggal dan jam murni tanpa komponen waktu atau tanggal yang mengganggu.

Buka →
# TimeSpan

Merepresentasikan durasi dengan TimeSpan: pembuatan, aritmetika, dan perbedaan properti TotalMinutes dengan komponen Minutes.

Buka →
# TimeZone

Bekerja dengan zona waktu melalui TimeZoneInfo: mencari zona Asia/Jakarta, konversi dari UTC, dan memeriksa offset resminya.

Buka →
# UTC dan Local Time

Memahami perbedaan UTC dan waktu lokal, serta cara konversi yang deterministik dengan zona waktu eksplisit.

Buka →
# Format dan Parsing Date

Mengubah DateTime menjadi teks dengan pola format dan menguraikan teks kembali dengan ParseExact serta TryParseExact secara culture-invariant.

Buka →
# CultureInfo

Mengenal CultureInfo sebagai wadah aturan budaya untuk format tanggal dan angka, dengan perbandingan id-ID dan InvariantCulture.

Buka →
# Globalization

Menyiapkan aplikasi untuk banyak budaya dengan CurrentCulture: satu kode, tampilan yang menyesuaikan aturan tiap culture.

Buka →
# Localization

Menyediakan teks terjemahan per bahasa dengan strategi pemilihan pesan dan fallback culture yang menjatuhkan diri ke bahasa dasar.

Buka →
# Number Formatting

Memformat dan mengurai angka dengan penentu format N dan C, serta memahami pembalikan pemisah ribuan dan desimal antar culture.

Buka →
# Sorting dan Collation

Mengurutkan teks dengan pembanding Ordinal dan pembanding culture, serta memahami collation sebagai aturan urutan abjad.

Buka →
# Internationalization Best Practices

Merangkum praktik internasionalisasi: simpan dengan format invariant, konversi zona secara eksplisit, dan tampilkan dengan culture pengguna.

Buka →

Bab 31 Asynchronous Programming

# Synchronous vs Asynchronous

Memahami perbedaan model eksekusi sinkron dan asinkron serta alasan operasi yang banyak menunggu sebaiknya ditulis asinkron.

Buka →
# Task dan Task<T>

Mengenal Task sebagai janji pekerjaan asinkron dan Task<T> untuk pekerjaan yang mengembalikan nilai.

Buka →
# Async dan Await

Memahami cara kata kunci async dan await membagi method menjadi bagian sebelum dan sesudah titik tunggu.

Buka →
# Task Return Types

Memilih return type yang tepat untuk method asinkron: Task, Task<T>, ValueTask<T>, dan kasus async void yang sebaiknya dihindari.

Buka →
# Task Composition

Merangkai beberapa operasi asinkron menjadi satu alur dengan await berantai dan lanjutan ContinueWith.

Buka →
# Task.WhenAll dan WhenAny

Menjalankan banyak task serentak dengan Task.WhenAll dan merespons task pertama yang selesai dengan Task.WhenAny.

Buka →
# Cancellation Token

Menghentikan operasi asinkron secara terkoordinasi dengan CancellationTokenSource dan CancellationToken.

Buka →
# Exception dalam Async

Memahami cara exception asinkron tersimpan di dalam Task dan dilempar ulang saat await, termasuk perilaku Task.WhenAll.

Buka →
# Async Streams

Mengonsumsi data yang datang seiring waktu dengan await foreach dan IAsyncEnumerable<T>.

Buka →
# IAsyncEnumerable

Membongkar anatomi IAsyncEnumerable<T> dan IAsyncEnumerator<T> di balik await foreach.

Buka →
# Async Iterators

Menulis produsen data asinkron dengan yield return di dalam method async yang mengembalikan IAsyncEnumerable<T>.

Buka →
# Asynchronous File IO

Membaca dan menulis berkas secara asinkron dengan API File async dan FileStream useAsync.

Buka →
# Asynchronous HTTP

Memanggil API HTTP tanpa menahan thread menggunakan HttpClient dan pasangan method asinkronnya.

Buka →
# Synchronization Context

Memahami ke mana eksekusi kembali setelah await dan peran SynchronizationContext serta ConfigureAwait(false).

Buka →
# Deadlock dan Common Mistakes

Memahami kebuntuan klasik akibat .Result dan .Wait() pada aplikasi UI secara konseptual, beserta daftar kesalahan umum asinkron.

Buka →
# Async Best Practices

Kumpulan praktik terbaik menulis kode asinkron: async sampai ke atas, teruskan CancellationToken, dan hindari pemblokiran.

Buka →
# Asynchronous Performance

Menilai performa kode asinkron dari tingkat konkurensi dan alokasi, serta keputusan teknis yang memengaruhinya.

Buka →