Apakah Microsoft mengecilkan penggunaan 'var' di C #? (VS2017)

15

Saya sedang melihat Visual Studio 2017 mendatang .

Di bawah bagian berjudul Boosted Productivity ada gambar Visual Studio yang digunakan untuk mengganti semua kejadian var dengan tipe eksplisit.

meningkatkan produktivitas VS2017

Kode tersebut ternyata memiliki beberapa masalah yang diidentifikasi oleh Visual Studio sebagai 'perlu diperbaiki'.

Saya ingin memeriksa kembali pemahaman saya tentang penggunaan var di C # jadi saya membaca sebuah artikel dari 2011 oleh Eric Lippert yang berjudul Uses dan penyalahgunaan pengetikan implisit .

Eric berkata:

  • Gunakan var ketika Anda harus; ketika Anda menggunakan jenis anonim.
  • Gunakan var ketika jenis deklarasi jelas dari penginisialisasi, terutama jika itu adalah objek penciptaan. Ini menghilangkan redundansi.
  • Pertimbangkan untuk menggunakan var jika kode menekankan "tujuan bisnis" semantik dari variabel dan meremehkan detail "mekanis" dari penyimpanannya.
  • Gunakan tipe eksplisit jika hal ini diperlukan agar kode dipahami dan dipelihara dengan benar.
  • Gunakan nama variabel deskriptif terlepas dari apakah Anda menggunakan "var". Nama variabel harus mewakili semantik variabel, bukan detail penyimpanannya; “DecimalRate” buruk; “InterestRate” bagus.

Saya pikir sebagian besar penggunaan var dalam kode ini mungkin ok. Saya pikir akan baik-baik saja untuk tidak menggunakan var untuk bit yang bertuliskan ...

var tweetReady = workouts [ ... ]

... karena mungkin itu bukan 100% langsung apa jenisnya tetapi bahkan kemudian saya tahu dengan cepat bahwa itu adalah boolean.

Penggunaan var untuk bagian ini ...

var listOfTweets = new List<string>();

... tampak bagi saya persis seperti penggunaan var yang baik karena saya pikir itu berlebihan untuk melakukan hal berikut:

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

Meskipun berdasarkan apa yang dikatakan Eric, variabel tersebut mungkin seharusnya berupa tweet daripada listOfTweets .

Apa yang menjadi alasan untuk mengubah semua varpenggunaan di sini? Apakah ada yang salah dengan kode ini yang saya lewatkan?

Rowan Freeman
sumber
Kode dalam tangkapan layar persis seperti yang Anda setujui tidak boleh menggunakan var ... Klarifikasi?
Telastyn
1
Saya pikir semua kegunaan di varsini baik-baik saja. Anda mungkin dapat mengubahnya - tetapi meskipun begitu saya pikir itu tidak benar-benar diperlukan. Mengapa mengubahnya semua menjadi tipe eksplisit?
Rowan Freeman
2
Perlu diingat bahwa apa yang jelas bagi manusia tidak selalu jelas bagi studio visual.
candied_orange
Semua? Anda memiliki satu kesalahan pada tangkapan layar yang jelas terkait dengan var.
Telastyn
Yah itu bukan kesalahan seperti itu melainkan peringatan dari jenis yang Anda harapkan menunjukkan. Menurut gambar, semua varstelah ditandai dengan cara yang sama; dengan tanda silang peringatan yang sama di sebelah mereka dan garis bawah merah. Agaknya Visual Studio ingin memperbaikinya dengan cara yang sama. Kecuali saya salah.
Rowan Freeman

Jawaban:

26

TL; DR: tidak, Microsoft tidak mengecilkan penggunaan 'var' di C #. Gambar tersebut kurang konteks untuk menjelaskan mengapa itu mengeluh.

Jika Anda menginstal VS2017 RC dan membuka panel Options dan pergi ke Text Editor -> C#, Anda akan melihat bagian baru: Code Style. Ini mirip dengan apa yang ditawarkan ReSharper untuk sementara waktu: seperangkat aturan yang dapat dikonfigurasi untuk gaya pengkodean.

Ini mencakup tiga opsi seputar penggunaan var: untuk tipe bawaan, ketika jenis variabel terlihat dan "Di tempat lain". Dalam setiap kasus, Anda dapat menentukan "prefer type eksplisit" atau "prefer var" dan mengatur level notifikasi ke "none", "saran", "warning" atau "error":

masukkan deskripsi gambar di sini

David Arno
sumber
3
Apa standarnya? Jika "pengaturan pabrik" adalah "Pilih jenis eksplisit" maka bisa dikatakan MS tidak mendukung penggunaan var.
JacquesB
@ JacquesB, standarnya seperti yang ditunjukkan pada tangkapan layar. Karena semua diatur ke "Tidak Ada", sulit untuk mengetahui apakah "Jenis eksplisit yang disukai" secara aktif ditetapkan sebagai cara pilihan MS, atau apakah itu hanya "nilai nol". Sejauh yang saya ketahui, para pengembang terbaik mendukung var, jadi saya tidak terlalu peduli apa pandangan MS tentang masalah ini.
David Arno
6

Saya pikir Anda terlalu banyak membaca. Jadi, ada fitur yang memungkinkan Anda untuk mengganti penggunaan pengetikan tersirat dengan anotasi jenis eksplisit, dan Anda menyimpulkan dari itu, pengetikan tersirat tidak disarankan. Ada juga fitur untuk mengkompilasi bytecode C♯ ke CIL, akankah Anda menyimpulkan bahwa C♯ tidak disarankan dan kita semua harus menulis bytecode CIL saja? Mungkin tidak.

Microsoft hanya menunjukkan pemahaman mendalam yang dimiliki IDE tentang kode Anda. Itu bahkan dapat menulis tipe Anda untuk Anda tanpa Anda harus mengejanya. Itu dia.

Ini hanyalah contoh yang baik untuk memamerkan kemampuan pemahaman kode IDE. Ini kecil dan mandiri (tidak seperti menunjukkan refactoring yang lebih besar), tersedia dalam semua edisi dan berlaku untuk semua pengembang (tidak seperti beberapa fitur visualisasi arsitektur yang sangat mengesankan yang hanya tersedia di Ultimate dan tidak berlaku untuk sebagian besar pengguna potensial VS yang tidak akan pernah memiliki proyek sebesar itu), dan meskipun sangat sederhana (secara harfiah melakukan hal yang persis sama csc.exetelah dilakukan sejakvardiperkenalkan), itu tentu terlihat mengesankan, terutama bagi seseorang yang tidak benar-benar memahami pengetikan dan tipe inferensi implisit (atau yang mencoba google "mengetik inferensi" dan dibanjiri dengan istilah-istilah seperti Hindley-Milner, unifikasi, backtracking, padahal sebenarnya Inferensi lokal C♯ sangat sederhana dan mudah).

Jadi, singkatnya: ini adalah cara mencolok untuk memamerkan fitur IDE.

Jörg W Mittag
sumber