Saya belum melihat siapa pun mengomentari pertanyaan eksplisit ke-2 Anda di akhir: "2: apakah ini cukup menarik bagi saya untuk mempertimbangkan pindah ke C # jika casing VB.NET entah bagaimana membatasi apa yang dapat saya lakukan dengan kode?"
Saya lebih suka pendekatan opsi yang lebih banyak bahwa C # memungkinkan pemrogram memilih apakah daripada membatasi opsi pemrogram. Saya sangat suka C #, tetapi untuk sensitivitas huruf saja, saya bahkan tidak akan berpikir itu dekat dengan belajar bahasa hanya karena peka huruf besar / kecil. semua fitur penting, dan ketika saya melihat keuntungan dari keduanya, C # dan VB.NET, saya sangat memilih C #. tetapi saya akan memberikan perspektif yang benar-benar seimbang, bias ya, karena saya memiliki preferensi, tetapi saya akan jujur tentang kerugian C # juga.
pertama, kedua bahasa memiliki kelebihan dan kekurangan. perbedaan yang dapat Anda lakukan dalam satu bahasa yang tidak dapat dilakukan dalam bahasa lain semakin berkurang karena, untungnya, Microsoft meningkatkan kedua bahasa tersebut, dan mereka tampaknya tidak menunjukkan keberpihakan yang tidak adil terhadap kedua bahasa tersebut.
ketika C # pertama kali keluar, VB tidak memiliki komentar XML yang dapat Anda letakkan sebelum metode, yang saya sukai di C #. saya benci itu di VB.NET. tetapi saya telah melihat selama bertahun-tahun, bahwa banyak fitur yang tidak ada dalam satu bahasa ditambahkan ke bahasa lain. (tim pengembang MS yang sama mengembangkan C # dan VB, jadi masuk akal jika fiturnya menjadi sangat mirip.)
tetapi Anda menanyakan apa yang dimiliki C # sedangkan VB tidak. inilah beberapa yang dapat saya pikirkan segera:
1: C # lebih ringkas dan tidak perlu mengetik .. dalam BANYAK cara! Saya bahkan pernah melihat kebodohan berbicara ketika klaim sebaliknya dibuat, bahwa VB menghemat pengetikan. tapi tolong dengarkan orang-orang yang memberi tahu Anda bahwa mereka menggunakan kedua bahasa tersebut, dan keduanya tidak jarang digunakan. saya menggunakan C # danVB, C # di rumah karena saya menyukainya (dan ketika saya bekerja dengan C # di tempat kerja), dan pekerjaan terbaru saya meminta agar saya menggunakan VB dan bukan C #. jadi saya semakin sering menggunakan VB sekarang (sekitar 10 bulan sekarang), tetapi dalam kesaksian pribadi saya, saya lebih suka C #, dan dalam hal pengetikan sebenarnya, VB jauh lebih banyak mengetik. satu contoh yang pernah saya baca di mana seseorang benar-benar mencoba mengatakan VB lebih ringkas, memberikan contoh 'with ...' dengan variabel panjang di dalam, jadi di VB, Anda bisa menggunakan '.property'. ini adalah kebodohan dalam mengklaim bahwa VB membutuhkan lebih sedikit pengetikan. Ada beberapa hal (dan bukan hanya contoh ini) di mana VB lebih pendek, tetapi lebih banyak kali ketika C # lebih ringkas, dalam praktik nyata.
tetapi alasan terbesar saya percaya C # lebih ringkas, adalah pernyataan VB "IF / THEN". jika pernyataan umum. di C # tidak ada kata 'lalu' untuk diketik! :) juga semua pernyataan 'end ...' membutuhkan pengetikan yang di c #, biasanya hanya satu tanda kurung tutup '}'. Saya telah membaca bahwa beberapa orang mengklaim ini lebih verboseness di VB.NET adalah keuntungan untuk VB karena beberapa pernyataan / simbol blok penutup dapat bersarang dan segera berakhir di samping satu sama lain, tetapi saya sangat tidak setuju. seseorang hampir selalu dapat menulis program dengan lebih baik baik dalam C # atau VB daripada pemrogram lain karena revisi kode berikutnya dapat dirancang lebih baik. ini berlaku untuk 'banyak kurung kurawal tutup membingungkan di C #' ditambah jika blok bersarang semua jenis yang sama seperti beberapa IF bersarang maka VB menderita masalah yang sama seperti di C #. ini tidak ada keuntungan di VB. situasi ini persisnya mengapa saya suka berkomentar tentang apa simbol penutup atau pernyataan penutup saya dalam kedua bahasa tersebut. ya, ini lebih bertele-tele untuk dilakukan, tetapi dalam kedua bahasa, Anda memiliki opsi untuk menjelaskan, yang penting dalam kasus spesifik situasional berbasis penilaian. saya pikir kejelasan kode cukup penting.
2: VB tidak memiliki komentar multi-baris. ketika saya bekerja dengan VB saya tidak keberatan. lalu saya beralih ke beberapa bahasa gaya C. sekarang saya kembali kebanyakan menggunakan VB.NET di tempat kerja, dan saya merindukan mereka. itu hanya sesuatu yang Anda anggap nyaman, dan kemudian harus hilang. :(
3: VB's 'andalso' dan 'orelse' agak menjengkelkan untuk mengetik semua itu ketika di C # hanya '&&' dan '||'. sekali lagi, kurangi mengetik. ini tidak jarang dalam kode saya di VB dan C #. jika ada, untuk fungsionalitas, 'OR' vs 'OrElse' biasanya tidak masalah kecuali 'OrElse' lebih cepat untuk komputer, jadi jika programmer hanya menggunakan 'Or' dan 'And' di VB, maka kode yang dihasilkan kurang optimal untuk seseorang yang menyukai kejelasan kode. 'Atau' jauh lebih mudah untuk dibaca daripada 'OrElse'.
4: lebih banyak fleksibilitas dalam penempatan kode di C #. ketika sebuah baris panjang dan Anda ingin membungkusnya di baris berikutnya, saya benci VB.NET 'mengontrol' menyesuaikan kembali kode saya. C # melakukannya sedikit, tetapi saya merasa lebih berguna di C #, di mana di VB, itu jauh lebih mengontrol. tetapi ini lebih merupakan VB.NET IDE vs C # IDE daripada bahasa itu sendiri. tetapi saya tidak tahu apakah Anda menginginkan keduanya atau murni fitur bahasa tanpa perbedaan IDE.
5: satu yang sangat saya rindukan hanyalah membuat blok kode baru di C #, saya mungkin memiliki banyak hal yang terjadi dalam sebuah metode dan saya ingin mendeklarasikan variabel dalam blok kode yang sangat kecil tetapi tidak memiliki variabel yang dideklarasikan di luar blok itu di seluruh metode. di C #, kita bisa membuat blok baru dengan '{' dan mengakhirinya dengan '}'. VB tidak memiliki fitur seperti itu, tetapi kecocokan terdekatnya adalah blok 'If True Then' dan 'End If' tanpa syarat. (perhatikan 2 karakter C # vs 18 karakter yang setara VB.NET lagi ... lagi ketikan VB.)
6: operator kenaikan dan penurunan diri: ++ dan - seperti dalam myVariable++
atau ++myVariable
atau versi pengurangan yang setara. ini sangat berguna ... terkadang. berikut adalah contoh kode aktual ketika saya sangat merindukan C #:
// C#:
while (txt.Length > x)
{
thisChar = txt[x];
if (charsAllowedWithoutLimit.Contains(thisChar)) { ++x; }
else if (allowLettersWithoutLimit && char.IsLetter(thisChar)) { ++x; }
else if ((x2 = charsAllowedWithLimit.IndexOf(thisChar)) >= 0)
{
++x; if (++usedCountA[x2] > charAllowedLimit[x2]) { break; }
}
else { break; }
}
' VB.NET:
While (txt.Length > x)
thisChar = txt(x)
If (charsAllowedWithoutLimit.Contains(thisChar)) Then
x += 1
ElseIf (allowLettersWithoutLimit AndAlso Char.IsLetter(thisChar)) Then
x += 1
Else
x2 = charsAllowedWithLimit.IndexOf(thisChar)
If (x2 >= 0) Then
x += 1
usedCountA(x2) += 1S
If usedCountA(x2) > charAllowedLimit(x2) Then Exit While
Else
Exit While
End If
End If
End While
Dan hanya untuk memberikan contoh yang SANGAT bagus di mana aturan C #, ini lebih banyak kode yang saya tulis secara pribadi baru-baru ini:
// C#
public static bool IsNotWithin(this Byte v, Byte v1, Byte v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this SByte v, SByte v1, SByte v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int16 v, Int16 v1, Int16 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int32 v, Int32 v1, Int32 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int64 v, Int64 v1, Int64 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsWithin(this Byte v, Byte v1, Byte v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this SByte v, SByte v1, SByte v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int16 v, Int16 v1, Int16 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int32 v, Int32 v1, Int32 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int64 v, Int64 v1, Int64 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
' And the VB equivalent is a mess! Here goes:
<Extension()>
Public Function IsNotWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
<Extension()>
Public Function IsNotWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
<Extension()>
Public Function IsNotWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsNotWithin(v%, value1%, value2%) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsNotWithin(v&, value1&, value2&) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
<Extension()>
Public Function IsNotWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
<Extension()>
Public Function IsNotWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
<Extension()>
Public Function IsNotWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsNotWithin(v@, value1@, value2@) As Boolean
Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function
<Extension()>
Public Function IsWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
<Extension()>
Public Function IsWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
<Extension()>
Public Function IsWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsWithin(v%, value1%, value2%) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsWithin(v&, value1&, value2&) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
<Extension()>
Public Function IsWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
<Extension()>
Public Function IsWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
<Extension()>
Public Function IsWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsWithin(v@, value1@, value2@) As Boolean
Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function
Mungkin ini adalah bukti bahwa C # lebih ringkas. Tetapi tidak semua programmer menyukai keringkasan. Beberapa lebih suka membaca "jika a <b maka ..." karena itu lebih alami untuk bahasa manusia mereka. Dan itu bagus. Preferensi baik-baik saja. Bagi saya, usaha tangan adalah faktor yang saya nilai, dan saya pikir siapa pun dapat terbiasa berpikir dalam simbol apa pun yang mereka sukai, karena "jika" dan "maka" adalah simbol alfabet, dan pernyataan "jika (kondisi);" C #; sintaks juga simbol. satu lebih dekat dengan sintaks non-programmer daripada yang lain. Saya lebih suka yang ringkas.
Saya juga berpikir perlu menggunakan 'c' setelah literal karakter di VB untuk membuatnya menjadi karakter literal daripada string itu mengganggu. Saya lebih suka keringkasan C # dengan hal itu. ketika suatu metode membutuhkan karakter literal, Anda perlu memberikan karakter bukan string dengan panjang satu karakter, jadi terkadang Anda terpaksa menggunakan ":"c
di VB sementara di C # itu ':'
. Saya pikir ini adalah pilih-pilih.
Agar adil, saya akan mengatakan ada keuntungan yang ingin VB seperti tidak harus menempatkan tanda kurung kosong setelah pemanggilan metode, seperti Dim nameUpper$ = name.ToUpperInvariant
di mana C # membutuhkan kurung kosong: string nameUpper = name.ToUpperInvariant()
. atau dua kali lipat seperti pemangkasan juga: Dim nameUpper$ = name.Trim.ToUpperInvariant
vs string nameUpper = name.Trim().ToUpperInvariant()
. Saya suka penggunaan singkat VB tentang bagaimana saya baru saja menggunakan di $
atas untuk meredupkannya 'As String' di mana C # tidak memiliki pintasan itu. VB memiliki shortcut tersebut untuk tipe String, Integer, Long, Decimal, Single, dan Double, tetapi kekurangannya adalah kurang jelas, jadi saya menggunakannya dengan hati-hati. Namun demikian, saya lebih suka kode yang ringkas.
Nah, itu hanya beberapa thots dari programmer berpengalaman ini, dan seperti yang saya pertimbangkan, ini adalah 'testimoni' pemrograman saya tentang C # vs VB. Keduanya adalah bahasa yang bagus, menurut saya. tapi ya, saya masih lebih suka C #.
ps Karena saya berencana membuat program untuk sebagian besar hidup saya, saya bahkan belajar kembali mengetik menggunakan keyboard yang paling efisien: keyboard Dvorak, yang membutuhkan sekitar 1/3 upaya untuk mengetik bahasa Inggris daripada menggunakan keyboard Qwerty. lihat itu. mungkin Anda mungkin ingin beralih juga. ;) membuat pengetikan saya 67% lebih mudah! :) Saya mendorong siapa pun untuk berpikir di luar kotak dan mengevaluasi efisiensi yang lebih baik dalam pekerjaan Anda. Tata Letak Keyboard Sederhana Dvorak dan C # telah melakukan ini untuk saya. :)
PSS i akan membandingkan Dvorak dan C # dengan metrik yang bertentangan dengan tata letak keyboard Qwerty dan VB dengan pengukuran Empiris. Dvorak, metrik, dan C # hanya 'bersih'. TAPI VB tidak terlalu jauh di belakang. Tapi itu menderita karena harus kompatibel dengan kode VB6 lama dan kode pra .NET, seperti 'Atau' vs 'OrElse', dan 'IIF ()'.
Saya menyelesaikannya dengan hati-hati. Harap lebih bijaksana mendengarkan orang yang tidak benar-benar tahu apa yang mereka bicarakan. Setengah dari semua kontra terhadap VB dan C # tidakmasalah apa pun lagi, dan orang-orang masih memposting tentang mereka yang tidak mengetahui tentang kerugian apa yang sebenarnya masih ada dalam bahasa tersebut. Contoh terbaik yang dapat saya pikirkan adalah komentar XML untuk metode yang menggunakan tanda kutip tiga di VB atau simbol komentar garis miring tiga di C #. Tetapi tolong pahami sendiri apakah seseorang berbicara dari ketidaktahuan, atau dari pengalaman. Kesaksian pribadi berarti mereka tahu dari pengalaman nyata mereka. Dan setelah seseorang memiliki banyak pengalaman di dalamnya, maka bersemangatlah telinga Anda. Saya memiliki lebih dari 10 tahun pengalaman di C # dan VB. Dan intinya begini: keduanya adalah bahasa (sangat) bagus. Dan sebagian besar perbedaannya, Anda dapat langsung melihat dalam 5 menit setelah membaca kode. Tapi ya, fitur lain mungkin butuh waktu bertahun-tahun untuk menemukan cacatnya. Dan satu cacat yang saya sadari (di C #), saya bisa ' Saya bahkan tidak memikirkan situasi kehidupan nyata yang akan berguna. Jadi mungkin itu bukan cacat sama sekali.
Selamat membuat kode!