it-swarm-id.com

Mendefinisikan secara eksplisit tipe data variabel vs. menggunakan kata kunci 'var'?

Dalam C #, apakah saya didorong untuk menggunakan kata kunci var serba guna untuk setiap deklarasi variabel? Jika ya, apakah saya harus menyebutkan karakter khusus untuk nilai literal dalam deklarasi variabel seperti M untuk desimal dalam pernyataan berikut:

var myDecimal = 14.5M;

Jika ada bedanya, saya mencoba melakukan pengembangan web dengan C #.

35
wassimans

Ada banyak perselisihan tentang penggunaan var. Aturan umum saya adalah sebagai berikut.

  • Ketika tipenya jelas seperti ketika tangan kanan penugasan adalah konstruktor, gunakan var.
  • Ketika jenis ini rumit untuk ditulis, seperti kueri LINQ (alasan untuk var di tempat pertama) gunakan var.
  • Untuk tipe ambivalen (Desimal Anda menjadi contoh) di mana Anda ingin memastikan bahwa variabel Anda diketik dengan benar, tuliskan.
  • Jenis anonim harus menggunakan var.
  • Dalam semua kasus lain, ketikkan jenisnya.

Pada dasarnya, tujuannya adalah untuk membuatnya lebih mudah untuk membaca kode. Jika Anda merasa bahwa var cukup karena tugasnya jelas, gunakan var. Gunakan nama tipe lengkap sebagai petunjuk bagi pembaca ketika Anda merasa perlu.

54
Michael Brown

Kapan menggunakan var adalah pemrograman "perang suci". Tepatnya ada satu tempat di mana diperlukan: ketika hasil operasi membuat jenis anonim, seperti:

var result = new { Name = "John", Age = 35 };

Di tempat lain, itu opsional dan benar-benar sesuai dengan standar pengkodean Anda untuk menggunakannya atau tidak dalam situasi lain.

Dan ya, Anda akan membutuhkan karakter khusus untuk literal agar kompiler tahu apa itu di sisi kanan. Dalam contoh Anda, tanpa M, standarnya adalah double daripada decimal.

14
Jesse C. Slicer

Dari MSDN :

Namun, penggunaan var setidaknya memiliki potensi untuk membuat kode Anda lebih sulit dipahami oleh pengembang lain. Karena alasan itu, dokumentasi C # umumnya menggunakan var hanya saat diperlukan.

Saya benar-benar tidak suka mengetik secara implisit. Di permukaan itu cenderung membuat kode lebih mudah dibaca, tetapi dapat menyebabkan banyak masalah di jalan. Jika dev mengubah penginisialisasi variabel, katakanlah, dari

var myFloat=100f;

untuk

var myFloat=100;

atau

var myFloat=100.0;

Jenisnya akan berubah, menghasilkan seluruh kesalahan kompiler atau, jika itu dalam tampilan web dan Anda tidak menggunakan langkah post-build untuk mengkompilasi pandangan Anda, seluruh kesalahan runtime yang tidak akan ditangkap tanpa efektif pengujian pra-penempatan.

Mengetik tersirat juga tidak berfungsi di mana-mana (dari tautan MSDN yang sama)

var hanya dapat digunakan ketika variabel lokal dideklarasikan dan diinisialisasi dalam pernyataan yang sama; variabel tidak dapat diinisialisasi ke nol, atau ke grup metode atau fungsi anonim.

var tidak dapat digunakan pada bidang di lingkup kelas.

Variabel yang dideklarasikan dengan menggunakan var tidak dapat digunakan dalam ekspresi inisialisasi. Dengan kata lain, ungkapan ini sah: int i = (i = 20); tetapi ungkapan ini menghasilkan kesalahan waktu kompilasi: var i = (i = 20);

Beberapa variabel yang diketik secara implisit tidak dapat diinisialisasi dalam pernyataan yang sama.

Jika jenis bernama var berada dalam ruang lingkup, maka kata kunci var akan memutuskan untuk nama tipe itu dan tidak akan diperlakukan sebagai bagian dari deklarasi variabel lokal yang diketik secara implisit.

Menjaga kode Anda konsisten (dalam hal ini, menggunakan pengetikan eksplisit di mana-mana) adalah hal yang sangat, sangat baik. Menurut pendapat saya, var malas dan tidak memberikan manfaat nyata, dan memperkenalkan titik kegagalan potensial lain dalam proses yang sudah kompleks.

Pembaruan 2017

Saya benar-benar berubah pikiran. Ketika bekerja di C #, saya menggunakan var sebagian besar waktu (kecuali hal-hal seperti variabel tipe antarmuka dan semacamnya). Itu membuat kode singkat yang meningkatkan keterbacaan. Namun, tetap - perhatikan apa jenis yang dipecahkan sebenarnya.

7
3Dave

Referensi C # menunjukkan yang berikut untuk menggambarkan penggunaan yang baik vs buruk dari konstruksi ini:

Contoh berikut menunjukkan dua ekspresi kueri. Dalam ekspresi pertama, penggunaan var diizinkan tetapi tidak diperlukan, karena jenis hasil kueri dapat dinyatakan secara eksplisit sebagai IEnumerable. Namun, dalam ekspresi kedua, var harus digunakan karena hasilnya adalah kumpulan tipe anonim, dan nama tipe itu tidak dapat diakses kecuali ke kompiler itu sendiri. Perhatikan bahwa dalam Contoh # 2, item variabel iterasi foreach juga harus diketik secara implisit.

 // Example #1: var is optional because 
    // the select clause specifies a string 
    string[] words = { "Apple", "strawberry", "grape", "Peach", "banana" };
    var wordQuery = from Word in words
                    where Word[0] == 'g'
                    select Word;

    // Because each element in the sequence is a string,  
    // not an anonymous type, var is optional here also. 
    foreach (string s in wordQuery)
    {
        Console.WriteLine(s);
    }

    // Example #2: var is required because 
    // the select clause specifies an anonymous type 
    var custQuery = from cust in customers
                    where cust.City == "Phoenix" 
                    select new { cust.Name, cust.Phone };

    // var must be used because each item  
    // in the sequence is an anonymous type 
    foreach (var item in custQuery)
    {
        Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
    }
3

Kata kunci var hanya meminta kompiler untuk menyimpulkan tipe variabel tipe var secara otomatis. Oleh karena itu, jika Anda ingin menyimpan variabel tipe desimal dalam variabel var, Anda harus menggunakan m. Demikian juga jika Anda menyimpan string, Anda harus menyertakannya dalam tanda kutip.

0

Bagi saya, saya tidak menggunakan var untuk kasus-kasus berikut:

  • Ketika saya ingin memastikan jenis variabel saya (misalnya untuk memastikan bahwa jenis yang digunakan adalah ganda dan bukan desimal, dan ini adalah masalah besar percayalah!)
  • Kode polimorfik seperti Fruit foo = new Apple();. Dalam hal ini, saya pikir var adalah untuk menghindari dan menggunakan kelas induk (di sini Buah) lebih baik dengan memungkinkan pemahaman yang lebih baik tentang logika kode dan batasan bug yang mungkin terjadi (Dengan var, tidak ada pemeriksaan konsep polimorfik!)

Untuk selebihnya, saya pikir itu tergantung pada kasus dan latar belakang pengembang. Beberapa orang dari dunia PHP akan lebih suka tidak merawat tipe variabel, dan beberapa orang dari dunia Java dunia hanya akan berpikir bahwa var adalah bid'ah dan semakin banyak kata itu semakin baik.

Anda harus membuat opini pribadi Anda :)

0
eka808