mirror of
https://github.com/pepaskopec-blip/Graduately.git
synced 2026-10-27 23:24:34 +00:00
Add a C# course with a side-by-side code runner.
Each lesson explains a topic and runs the edited program next to the text through the local .NET SDK. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
6662eb185e
commit
333085ee53
86 changed files with 2482 additions and 5 deletions
4
content/programovani/4-rocnik/01-vyjimky.en.md
Normal file
4
content/programovani/4-rocnik/01-vyjimky.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: Exceptions
|
||||
popis: An error you can catch and explain.
|
||||
---
|
||||
43
content/programovani/4-rocnik/01-vyjimky.md
Normal file
43
content/programovani/4-rocnik/01-vyjimky.md
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
id: cs-4-vyjimky
|
||||
nazev: Výjimky
|
||||
popis: Chyba, kterou lze chytit a vysvětlit.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## try
|
||||
*pokus*
|
||||
|
||||
- try je kus, který může spadnout.
|
||||
- catch (Exception e) ho chytí, místo aby spadl celý program.
|
||||
- e.Message je text chyby.
|
||||
|
||||
> Tip: Bez try by Parse na textu abc program ukončil.
|
||||
|
||||
## finally
|
||||
*vždy*
|
||||
|
||||
- finally se spustí, ať try prošel, nebo ne.
|
||||
- Hodí se na úklid. V příkladu jen vypíše, že končíme.
|
||||
- catch může být víc, pro různé typy chyb.
|
||||
|
||||
> Tip: Změňte abc na 5. catch se přeskočí, finally ne.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
try
|
||||
{
|
||||
int n = int.Parse("abc");
|
||||
Console.WriteLine(n);
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Console.WriteLine("Chyba: " + e.Message);
|
||||
}
|
||||
finally
|
||||
{
|
||||
Console.WriteLine("konec");
|
||||
}
|
||||
```
|
||||
4
content/programovani/4-rocnik/02-list.en.md
Normal file
4
content/programovani/4-rocnik/02-list.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: List
|
||||
popis: A list that can grow.
|
||||
---
|
||||
39
content/programovani/4-rocnik/02-list.md
Normal file
39
content/programovani/4-rocnik/02-list.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
id: cs-4-list
|
||||
nazev: List
|
||||
popis: Seznam, který umí růst.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Přidávání
|
||||
*Add*
|
||||
|
||||
- List<string> začne prázdný. Add přidá na konec.
|
||||
- Count je počet. Indexy jsou zase od nuly.
|
||||
- Na rozdíl od pole délku dopředu neříkáte.
|
||||
|
||||
> Tip: List<string> potřebuje špičaté závorky s typem prvku.
|
||||
|
||||
## Odebrání
|
||||
*Remove*
|
||||
|
||||
- Remove("Eva") odebere první Evu.
|
||||
- RemoveAt(0) odebere podle indexu.
|
||||
- foreach pak projde, co zůstalo.
|
||||
|
||||
> Tip: Přidejte třetí jméno před odebráním.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
List<string> jmena = new List<string>();
|
||||
jmena.Add("Anna");
|
||||
jmena.Add("Eva");
|
||||
jmena.Remove("Eva");
|
||||
foreach (string j in jmena)
|
||||
{
|
||||
Console.WriteLine(j);
|
||||
}
|
||||
Console.WriteLine(jmena.Count);
|
||||
```
|
||||
4
content/programovani/4-rocnik/03-slovnik.en.md
Normal file
4
content/programovani/4-rocnik/03-slovnik.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: Dictionary
|
||||
popis: A value under a key.
|
||||
---
|
||||
39
content/programovani/4-rocnik/03-slovnik.md
Normal file
39
content/programovani/4-rocnik/03-slovnik.md
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
---
|
||||
id: cs-4-slovnik
|
||||
nazev: Slovník
|
||||
popis: Hodnota pod klíčem.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Klíč
|
||||
*jednou*
|
||||
|
||||
- Dictionary<string, int> má klíč text a hodnotu číslo.
|
||||
- znamky["Anna"] = 1 uloží nebo přepíše.
|
||||
- Stejný klíč je v slovníku jen jednou.
|
||||
|
||||
> Tip: Pole je podle čísla. Slovník je podle jména, které si zvolíte.
|
||||
|
||||
## Čtení
|
||||
*ContainsKey*
|
||||
|
||||
- Čtení chybějícího klíče spadne.
|
||||
- ContainsKey napřed zjistí, jestli klíč je.
|
||||
- foreach projde dvojice Key a Value.
|
||||
|
||||
> Tip: Zeptejte se na jméno, které v slovníku není, až po ContainsKey.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
Dictionary<string, int> znamky = new Dictionary<string, int>();
|
||||
znamky["Anna"] = 1;
|
||||
znamky["Eva"] = 2;
|
||||
znamky["Anna"] = 3;
|
||||
if (znamky.ContainsKey("Eva"))
|
||||
{
|
||||
Console.WriteLine(znamky["Eva"]);
|
||||
}
|
||||
Console.WriteLine(znamky["Anna"]);
|
||||
```
|
||||
4
content/programovani/4-rocnik/04-linq.en.md
Normal file
4
content/programovani/4-rocnik/04-linq.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: LINQ
|
||||
popis: Queries over a list.
|
||||
---
|
||||
36
content/programovani/4-rocnik/04-linq.md
Normal file
36
content/programovani/4-rocnik/04-linq.md
Normal file
|
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
id: cs-4-linq
|
||||
nazev: LINQ
|
||||
popis: Dotazy nad seznamem.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Where
|
||||
*filtr*
|
||||
|
||||
- Where nechá jen prvky, které splní podmínku.
|
||||
- n => n >= 10 je krátká funkce: vezmi n a vrať, jestli je aspoň 10.
|
||||
- Samotné Where ještě nic neprojde. ToList nebo foreach výsledek vezme.
|
||||
|
||||
> Tip: Šipka => není porovnání. Je to zápis malé funkce.
|
||||
|
||||
## Select
|
||||
*převod*
|
||||
|
||||
- Select z každého prvku udělá jiný.
|
||||
- OrderBy seřadí.
|
||||
- Dotaz lze řetězit: Where a pak Select.
|
||||
|
||||
> Tip: Změňte 10 na 12 a dvojka z výpisu zmizí.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
int[] cisla = { 4, 11, 7, 20 };
|
||||
var velka = cisla.Where(n => n >= 10).OrderBy(n => n);
|
||||
foreach (int n in velka)
|
||||
{
|
||||
Console.WriteLine(n);
|
||||
}
|
||||
```
|
||||
4
content/programovani/4-rocnik/05-soubory.en.md
Normal file
4
content/programovani/4-rocnik/05-soubory.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: Files
|
||||
popis: Writing and reading text.
|
||||
---
|
||||
33
content/programovani/4-rocnik/05-soubory.md
Normal file
33
content/programovani/4-rocnik/05-soubory.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
id: cs-4-soubory
|
||||
nazev: Soubory
|
||||
popis: Zápis a čtení textu.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## WriteAllText
|
||||
*jednou*
|
||||
|
||||
- File.WriteAllText zapíše celý soubor. Když existuje, přepíše ho.
|
||||
- Cesta pozdrav.txt je vedle programu, v jeho složce.
|
||||
- ReadAllText celý text vrátí jako string.
|
||||
|
||||
> Tip: Na telefonu se soubor nespustí. Na počítači s .NET ano.
|
||||
|
||||
## Řádky
|
||||
*Append*
|
||||
|
||||
- AppendAllText přidá na konec a soubor nesmaže.
|
||||
- ReadAllLines vrátí pole řádků.
|
||||
- Po skončení programu soubor ve složce laboratoře zůstane.
|
||||
|
||||
> Tip: Spusťte dvakrát. Druhý zápis WriteAllText starý text nahradí.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
File.WriteAllText("pozdrav.txt", "Ahoj ze souboru");
|
||||
string zpet = File.ReadAllText("pozdrav.txt");
|
||||
Console.WriteLine(zpet);
|
||||
```
|
||||
4
content/programovani/4-rocnik/06-generika.en.md
Normal file
4
content/programovani/4-rocnik/06-generika.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: Generics
|
||||
popis: One method for several types.
|
||||
---
|
||||
37
content/programovani/4-rocnik/06-generika.md
Normal file
37
content/programovani/4-rocnik/06-generika.md
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
---
|
||||
id: cs-4-generika
|
||||
nazev: Generika
|
||||
popis: Jedna metoda pro víc typů.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## T
|
||||
*typový parametr*
|
||||
|
||||
- static void Vypis<T>(T hodnota) přijme int i string.
|
||||
- T se doplní při volání podle argumentu.
|
||||
- Jedna metoda tak nenutí kopírovat kód pro každý typ.
|
||||
|
||||
> Tip: Když metoda s T má umět jen porovnávat, T se omezí. Tady stačí výpis.
|
||||
|
||||
## List
|
||||
*už ho znáte*
|
||||
|
||||
- List<string> je generická třída. string je dosazený T.
|
||||
- Stejný List<int> drží čísla a metody jsou stejné.
|
||||
- Generika hlídá typ. Do List<int> string nedáte.
|
||||
|
||||
> Tip: Zavolejte Vypis s číslem i s textem.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
Vypis(7);
|
||||
Vypis("ahoj");
|
||||
|
||||
static void Vypis<T>(T hodnota)
|
||||
{
|
||||
Console.WriteLine(hodnota);
|
||||
}
|
||||
```
|
||||
4
content/programovani/4-rocnik/07-delegaty.en.md
Normal file
4
content/programovani/4-rocnik/07-delegaty.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: Delegates
|
||||
popis: A variable that holds a method.
|
||||
---
|
||||
34
content/programovani/4-rocnik/07-delegaty.md
Normal file
34
content/programovani/4-rocnik/07-delegaty.md
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
id: cs-4-delegaty
|
||||
nazev: Delegáty
|
||||
popis: Proměnná, do které uložíte metodu.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## Func
|
||||
*funkce*
|
||||
|
||||
- Func<int, int> je metoda, která dostane int a vrátí int.
|
||||
- x => x * x je taková metoda bez jména.
|
||||
- Do proměnné ji uložíte a zavoláte později.
|
||||
|
||||
> Tip: Závorky pocet(4) metodu spustí. Bez nich byste ji jen předali dál.
|
||||
|
||||
## Action
|
||||
*bez výsledku*
|
||||
|
||||
- Action nic nevrací. Hodí se na kroky.
|
||||
- Metodu můžete předat jiné metodě jako argument.
|
||||
- Tak se píše i Where z minulé lekce.
|
||||
|
||||
> Tip: Vyměňte x * x za x + 1.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
Func<int, int> pocet = x => x * x;
|
||||
Console.WriteLine(pocet(4));
|
||||
Action pozdrav = () => Console.WriteLine("ahoj");
|
||||
pozdrav();
|
||||
```
|
||||
4
content/programovani/4-rocnik/08-async.en.md
Normal file
4
content/programovani/4-rocnik/08-async.en.md
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
nazev: Async and await
|
||||
popis: Work that waits without freezing the way you write it.
|
||||
---
|
||||
33
content/programovani/4-rocnik/08-async.md
Normal file
33
content/programovani/4-rocnik/08-async.md
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
id: cs-4-async
|
||||
nazev: Async a await
|
||||
popis: Práce, která počká, aniž by zamkla zbytek zápisu.
|
||||
---
|
||||
|
||||
# Výklad
|
||||
|
||||
## await
|
||||
*počkej*
|
||||
|
||||
- await Task.Delay čeká, ale zápis zůstane řádek za řádkem.
|
||||
- Metoda s await má v hlavičce async a vrací Task.
|
||||
- V krátkém programu smí await stát i na nejvyšší úrovni.
|
||||
|
||||
> Tip: Delay(300) čeká 300 milisekund. Výpis hotovo přijde až po něm.
|
||||
|
||||
## Task
|
||||
*slib*
|
||||
|
||||
- Task je slib, že práce doběhne.
|
||||
- await slib rozbalí. Bez await byste měli slib, ne výsledek.
|
||||
- Na síť a soubory se await hodí. Na 2 + 2 ne.
|
||||
|
||||
> Tip: Dejte za první výpis ještě jeden await a druhý řádek.
|
||||
|
||||
# Kód
|
||||
|
||||
```
|
||||
Console.WriteLine("začátek");
|
||||
await Task.Delay(300);
|
||||
Console.WriteLine("hotovo");
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue