Jeg elsker både VB.NET og C#, hvilken skal jeg så vælge?
Jeg er lidt i et dilema. Jeg elsker både VB.NET og C#.
Når jeg skal lave et nyt projekt, så sidder jeg altid og bruger alt for lang tid på at spekulere i hvilket sprog, jeg skal lave mit program i. Vi er alle enige om at det på et højt plan er rimelig ligegyldigt, da VB.NET og C# på et feature plan, er så ens, at der næsten ikke er forskelle - og dog.
Jeg elsker mit VB.NET, jeg er ikke flov over at sige det, selvom jeg godt ved at C# programøres generalisering af en VB.NET programmør, er at han er en anden-rangs programmør, som ikke har lært sine simikolons, og skriver dårlig kode.
Så lad mig som det første slå det fast: Jo jeg skriver dårlig kode - men det gør jeg også i C# - sproget har intet med det at gøre :)
Hvis jeg kigger på sprogene side om side, så har jeg meget svært ved at argumentere for at bruge C#, andet end den Geek love der følger med. Hvis jeg laver et VB.NET projekt, så er jeg noget mere alene, end hvis jeg f.eks. lavede det i C#. Jeg kan lige forestille mig den ”addr” føelse, som C# programmørene får, når de finder ud af at projektet er VB.NET.
Men sådan er .NET kulturen, og det er nok ikke noget man kan gøre noget ved.
Grunden til at jeg er så glad for VB.NET er at jeg ser C# som et meget kræsent sprog. Et eksempel er at du skal Caste dine objekter til strings eller til andre sjove objekter, hvilket resultere i en masse tekst, for at fortælle compileren, at du ved hvad du gør. I VB.NET stoler compileren på dig, som standard, og lader dig caste ting til andre typer, uden at du skal til at caste. Du har også muligheden for at sætte såkaldt Strict på, hvilket betyder at den nu også hyler, når du gør den mindste ting, som kunne resultere i fejl, som er sket ved casting. Du har altså valget.
Nu skal det siges, at jeg har oplevet, at vi har fået en enkelt fejl, i forbindelse med implicit casting i VB.NET, i det år, jeg har arbejdet med VB.NET på arbejdet. Hvis man tager den tid, det tog at finde den fejl (10min), og så opvejer det med den tid jeg har sparet, ved ikke at skulle caste hele tiden, så tror jeg nok jeg har vundet nogle dage på den der. Casting er en produktivitets dræber – puntum.
VB.NET har også en masse fede features, som XML literals, og My namespacet, som er fyldt med goodies. Vi har With keywordet, som gør at vi kan tilgå et objekt nemt, hvis vi bruger det mange gange. Select Case (switch) er faktisk brugbart i VB.Net, hvor i C# er den meget mere begrænset. En anden ting, som er lidt sjov i forbindelse med extensionmethods er at VB.Net også har noget som heder Modules. Modules, giver dig lige præcis mulighed for at have extenionmethods, som du kan kalde, uden at de ligger på et objekt, da de bare er globale metoder, alt efter hvilket namespace du inkludere. Derfor kan du lave små metoder, som gør din kode mere præcis – pas dog på med at du lige pludselig ikke gør din kode ikke-testbar. (Det samme gælder med extenionmetodes, og generelt statiske ting)
Modules er dog ikke noget, som jeg generelt bruger så meget, men det er en sjov lille ting i VB.NET, som kan have sin plads, og måske erstatte den typiske Utils klasse, med hjælpemetoder.
Generelt, vil jeg faktisk beskrive VB.NET, som mere Ruby agtigt, end C#. Det giver nogle fede features, som er koblet op mod produktivitet, istedet for ”korrekthed”.
Grunden til jeg elsker C# er dog lidt anderledes. Det er nemlig ikke pga. sproget, men mere de tools, som understøtter det. Resharper er et godt eksempel, som ganske hvist også virker 10% til VB.NET, men det er bare så meget bedre i C#.
Kodeeksempler er generelt også i C# - så man skal til at konvere koden til VB.NET – hvilket er ganske let, men dog en irretation aligevel.
Til sidst, så er det, lige som med meget andet, bare så meget lettere at følge med strømmen, og bruge det som alle hylder – så slipper man for alle diskutionerne om hvorfor man dog ikke brugte C#.
Jeg er stadig i tvilv om hvad jeg skal bruge, men sådan er det med valg – jeg er bare dårlig til sådan noget.
Nå men, hvad siger jakob?