V mém prvním díle série článků o code review a refactoringu jsem slíbil, že následující díl série se zaměří na konstrukce z jazyka C#, verze 3.0. Z mých zkušeností vím, že si lidé občas pletou verze C# s verzemi .NET frameworku, a to ještě možná nevědí o tom, že jsou tu také verze CLR. Tímto článkem bych rád vnesl alespoň trochu světla do této matoucí záležitosti.
U každé verze uvedu i nejvýznamnější novinky s ohledem na C#. Nebudu popisovat novinky týkající se webového frameworku ASP.NET, jazyka VB.NET a dalších, protože s nimi nepracuji. Nicméně je jisté, že některé novinky z C# používáte také ve VB.NET. Taktéž zde nenajdete informace o .NET frameworku 4.5.1 a souvisejících komponentách, protože je stále ve stavu RC (release candidate). Ještě upozorňuji, že některé výrazy nebudu překládat do češtiny, protože rád věci nazývám tak, jak se skutečně jmenují a v češtině to také zní neskutečně hloupě.
Ve zkratce, .NET framework je software framework obsahující knihovny funkcí, které můžete využívat v rámci několika jazyků podporovaných tímto frameworkem, protože ve výsledku je kód, který napíšete přeložen kompilátorem do CIL. CIL je jazyk, kterému rozumí CLR a ze kterého vyprodukuje správný bytecode pro daný stroj. V anglicky mluvící komunitě se často setkáte pouze se zkratkou IL. Předchozí řádky textu skvěle doplňuje následující obrázek.
zdroj: wikipedia.org
Důvodem pro „guláš“ ve verzích je, že na jednotlivých komponentách pracují jiné týmy s různou historií a tak se liší i verzování jejich produktů. Můžeme být vděční za to, že je to alespoň trochu podobné díky tomu, že všichni začali najednou.
Souhrnná tabulka verzí
Verze jazyka
C# 2.0
Začnu verzí 2.0, protože verze 1.2 neobsahuje nijak výrazné změny (z pohledu uživatele) oproti verzi 1.0, o které nemá cenu psát, protože by to byl jen pouhý souhrn vlastností jazyka.
Bezesporu nejvýznamnější novinkou v této verzi jsou generiky, které z kódu odstranili většinu přetypování a zvýšili tak účinnost statické analýzy kódu, která špatné přetypování neumožní už v době kompilace (jsou případy, kde to lze udělat a kompilátor Vás nevytrestá) namísto pádu aplikace při běhu. Jestli je ještě neznáte, přestaňte číst tento článek a rozhodně si je ihned nastudujte.
Další významné vlastnosti
- Nullable typy
- Anonymní metody
- Iterator blocks
- Statické třídy
- Properties s rozdílným přístupovým oprávněním pro getter a setter
- Partial typy
- Namespace aliasy
C# 3.0
Tato verze jazyka je orientovaná z velké míry na LINQ, který několik z následujících vlastností využívá.
- Automatic properties
- Implicitní typování polí a lokálních proměnných
- Inicializátory objektů a kolekcí
- Anonymní typy
- Lambda výrazy
- Expression trees
- Extenssion methods
C# 4.0
Největší novinkou v této verzi je dynamické typování, které mnoho z Vás paradoxně nikdy potřebovat možná nebude. Já osobně jsem se bez něj v komerčním světě zatím obešel, využití jsem našel pro školní projekty, kde lze takto v C# pracovat s objekty například z Pythonu nebo Ruby.
- Named arguments
- Optional arguments
- Generic variance
Verze frameworku
.NET 2.0
- CLR podpora generik a Nullable typů
- Funkce usnadňující práci například s diskovými operacemi (File.ReadAllText(), atd.)
.NET 3.0
Jak je ze souhrnné tabulky vidět, tato verze frameworku nepřinesla pro C# žádné změny.
.NET 3.5
Jedním slovem, LINQ. Kdo nezná, měl by poznat. Vyplatí se to, opravdu. Mění způsob pohledu na data a dokáže Vaše současné cykly a práci s daty udělat čitelnější. Jestli Vám LINQ výrazy něco připomínají, tak hádáte správně - inspirace pochází z funkcionálních jazyků.
.NET 4.0
- DLR
- Parallel Extensions
- Code Contracts
- System.Numeric namespace
- Nativní podpora lazy loading
- Tuple typ
- Reactive Extensions
- MEF
.NET 4.5 a C# 5.0
Najdete pěkně popsané v článku Co je to .NET framework 4.5? od Tomáše Jechy, zde na portálu.
CLR
Změny v CLR popisovat nebudu, protože s nimi nepřijdete přímo do styku. Nicméně, ve dvou bodech
- Podpora nových funkcí jazyků
- Obecná vylepšení frameworku v oblasti kompilace, práce s pamětí, atd.
Důvodem pro méně časté vydávání nových verzí CLR je fakt, že spousta nových vlastností jazyka jde udělat pouze na úrovni kompilátoru (na internetu známo jako „compiler tricks“). Často se tedy jedná o vylepšení, která nijak neurychlí Váš kód, ale pouze usnadní jeho psaní a čtení.
Závěrem bych rád podotknul, že jestli Vám některé z výše uvedených novinek nic neříkají a neovládáte zrovna angličtinu, tak nemusíte smutnit, protože Vám o nich postupně napíšu v rámci některých sérií. Také si neodpustím poznámku autora jedné knížky, přeloženou do češtiny.
„Po přečtení tohoto článku už nemáte právo tvrdit, že používáte C# 3.5.“