Archive for the '.NET' Category

1) DLR - Úvod do implementace .NET jazyků

Thursday, August 14th, 2008

english version >
Tento tutoriál je zaměřen na vývoj vlastního programovacího jazyka na platformě .NET s použitím nového frameworku Dynamic Language Runtime (DLR) od Microsoftu. DLR je zaměřený zejména na implementaci dynamických jazyků, které implementovat na .NETu bylo problematické a DLR poskytuje řadu funkcí, které vývoj dynamických jazyků zjednoduší.
(more…)

Jak na Bluetooth v .NET Compact Frameworku

Thursday, May 22nd, 2008

Bluetooth je bezdrátová technologie široce využívaná pro bezdrátový přenos dat zejména v malých zařízení jako jsou například PDA. Pro uživatele není většinou žádný problém Bluetooth používat, ale z pohledu vývojáře se může stát vývoj aplikace využívající Bluetooth celkem flustrující záležitostí.
(more…)

WPF - pokročilé techniky DataBindingu

Friday, April 4th, 2008

V seriálu o Windows Presentation Foundation přibyl nový díl zaměřený na pokročilé techniky DataBindingu. Vysvětleny jsou především:

  • Validátory
    • jak například ošetřit to, aby vám uživatel do TextBoxu nabindovaného na vlastnost typu int nevložil text namísto čísla?
    • jak si vytvořit vlastní validátor, který rozhodne zda zadaná hodnota je či není validní?
    • jakým způsobem upozornit uživatele v případě, když zadaná hodnota není validní?
  • Konvertory - jak vytvořit a používat konvertory v případě, kdy potřebujete nabindovat dvě vlastnosti rozdílného datového typu

Nový díl naleznete na http://cs.wpfstart.com/?q=tutorial&qq=6 [^].

Jak ze třídy udělat pole - C# indexery

Tuesday, April 1st, 2008

Možná jeden z méně známých, nicméně užitečných konceptů v C# jsou tzv. indexery. Indexer (někdy také označován jako smart array) nám umožní zacházet s objektem třídy jako kdyby se jednalo o pole.

Class c = new Class();
c.Foo();
c[
0] = "abc";
c[
1] = "def";

(more…)

Unit testy událostí

Friday, February 22nd, 2008

go to english version »

Možná jste již byli v situaci, kdy jste potřebovali veřejnou událost (či události) na nějaké třídě testovat unit testy. Problém je, jak pozastavit test na určitou dobu kdy jsou očekávána volání patřičné události a také jak tyto volání logovat, aby unit test mohl porovnat zda všechna volání proběhla s očekávanými hodnotami a pořadí.
Zde je mé jednoduché řešení…
(more…)

Foldr funkce v C#

Friday, February 22nd, 2008

go to english version »

Znáte Foldr? Foldr je funkce, kterou najdeme ve většině funkcionálních jazycích jako je například Haskell (Foldr) či F# (List.Fold_r). Jedná se o velice užitečnou funkci pokud potřebujete zpracovat jednotlivé prvky pole a vrátit jako jeden výsledek (ne pole). Takovým příkladem by mohlo být například sečtení všech čísel v poli.

Foldr není součástí .NET frameworku! Implementaci této funkce najdete na konci tohoto článku.

Funkce Foldr má 3 parametry, první je zpracovávané pole (list), pak defaultní hodnota (def), která je použita jako poslední prvek pole a funkce (fun), která je volána na každé dva sousední prvky pole.

forma:          Foldr ( list, def, fun )

Jak to tedy funguje? Řekněme, že potřebujete sečíst všechna čísla v poli…

Teorie

forma:          Foldr (  list,                 def,  fun )
kód:            Foldr ( { 1,   2,   3,   4 },  0,    + )
sečtení:                  1 + (2 + (3 + (4 +   0)))      = 10

(more…)

TIP! C# 3.0 rekurzivní funkce

Sunday, January 27th, 2008

go to english version »

V nové verzi C# 3.0 můžeme najít nové vlastnosti, které známe spíše z funkcionálních jazyků (například lambda expressions). Když jsem ale zpočátku zkoušel různé základní funkcionální postupy, byl jsem celkem zklamaný - nemohl jsem nadeklarovat rekurzivní funkci.

Jaký byl tedy problém? Podívejme se na implementaci jednoduché funkce factorial (int -> int) - má jeden parameter int a vrací int:

Test 1

Func<int, int> fac = x => x == 0 ? 1 : x + fac(x - 1)

Toto je optimální jednořádkové řešení, které ale bohužel v C# nefunguje, dostaneme chybu “Use of unassigned local variable ‘fac’“. Nemůžeme takto psát rekurzivní funkce, protože compiler nezná naši fac funkci při rekurzivním volání.

Test 2
Zkusíme tedy nadeklarovat fac funkci o jeden řádek dřív:

Func<int, int> fac;
fac = x => x == 0 ? 1 : x + fac(x - 1);

Stejná chyba, “Use of unassigned local variable ‘fac’

Test 3

Func<int, int> fac = null;
fac = x => x == 0 ? 1 : x + fac(x - 1);

Toto řešení již funguje, pokud tedy chceme volat funkci rekurzivně, musíme ji nadeklarovat a přiřadit hodnotu null dřív, před implementací samotné funkce. Nicméně jak můžeme vidět, C# 3.0 nám nedovolí deklarovat ’sexy’ jednořádkové funkce.

Debugování ve zdrojových kódech .NETu? Už ANO!

Friday, January 18th, 2008

Je to asi dva měsíce, co Internetem proběhla zpráva o uvolnění zdrojových kódů .NET Frameworku s podporou debugování ve Visual Studiu 2008. A počínaje dnešním dnem již toho může plně využít kdokoliv! Takže podívejme se jak na to.
(more…)

TIP! LINQ local variable

Monday, January 7th, 2008

go to english version »

Našel jsem jednoduchou ale někdy užitečnou vlastnost v LINQu, pokud potřebujete definovat lokální proměnou v LINQ dotazu, můžete použít klíčové slovo let.

Sample

Funkce vracející druhou mocninu čísel a navíc pouze pokud je výsledek sudé číslo:

  int[] list = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

  IEnumerable<int> x = from l in list
                       let dbl = l * l
                       where dbl % 2 == 0
                       select dbl;

          // vysledek => 4, 16, 36, 64, 100

Haskel and F# comparsion

Sunday, January 6th, 2008

This is quick introduction to F# and its syntax for Haskell programmers. In this article, you can find essential operations written in both Haskell and F#. So if you have already some experience with Haskell then it will be easy to get into the secrets of F#.

Basics, Functions, Lists, Types and some others…

(more…)