Visual Basic vs. C# - Rozdíly a přechod mezi nimi

Ostatní jazyky Visual Basic .NET Visual Basic vs. C# - Rozdíly a přechod mezi nimi

Čas od času se na fóru objeví dotaz na téma C# (čte se sí šarp) × Visual Basic (zkráceně VB), jejich rozdíly, přednosti a podobně. Protože znám oba jazyky, pokusím se vám vysvětlit rozdíly mezi nimi a následný přechod mezi nimi.

Visual Basic .NET vs C# .NET

Historie

Nejprve je potřeba se podívat do historie obou jazyků. Visual Basic je tu s námi od roku 1991. V roce 2002 však přišla změna, Microsoft Visual Basic .NET (.NET, čteme dotnet) nyní běží pod .NETem, stejně jako zbrusu nový jazyk C#. Starý Visual Basic však nebyl totožný s dnešním a proto spoustě vývojářů přechod na dnešní Visual Basic trval dlouho a občas se vyklube jedinec, co nepřešel dodnes.

Oproti Visual Basicu .NET C# raketově vyrostl a VB.NET překonal skoro ve všem. Dnes někteří začínající vývojáři o Visual Basicu nemají ani tuchy nebo za Visual Basic považují pořád ten starý.

Co lze v těchto jazycích programovat? Snad úplně všechno. Klasické desktopové aplikace, jak konzolové tak okenní a to hned pomocí dvou frameworků (Windows Forms a Windows Presentation Foundation), serverové aplikace (ASP.NET), moderní Windows Store aplikace, mobilní Windows Phone a malé robůtky (.NET micro Framework).

Syntaxe

Zdrojový kód je v C# značně kratší, namísto End If je v C# prostě jen složená závorka }. Každý příkaz končí ; čim je snadné vecpat více příkazů na řádek. Ve Visual Basicu ale u koncových značek vždy víte co zde končí, řádky se zakončují enterem a pokud chcete více příkazů na jeden řádek, tak příkazy můžete oddělit dvojtečkou :. Ve Visual Basicu se ke všemu možnému používají klíčová slova. Rozdíl je třeba v dědičnosti a implementaci rozhraní. Ve Visual Basicu bude kód následující:

Class MojeTrida
        Inherits MojeDruhaTrida
        Implements MojeRozhrani
End Class

V C# tento kód bude značně kratší, ale pokud nedodržujte konvence (rozhraní začíná velkým i) nevíte co dědíte a co implementujete, či dokonce můžete implementovat 2 rozhraní a to je teprve guláš.

class MojeTrida : MojeDruhaTrida, MojeRozhrani {

}

Knihovna Microsoft.Visu­alBasic

Ve Visual Basicu je ve výchozím stavu importovaná reference na knihovnu Microsoft.Visu­alBasic. Díky této knihovně můžete používat některé funkce, které v C# ve výchozím stavu prostě nejsou. Dobrým příkladem je opak k MessageBox.Show(), pro získávání hodnoty od uživatele můžete použít funkci InputBox, která zobrazí dialogové okno s textovým polem, čili máte ušetřeno celkem dost práce.

InputBox ve Visual Basicu

Tato knihovna má funkci Beep(), můžete uživatele bombardovat pípáním. Nebo prostě cinkat při události, která běžně necinká.

Knihovna obsahuje obor názvu My ve kterém jsou některé funkce implementovány jednodušeji, např. odesílání a stahování souborů na/z internetu je díky My.Computer.Network velmi jednoduché.

Pro C#isty mám dobrou zprávu, pokud po této knihovně toužíte tak si ji můžete přidat do referencí a budete mít tyto funkce i v C#.

Rozdíly v syntaxi

I přestože jsou tyto jazyky téměř totožné, najdou se rozdíly, které jsou v jednom z jazyků tak nějak nevyřešené.

Dost zásadní rozdíl je i v zápisu cyklu For, zatímco Visual Basic ho má velmi snadný, u C# si s tím můžete více vyhrát. Ve skutečnosti však lze v obou jazycích docílit víceméně stejného efektu.

Ve Visual Basicu k tomu dojdeme jednoduše, určíme proměnnou, řekneme kde začít a kde skončit a tím to pro nás hasne.

For i = 0 To 4

U C# to je mírně složitější, krom toho že tu proměnnou musíme sami i deklarovat, musíme určit podmínku a pak i zajistit samotnou inkrementaci.

for (int i = 0; i < 5; i++)

Co když ale budeme chtít ve Visual Basicu skákat ne o 1 ale třeba o tři nebo dokonce o záporné počty? I Visual Basic s tímto počítá, do definice přidáme klíčové slovo Step s hodnotou co se má k tomu pokaždé přičíst.

For i = 0 To -10 Step -2

Visual Basic má klíčové slovo Handles, které se píše na konec definice metody, umožňuje odchytit nějaké události (oddělují se čárkou), i bez nutnosti zbytečně zdlouhavého AddHandler. C# pro toto nemá žádnou alternativu. Na následující ukázce je vidět použití klíčového slova Handles a metody fukce UploadFile, která sídlí v knihovně MicrosoftVisu­alBasic.

Private WithEvents tmr As New Timer()

Private Sub SendData() Handles tmr.Tick, btnSend.Click
        My.Computer.Network.UploadFile("C:\data.txt", "ftp://mujserver.com/data.txt", "root", "*****")
End Sub

Visual Basic umí znovu alokovat pole pomocí klíčového slova ReDim, pokud pole potřebujete vytvořit znovu (např. jste zjistili že jej potřebujte větší – dost častý jev) tak použijete právě tento příkaz. C# pro něj ale nemá žádnou alternativu.

Visual Basic má operátor ^, který slouží k umocňování proměnných na ntou.

Dim c As Integer = 3 ^ 2

Výsledkem uloženým v c bude 3 na 2 (čili 9).

C# má operátory pro inkrementaci a dekrementaci, tyto operátory ve VB.NET nenajdete.

C# má oproti Visual Basicu víceřádkové komentáře.

Toto byly příklady rozdílů, kde řešení není až zas tak jednoznačné a snadné. Všechny lze nějak obejít. Při výběru jazyku by toto nemělo hrát žádnou roli.

Přechod mezi jazyky

Přechod mezi jazyky je velmi snadný, v zásadě jde pouze o tom zvyknout si na syntaxi a pak to jde samo. Rozdílů je tak málo, že je v běžném použití ani nepoznáte.

Automatický převod kódu robotem

Existuje jedna služba, která umožňuje převod zdrojového kódu právě mezi jazyky C# a Visual Basic. Je na webu developerfussion úplně zdarma . Nefunguje dokonale (některé perličky nezvládl převést), ale pro většinu úkolů je plně dostačující. Nedoporučuji ji pro převod celého projektu, ale třeba když chcete převést ukázku zdrojového kódu, hodí se skvěle.

Ruční převod kódu

Ruční převod kódu je samozřejmě možný, ale je dobré se zamyslet, jestli není zbytečný. Někdy je lepší kód dopsat v pro vás sekundárním jazyku než se zabývat převodem, což je pouze čas navíc.

Rada na závěr

Protože syntaxe Visual Basicu staví na klíčových slovech, není úplně na škodu s ním při výuce začít. Přechod na C#, po kterém je mnohem větší poptávka, je pak velmi snadný. Pokud již umíte C#, přechod na Visual Basic je zbytečný, kód vám přijde zdlouhavý a navíc po Visual Basicu není až zas tak vysoká poptávka jako po C#. Pokud již umíte nějaký jazyk a nepotrpíte si na Basic like syntaxi, tak Visual Basic určitě nevolte. Pokud se rozhodujte pro C#, tak věřte, že nemáte co ztratit.


 

  Aktivity (1)

Článek pro vás napsal Michal Žůrek (misaz)
Avatar
Autor se věnuje tvorbě aplikací pro počítače, mobilní telefony, mikroprocesory a tvorbě webových stránek a webových aplikací. Nejraději programuje ve Visual Basicu a TypeScript. Ovládá HTML, CSS, JavaScript, TypeScript, C# a Visual Basic.

Jak se ti líbí článek?
Celkem (12 hlasů) :
4.754.754.754.754.75


 


Miniatura
Všechny články v sekci
Visual Basic (VB .NET)
Miniatura
Následující článek
Regulární výrazy ve VB.NET

 

 

Komentáře

Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Ty jazyky maji společné jen to, že se kompílují obadva do CIL. Hlavní rozdíly jsi nenapsal, které jsou v rámci funkčnosti. Někde jsme to řešili s Satíkem, co jsou jejich hlavní rozdíly, když opomineme syntax...

Převod z C# do VB jsem jednou zkoušel asi snad na 5ti webech, žádný pak nešel zkompilovat.

 
Odpovědět 15.1.2014 12:22
Avatar
Odpovídá na Jan Vargovský
Michal Žůrek (misaz):

a zjišťoval jsi i proč nešel zkompilovat? Jistěže inkrementace se musí přepsat z

i++;

na

i += 1

Nepopisoval jsem rozdíly kdesi uvnitř kde se k tomu běžný vývojář stejně nedostane, ale popisoval jsem hlavně to co vidí - zdrojový kód.

Odpovědět 15.1.2014 12:28
Nesnáším {}, proto se jim vyhýbám.
Avatar
Odpovídá na Jan Vargovský
Luboš Běhounek (Satik):

Já někde používal ten převod z C# na VB (nebo obráceně? už si nejsem jistý) pro několikasetřádkový kód a fungoval celkem dobře :)

Odpovědět 15.1.2014 13:13
:)
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:

Pak srovnávat jazyky jen z hlediska syntaxe mi přijde celkem k ničemu. To rovnou můžeš napsat článek Java x C# :)

Luboš Běhounek (Satik) Já dělal něco se složkama a měl jsem jen metodu, co vracela IEnumerable a nějak z toho vylezl paskvil, který vůbec nefungoval, protože to neznalo ani ty třídy k Directory, Path a nevím co ještě.

 
Odpovědět 15.1.2014 16:45
Avatar
Odpovídá na Jan Vargovský
Michael Olšavský:

To už je trochu divné. VB.NET má stejné knihovny a vestavěné třídy (.NET)

 
Odpovědět 15.1.2014 18:24
Avatar
Jan Vargovský
Redaktor
Avatar
 
Odpovědět  +1 15.1.2014 18:49
Avatar
Radim
Neregistrovaný
Avatar
Radim:

Díky za skvělej článek, už spoustu let pracuju s VB.NET a mám v plánu přejít na C#, právě kvůli tomu že s ním pracuje mnohem víc lidí a je více používán na scriptování(U­nity3D,UDK..at­d).

 
Odpovědět 9.2.2014 12:58
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.