it-swarm.asia

Değişken veri türlerini 'var' anahtar kelimesini kullanarak mı?

C # 'da, her değişken bildirimi için çok amaçlı var anahtar sözcüğünü kullanmam önerilir mi? Evetse, aşağıdaki ifadede ondalık için M gibi değişken bildirimi içindeki değişmez değerler için bu özel karakterlerden bahsetmem gerekir mi:

var myDecimal = 14.5M;

Bir fark yaratırsa, C # ile bazı web geliştirme yapmaya çalışıyorum.

35
wassimans

Var kullanımı konusunda birçok anlaşmazlık var. Genel kurallarým şunlardır.

  • Tür, atamanın sağ elinin bir kurucu olduğu gibi açık olduğunda var.
  • Tür yazmak için karmaşık olduğunda, örneğin bir LINQ sorgusu (ilk etapta var nedeni) var.
  • Değişkeninizin doğru yazıldığından emin olmak istediğiniz kararsız türler için (Ondalık örneğinizdir), heceleyin.
  • Anonim türlerde var.
  • Diğer tüm durumlarda türü heceleyin.

Temel olarak amaç, kodu okumayı kolaylaştırmaktır. Ödevin apaçık olduğu için var'ın yeterli olduğunu düşünüyorsanız var. Gerekli olduğunu düşündüğünüzde tam tür adını okuyucu için bir ipucu olarak kullanın.

54
Michael Brown

var ne zaman kullanılır? Bir programlama "kutsal savaştır". Tam olarak gerekli olduğu bir yer vardır: bir işlemin sonucu anonim bir tür oluşturduğunda, örneğin:

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

Başka herhangi bir yerde, isteğe bağlı ve gerçekten diğer durumlarda kodlama standardına bağlı olarak kullanmanız gerekir.

Ve evet, derleyiciye sağ tarafta ne olduğunu bildirmek için değişmez özel karakterlere ihtiyacınız olacak. Örneğin, M olmadan, varsayılan değer double yerine decimal şeklindedir.

14
Jesse C. Slicer

MSDN'den :

Ancak, var kullanımı en azından kodunuzu diğer geliştiriciler için anlaşılmasını zorlaştırma potansiyeline sahiptir. Bu nedenle, C # belgeleri genellikle yalnızca gerektiğinde var kullanır.

Gerçekten, gerçekten örtük yazmayı sevmiyorum. Yüzeyde, kodu daha okunabilir yapma eğilimindedir, ancak yolda birçok soruna yol açabilir. Bir geliştirici değişken başlatıcıyı değiştirirse, diyelim ki

var myFloat=100f;

için

var myFloat=100;

veya

var myFloat=100.0;

Tür değişecek, tüm derleyici hatalarıyla sonuçlanacak veya web görünümündeyse ve görünümlerinizi önceden derlemek için oluşturma sonrası adımını kullanmıyorsanız, etkili olmadan yakalanmayacak bir dizi çalışma zamanı hatası dağıtım öncesi testi.

Örtük yazma da her yerde çalışmaz (aynı MSDN bağlantısından)

var yalnızca yerel bir değişken aynı ifadede bildirildiğinde ve başlatıldığında kullanılabilir; değişken null değerine, yöntem grubuna veya anonim işleve başlatılamaz.

var, sınıf kapsamındaki alanlarda kullanılamaz.

Var kullanılarak bildirilen değişkenler başlatma ifadesinde kullanılamaz. Başka bir deyişle, bu ifade yasaldır: int i = (i = 20); ancak bu ifade bir derleme zamanı hatası üretir: var i = (i = 20);

Örtülü olarak yazılan birden çok değişken aynı ifadede başlatılamaz.

Var adında bir tür kapsamdaysa, var anahtar sözcüğü bu tür adına çözümlenir ve örtük olarak yazılan bir yerel değişken bildiriminin parçası olarak değerlendirilmez.

Kodunuzu tutarlı tutmak (bu durumda, her yerde açık yazım kullanmak) çok, çok iyi bir şeydir. Kanımca, var tembeldir ve gerçek bir fayda sağlamaz ve zaten karmaşık bir süreçte başka bir potansiyel başarısızlık noktası ortaya çıkarır.

2017 Güncellemesi

Fikrimi tamamen değiştirdim. C # ile çalışırken, çoğu zaman var kullanıyorum (arayüz tipi değişkenler gibi şeyler hariç). Okunabilirliği artıran kodu ters tutar. Yine de - çözülen türün gerçekte ne olduğuna dikkat edin.

7
3Dave

C # Referans, bu yapının iyi veya kötü kullanımını göstermek için aşağıdakileri gösterir:

Aşağıdaki örnekte iki sorgu ifadesi gösterilmektedir. İlk ifadede, sorgu sonucunun türü açıkça bir IEnumerable olarak belirtilebildiğinden, var kullanımına izin verilir, ancak zorunlu değildir. Ancak, ikinci ifadede, sonuç anonim türlerin bir toplamı olduğu ve bu türün adına derleyicinin kendisi dışında erişilemediğinden var kullanılmalıdır. Örnek 2'de, foreach yineleme değişkeni öğesinin de örtük olarak yazılması gerektiğini unutmayın.

 // 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

Var anahtar sözcüğü yalnızca derleyiciden var tür değişkeninin türünü otomatik olarak çıkarmasını ister. Bu nedenle, bir ondalık tür değişkenini bir değişkene depolamak istiyorsanız, m'yi kullanmanız gerekir. Aynı şekilde bir dize saklıyorsanız, onu tırnak içine almanız gerekir.

0

Benim için aşağıdaki durumlarda var kullanmıyorum:

  • Değişkenimin türünden emin olmak istediğimde (örneğin, kullanılan türün ondalık değil çift olduğundan emin olun ve bu büyük bir güven bana güven!)
  • Fruit foo = new Apple(); gibi polimorfik kod. Bu durumda, var olmaktan kaçınmak ve kod sınıfının daha iyi anlaşılmasına ve olası hataların sınırlandırılmasına izin vererek üst sınıfın (burada Meyve) daha iyi olduğunu düşünüyorum (var ile polimorfik kavramın kontrolü yok!)

Geri kalanı için, durumun ve geliştiricinin arka planına bağlı olduğunu düşünüyorum. PHP dünyasından bazı insanlar değişken türlerine dikkat etmemeyi tercih edecek ve Java dünyasından sadece var var bir sapkınlık ve ne kadar ayrıntılı olursa o kadar iyi olur.

Kişisel görüşlerinizi bildirmeniz gerekecek :)

0
eka808