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.
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 var
penggunaan di sini? Apakah ada yang salah dengan kode ini yang saya lewatkan?
sumber
var
sini baik-baik saja. Anda mungkin dapat mengubahnya - tetapi meskipun begitu saya pikir itu tidak benar-benar diperlukan. Mengapa mengubahnya semua menjadi tipe eksplisit?vars
telah 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.Jawaban:
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":sumber
var
.var
, jadi saya tidak terlalu peduli apa pandangan MS tentang masalah ini.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.exe
telah dilakukan sejakvar
diperkenalkan), 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.
sumber