Inferensi Tipe

Inferensi Tipe dan Kata Kunci var

Perhatikan kode di bawah ini. Tipe data yang tertulis di awal deklarasi variabel bisa dideteksi secara otomatis oleh kompiler melalui nilai inisialisasi di sebelah kanan tanda sama dengan. Misalnya, apakah angka 18 dapat disimpulkan sebagai bilangan bulat int, dan Phone() dapat dikenali sebagai tipe Phone?

static void Main( )
{
    int age = 18; // Nilai 18 di kanan langsung disimpulkan sebagai int
    Phone p = new Phone(); // Konstruktor di kanan mengembalikan objek Phone
}
Code language: C# (cs)

Jadi, apakah kode di atas masih bisa disederhanakan?

Bahasa C# menyediakan kata kunci var untuk memperpendek penulisan dan menggantikan penulisan tipe secara eksplisit.

static void Main( )
{
    var age = 18;
    var p = new Phone();
}
Code language: JavaScript (javascript)

Di kode ini semua variabel di sebelah kiri menggunakan var. Kompiler akan menentukan tipe data berdasarkan ekspresi di sebelah kanan. Setelah dikompilasi, kedua potongan kode ini sama persis.

Catatan Penting

  1. var bukan tipe dinamis, hanya bentuk singkat sintaks. Kompiler akan mengunci tipe yang diinferensikan saat kompilasi dan tidak bisa diubah lagi; kedua kode memiliki makna yang sepenuhnya setara.
  2. Aturan wajib saat menggunakan var:
    • Hanya dapat digunakan pada variabel lokal, tidak boleh digunakan untuk field kelas
    • Saat mendeklarasikan variabel harus disertai nilai awal, tulisan var x; saja tidak diperbolehkan
    • Tipe hasil inferensi bersifat tetap, variabel tidak bisa menyimpan data dengan tipe lain setelahnya
  3. Perbedaan penting: var milik C# ≠ var milik JavaScript. var di JavaScript menggunakan tipe dinamis lemah, variabel bisa berganti tipe kapan saja. var di C# hanyalah singkatan untuk tipe statis kuat dan tidak mengubah sifat C# sebagai bahasa tipe kuat.

Artinya, pada tahap kompilasi, kompiler membaca bagian kanan lalu menetapkan tipe age sebagai int dan tipe p sebagai Phone. Hasil akhirnya sama persis dengan kode pertama.

Tipe variabel tidak dapat diubah setelah itu. Berikut contohnya:

class Program
{
    static void Main()
    {
        var age = 18;
        age = 3.14;
        var p = new Phone();
    }
}

class Phone
{
    public string Name { get; set; }
}Code language: C# (cs)

Cara penulisan seperti ini akan menghasilkan error di C#, namun diizinkan pada bahasa lain seperti JavaScript dan PHP yang memperbolehkan perubahan tipe variabel.

JavaScript dan PHP termasuk bahasa dengan tipe lemah dan tipe dinamis, variabel tidak memiliki batasan tipe yang tetap.

Contoh yang Salah


class Program
{
    static void Main()
    {
        var age = 18;
        age = 3.14;
        var p = new Phone();

        var isBuy;
    }
}

class Phone
{
    var price = 1000;
    var model = "iPhone";

    int count = 12;
}Code language: C# (cs)

Inferensi Tipe

Previous:

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *