Microsoft, C # 'var' kullanımını cesaret kırıyor mu? (VS2017)


16

Yakında çıkacak olan Visual Studio 2017'ye bakıyorum .

Artırılmış Verimlilik başlıklı bölümün altında var olan tüm oluşumları açık türle değiştirmek için kullanılan bir Visual Studio görüntüsü vardır .

arttırılmış verimlilik VS2017

Kodun görünüşe göre Visual Studio'nun 'düzeltilmesi gerekiyor' olarak tanımladığı çeşitli sorunları var.

C # 'da var kullanımı konusundaki anlayışımı tekrar kontrol etmek istedim, bu yüzden 2011'den Eric Lippert'in örtülü yazmanın Kullanımları ve yanlış kullanımları adlı bir makalesini okudum .

Eric diyor ki:

  • Gerektiğinde var kullanın; anonim türler kullanırken.
  • Bildirimin türü, başlatıcıdan belirgin olduğunda, özellikle de bir nesne oluşturma ise var kullanın. Bu fazlalığı ortadan kaldırır.
  • Kod değişkenin semantik “iş amacını” vurgular ve depolamanın “mekanik” ayrıntılarını önemsiz gösterirse var kullanmayı düşünün.
  • Kodun doğru anlaşılması ve sürdürülmesi için gerekliyse açık türleri kullanın.
  • “Var” kullanıp kullanmadığınıza bakılmaksızın açıklayıcı değişken adları kullanın. Değişken isimleri, depolamanın ayrıntılarını değil, değişkenin anlamını temsil etmelidir; “DecimalRate” kötü; “InterestRate” iyidir.

Ben kodda var kullanım çoğu muhtemelen ok düşünüyorum. Ben ok bit biraz var kullanmamın iyi olacağını düşünüyorum ...

var tweetReady = workouts [ ... ]

... çünkü ne tür% 100 hemen değil ama o zaman bile bunun çok hızlı olduğunu biliyorum boolean.

Var bu bölümü için kullanım ...

var listOfTweets = new List<string>();

... bana görünüyor tam olarak iyi kullanımı gibi var onun 'için gereksiz aşağıdakileri yapmanız düşünüyorum çünkü:

List<string> listOfTweets = new List<string>();

Eric'in söylediklerine dayanarak değişkenin muhtemelen listOfTweets yerine tweet olması gerekir .

varBuradaki kullanımın tamamını değiştirmenin nedeni ne olurdu ? Bu kodda eksik olduğum bir sorun var mı?


Ekran görüntüsündeki kod, tam olarak kullanmamayı kabul ettiğiniz bir şeydir ... Açıklama?
Telastyn

1
varBuradaki tüm kullanımların iyi olduğunu düşünüyorum . Muhtemelen birini değiştirebilirsin - ama o zaman bile bunun gerçekten gerekli olmadığını düşünüyorum. Neden hepsini açık tip olarak değiştirelim?
Rowan Freeman

2
İnsanlar için açık olan şeyin görsel stüdyo için her zaman açık olmadığını unutmayın.
candied_orange

Herşey? Ekran görüntüsünde açıkça var ile ilgili bir hata var.
Telastyn

Bu bir hata değil, bir linterın işaret etmesini beklediğiniz türden bir uyarı. Görüntüye göre, hepsi varsaynı şekilde işaretlenmiştir; yanında aynı uyarı işareti ve kırmızı alt çizgi bulunur. Muhtemelen Visual Studio hepsini aynı şekilde düzeltmek istiyor. Yanılmıyorsam.
Rowan Freeman

Yanıtlar:


27

TL; DR: hayır, Microsoft C # 'var' kullanımını cesaretlendirmiyor. Görüntü neden şikayetçi olduğunu açıklamak için bağlamdan yoksundur.

Eğer VS2017 RC yükleyip Seçenekler panelini açıp giderseniz Text Editor -> C#, yeni bir bölüm göreceksiniz: Code Style. Bu, ReSharper'ın bir süredir sunduklarına benzer: kodlama stilleri için bir dizi yapılandırılabilir kural.

Kullanımı ile ilgili üç seçenek içerir var: değişken türleri görünür olduğunda ve "Başka bir yerde" olduğunda yerleşik türler için. Her durumda, "müstehcen türü tercih et" veya "var tercih et" seçeneğini belirtebilir ve bildirim düzeyini "yok", "öneri", "uyarı" veya "hata" olarak ayarlayabilirsiniz:

resim açıklamasını buraya girin


3
Varsayılan değer nedir? "Fabrika ayarı" "Müstehcen türü tercih" ise, MS'in kullanımını engellemiş olduğu söylenebilir var.
JacquesB

@JacquesB, varsayılanlar ekran görüntüsünde gösterildiği gibidir. Tümü "Hiçbiri" olarak ayarlandığından, "Müstehcen türü tercih et" in aktif olarak MS'nin tercih ettiği yol olarak ayarlanıp ayarlanmadığını veya bunun yalnızca "sıfır değeri" olup olmadığını bilmek zordur. Bildiğim kadarıyla, en iyi geliştiriciler tüm lehine var, bu yüzden MS'in bu konudaki görüşlerinin ne olduğu umurumda değil.
David Arno

6

Bence çok fazla okuyorsun. Dolayısıyla, örtük yazmanın kullanımlarını açık tür ek açıklamalarıyla değiştirmenize izin veren bir özellik vardır ve bundan dolaylı yazımın önerilmez. C♯'den CIL bayt koduna derleme özelliği de vardır, C♯'nin cesaretinin kırıldığı sonucuna varır mısınız ve hepimiz bunun yerine CIL bayt kodunu yazmalıyız? Muhtemelen değil.

Microsoft, IDE'nin kodunuzdaki derin anlayışını gösteriyor. Bunları hecelemek zorunda kalmadan sizin için türlerinizi bile yazabilir. Bu kadar.

Bu sadece IDE'nin kod anlama yeteneklerini göstermenin iyi bir örneğidir. Küçük ve bağımsızdır (daha büyük bir yeniden düzenleme göstermekten farklı olarak), tüm sürümlerde mevcuttur ve tüm geliştiriciler için geçerlidir (yalnızca Ultimate'da bulunan ve önemli bir bölüme uygulanamayan, çok etkileyici mimari görselleştirme özelliklerinin aksine hiçbir zaman bu kadar büyük projelere sahip olmayacak potansiyel kullanıcıların) ve çok basit olmasına rağmen (tam anlamıyla aynı şeyi csc.exeyapıyor.varözellikle örtük yazmayı ve tür çıkarımını gerçekten anlamayan (veya Google "tür çıkarımı" yapmaya çalışan ve aslında Hindley-Milner, birleşme, geri izleme gibi terimlerle boğulmuş olan birine kesinlikle etkileyici görünüyor. C♯'nin sadece yerel çıkarımları son derece basit ve açıktır).

Kısacası, IDE özelliğini göstermenin gösterişli bir yoludur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.