Nahoru
 

Java vs. C#

Možná znáte slavné „války“ jako Tesla vs. Edison, Rusko vs. USA, Horda vs. Aliance nebo PC vs. Konzole. Pojďme se dnes detailněji podívat na válku mezi programovacími jazyky Java a C#, která panuje již dlouhá léta.

Poznámka: Článek se bude ve zkratce snažit porovnat oba jazyky v různých oblastech co nejvíce nestranně (i když se to tak nemusí zdát) s následným zakončením osobní zkušenosti. Jedná se spíše o lehké čtení nežli vědeckou studii o obou jazycích.

Hlavní společné charakteristiky

Java i C# fungují principiálně velice podobně. Jedná se o silně typované jazyky se zaměřením na objektové programování, běžící ve vlastním běhovém prostředí. Jazyky se nekompilují přímo a potřebují předem nainstalovaný program (pokud si ho při exportu nezabalí s sebou). Díky tomu fungují na spoustě zařízení a operačních systémů (např. Windows, Linux, lednice a televize).

Oba jazyky disponují tzv. „Garbage collector“, jež zajišťuje úklid paměti, což je revoluční nápad. I když tento sběrač známe již z dob funkcionálního jazyka lisp, Java byl první programovací jazyk využívající jeho plný potenciál. Programátoři se nyní nemusejí starat o uvolňování alokované paměti, což ušetří spoustu času a zamezí výskyt kritických chyb (známý segmentation fault nebo double free).

Obecně, jestliže dostaneme k vytvoření nějaký program, až na výjimky jej můžeme vyřešit pomocí C# i Javy, a to bez závažných problémů.

Historie a kdo koho okopíroval

Jako první na svět přišla Java v roce 1995 od firmy Sun Microsystems. Jednalo se o úžasný revoluční nástroj pro (nejen) podnikové programy. Vývoj se najednou stal daleko rychlejším a tím pádem i levnějším. Svět byl tedy zase o krok dále v modernizaci. C# byl představen Microsoftem až o pět let později (rok 2000).

I když jádro C# funguje jinak a bylo postaveno od základu samostatně, někomu by se mohlo zdát, že C# je akorát kopie Javy, ale od Microsoftu. C# je principiálně podobný, avšak ve skutečnosti stojí na úplně jiných podkladech. Microsoft se Javou akorát inspiroval a vyhnul se chybám a nedostatkům svého oponenta.

C# není kopie Javy, nýbrž silně inspirovaný novější jazyk.

Možnosti jazyků

Jazyky přicházejí s jistým arzenálem funkcí, které jsou programátorovi dostupné. Jak porovnává článek na Wikipedii o rozdílů Javy a C#, současný C# má v mnoho směrech velkou převahu. Hlavní funkce, kterými nativně disponuje samotný jazyk C#, ale Java nikoliv, jsou pro vývoj dle mého názoru zásadně ulehčující a zpřehledňující. Jmenovitě jsou to například:

  • Delegáti
  • Události
  • Přetěžování operátorů
  • Indexery
  • Implicitní konverze
  • Vstupní a výstupní parametry
  • Uživatelské datové typy
  • Pointery

Obecně můžeme s jistotou říci, že C# má drtivou převahu, co se možností samotného jazyka týče. Na obranu Javy zase lze podotknout, že výše uvedené funkčnosti se dají nahradit nějakou alternativou, například místo operátoru budeme používat metody a podobně. Ano, to samozřejmě jde, avšak v některých případech to znamená extra práci a řešení není tak přehledné a jednoduché, jako když danou funkcí nativně disponuje sám jazyk.

C# je, co se nativních funkčností týče, daleko vyspělejší.

Popularita

Používanějším jazykem je (a ještě nějakou dobu bude) Java. Nenechte se však odradit od C#, obě komunity mají podstatně objemnou hromadu programátorů.

Jestliže hledáte jazyk, po kterém budete mít největší šanci na zaměstnání, Java bude díky drtivé popularitě lepší varianta, nicméně oba jazyky mají značný zástup v podnicích i komunitě.

Knihovny

Co se „důležitých“ knihoven týče, Java i C# disponují vším potřebným. Java tyto nástroje má díky společnostem jako Oracle nebo Red Hat a C# vděčí samozřejmě Microsoftu.

Díky většímu počtu Javistů nalezneme daleko více Java open-source knihoven. C# také disponuje velkou sadou knihoven, ne však tak masivní.

V obou jazycích lze najít knihovnu na vše potřebné.

Osobní názor

Měl jsem možnost vyzkoušet oba jazyky pro vývoj enterprise aplikace a mohu říci, že Java nesahá C# ani po kotníky. „Ekosystém“, který jazyk C# poskytuje, zachytává úplně všechny nedostatky Javy a vývoj se tak stává téměř nestresující. Díky .net standartní knihovně je také jedno, v jaké verzi tvořím, na rozdíl od Javy, kde upgrade na novější verzi je risk celého systému.

Práce s Javou a některými jejími knihovnami je někdy nadlidský výkon. Stále něco nefunguje, opakovaně musím googlit a zjišťovat, jestli je dané fungování zamýšlené nebo chybné. Špatná dokumentace je samozřejmostí. Mé zkušenosti s knihovnami od Microsoftu jsou daleko lepší. Určitě nechci špinit Javu a komunitní výtvory, avšak v některých případech to tak skutečně je a programování v Javě může být někdy dosti frustrující.

Solidní kompilátor jazyka C# poskytující všechny funkce, jež si člověk dokáže představit, znamenají nanejvýš přehledný kód. To, že se Java rozhodla nepodporovat přetěžování operátorů nebo optimalizaci koncové rekurze jenom proto, aby byli kompilátory jednodušší, je pro mě trochu nepochopený přístup ze strany architektů jazyka.

Nesnažím se tu plivat na Javu, pouze poukázat na její kritické nedostatky a nepohodlí. Java je skutečně daleko méně pohodlná oproti C#.

Java i C# jsou si skutečně velice podobné, proto z hlediska funkčnosti nezáleží, jaký jazyk je pro projekt vybrán. Java má velikou převahu v komerční zóně a velikosti komunity, nicméně C# má svůj početný zástup také. Co se kompilátoru týče, jazyk C# disponuje tunou velice užitečných funkcí a optimalizací, což jej rozhodně staví daleko před Javu. Java disponuje větším množství knihoven, nicméně to neznamená, že jsou lepší. C# i Java mají potřebné knihovny pro vše důležité. Platforma .net je také velký plus pro C#.