Klasifikasi Tipe Nilai dan Tipe Referensi
Tipe bawaan yang sudah didefinisikan
| Kategori | Tipe yang termasuk |
|---|---|
| Tipe Nilai (Angka dasar / Boolean / Karakter) | Bilangan bulat bertanda: sbyte, short, int, longBilangan bulat tak bertanda: byte, ushort, uint, ulongTitik mengambang / presisi tinggi: float, double, decimalBoolean: boolKarakter: char |
| Tipe Referensi (Referensi bawaan) | object (kelas dasar semua tipe), string, dynamic |
Tipe buatan pengguna
| Kategori | Tipe |
|---|---|
| Tipe Nilai | struct (struktur), enum (enumerasi) |
| Tipe Referensi | class, interface, delegate, array (larik) |
Sesuai penjelasan di pertemuan sebelumnya, data tipe referensi pasti disimpan di heap. Sedangkan data tipe nilai bisa tersimpan di heap ataupun di stack.
Bagian referensi dari tipe referensi bisa ditempatkan di heap, bisa juga di stack.
Apakah variabel tipe nilai atau bagian referensi tipe referensi berada di heap atau stack, bergantung apakah variabel tersebut merupakan anggota tipe atau variabel lokal di dalam fungsi.
Empat Jenis Variabel
| Jenis Variabel | Definisi dan Fungsi |
|---|---|
| Variabel Lokal Local variable | Data sementara di dalam metode, bukan anggota tipe; Disimpan di stack Tidak diinisialisasi secara otomatis |
| Bidang Field | Data yang terikat pada kelas / struktur, merupakan anggota tipe; Bidang kelas disimpan di heap Bidang struktur mengikuti tempat penyimpanan struktur; Diinisialisasi secara otomatis |
| Parameter Parameter | Variabel sementara untuk argumen metode, bukan anggota tipe; Disimpan di stack Tidak diinisialisasi secara otomatis |
| Elemen Larik Array element | Satu data di dalam larik; Semua ditempatkan di heap Diinisialisasi secara otomatis |
Inisialisasi otomatis berarti kompiler akan memberikan nilai awal bawaan pada variabel meskipun pemrogram tidak menetapkan nilai awal secara manual.
Ringkasan yang lebih sederhana
| Jenis Variabel | Tempat Penyimpanan | Inisialisasi Otomatis |
|---|---|---|
| Variabel Lokal | Stack / Stack + Heap | Tidak |
| Bidang Kelas | Heap | Ya |
| Bidang Struktur | Stack / Heap | Ya |
| Parameter Metode | Stack | Tidak |
| Elemen Larik | Heap | Ya |

Deklarasi Variabel
Format:Tipe NamaVariabel;
int var2;Code language: C# (cs)
Kode di atas berfungsi mendeklarasikan variabel dan menyelesaikan dua hal utama:
- Memberitahu kompiler bahwa var2 adalah variabel bertipe int dengan nama var2.
- Kompiler akan mengalokasikan ruang memori. Tempat alokasi heap atau stack bergantung pada konteks, apakah variabel ini variabel lokal, parameter, bidang, dan sebagainya.

Inisialisator Variabel (Initializer)
Sintaks:Tipe NamaVariabel = NilaiAwal;
Contoh:int var2 = 17;
Inisialisator adalah fitur kompiler untuk membantu menginisialisasi variabel. Beberapa variabel wajib diinisialisasi secara eksplisit di kode, sedangkan variabel lain bisa diserahkan kepada inisialisator untuk diproses otomatis.
Variabel lokal yang belum diinisialisasi memiliki nilai tidak terdefinisi, akan menimbulkan galat kompilasi dan tidak dapat digunakan langsung;
Variabel yang mendukung inisialisasi otomatis seperti bidang dan elemen larik akan diberikan nilai bawaan: tipe angka bernilai 0, tipe referensi bernilai null.
Silakan lihat contoh berikut:
class Program
{
static void Main(string[] args)
{
int times = 100;
Person person = new Person();
}
}
class Person
{
public int age;
}
Code language: C# (cs)
Contoh sederhana ini mendeklarasikan variabel tipe nilai times dan variabel tipe referensi person di fungsi Main. Di dalam tipe referensi terdapat sebuah bidang bernama age.
age tidak diberi nilai awal, sedangkan times kita berikan nilai awal secara manual.
Kode ini dapat dikompilasi dengan normal.

Jika kita menghapus nilai awal 100 dari times dan menulisnya seperti berikut

Garis bergelombang merah akan muncul di bawah variabel dan kode tidak bisa dikompilasi.
Jika dipaksa kompilasi, pesan galat akan muncul

Jendela daftar galat akan menampilkan detail kesalahan

Catatan: Galat hanya muncul jika variabel times digunakan di dalam kode. Jika variabel tidak pernah dipanggil, tidak akan ada galat dan tetap bisa dikompilasi.
class Program
{
static void Main(string[] args)
{
int times;
Person person = new Person();
}
}
Code language: C# (cs)
Berbeda dengan bidang di dalam tipe, contohnya age di kelas Person berikut. Tanpa nilai awal, kode tetap bisa dikompilasi dan dijalankan.
class Program
{
static void Main(string[] args)
{
int times = 100;
Console.WriteLine(times);
Person person = new Person();
Console.WriteLine(person.age);
}
}
class Person
{
public int age;
}
Code language: C# (cs)

Anda akan melihat keluaran bernilai 0. Karena age merupakan bidang anggota kelas tanpa inisialisasi manual, inisialisator akan memberinya nilai bawaan. Nilai bawaan int adalah 0, setiap tipe memiliki nilai bawaan yang berbeda.
Deklarasi Beberapa Variabel Dalam Satu Baris
- Satu baris hanya boleh mendeklarasikan variabel dengan tipe yang sama;
- Nama variabel dipisahkan koma, dapat mencampur variabel yang sudah diinisialisasi dan belum diinisialisasi;
- Dilarang mencampur beberapa tipe data dalam satu baris.
// Valid
int var3 = 7, var4, var5 = 3;
double var6, var7 = 6.52;
// Tidak valid! Mencampur int dan float
int var8, float var9;
Code language: JavaScript (javascript)
Menggunakan Nilai Variabel
Cukup tuliskan nama variabel untuk membaca nilai yang tersimpan di memori:
Console.WriteLine("{0}", var2);Code language: JavaScript (javascript)

Variabel