Dynamické programovací jazyky Groovy

Save this PDF as:
 WORD  PNG  TXT  JPG

Rozměr: px
Začít zobrazení ze stránky:

Download "Dynamické programovací jazyky Groovy"

Transkript

1 Groovy.doc, verze , uloženo po :45 1 z 133 Dynamické programovací jazyky Groovy Mnohé příklady jsou převzaty z knihy Groovy in Action a nebo jsou touto knihou silně inspirovány

2 Groovy.doc, verze , uloženo po :45 2 z 133 Obsah 1. Předehra: Java Groovy 2. Groovy rychlý úvod do jazyka 3. Hlubší pohled na práci s daty 4. Uzávěry 5. Dynamická podstata jazyka 6. KONEC Je potřeba prověřit: V programu nefunguje V programu zlobí příkaz def (small, big) = list.split { it < 2 }

3 Groovy.doc, verze , uloženo po :45 3 z Předehra: Java Groovy Obsah 1.1 Proč nový jazyk 1.2 Dynamické jazyky charakteristika 1.3 Skriptovací jazyky 1.4 Koncepce jazyka Groovy 1.5 Dva způsoby zavedení třídy 1.6 Přehled vlastnosti jazyka Groovy 1.7 Jak Groovy získat 1.8 Co Groovy od Javy přebírá 1.9 Základní zjednodušení Skripty Podmínky Sjednocení způsobů zjištění počtu prvků v kontejneru 1.10 Co dalšího je jinak 1.11 Co Java má a Groovy (zatím) ne

4 Groovy.doc, verze , uloženo po :45 4 z Proč nový jazyk Hodně se hovoří o tzv. dynamických jazycích, které jsou populární zejména mezi začínajícími programátory Jejich zastánci si občas nepřipouštějí jejich nevýhody Nemožnost automatické refaktorace Omezená hlídání překladače, které programátoři zapomínají vyvažovat testy Dynamicky charakter jazyka vyžaduje jistou režii, která výsledný program výrazně zpomaluje (v závislosti na aktuálních operacích 4 až 20 ) Velké tlaky na úpravu (= zdynamičtění) Javy Takovéto úpravy však jazyk zbytečně nafukují a přitom zeslabují jeho robustnost Při zařazování nových funkcí se často objevují závažné problémy se zpětnou kompatibilitou Pro programování však není důležitý jazyk, ale platforma => bylo by vhodné vybudovat na danou platformou jazyk, který by: Podporoval nově se prosazující programovací techniky Bezproblémově spolupracoval s doposud vyvinutými programy Existuje řada nejrůznějších jazyků postavených nad platformou Java stačí navrhnout syntaxi a překladač i knihovnu poskytne platforma Ceylon, Closure, Groovy, JRuby, Jython, Scala,

5 Groovy.doc, verze , uloženo po :45 5 z Dynamické jazyky charakteristika Dynamické jazyky nabízejí možnost provádět za běhu operace, které statické jazyky umožňují pouze v době překladu Měnit strukturu objektů Upravovat definice datových typů, např. přidávat atributy a metody Modifikovat chování objektů změnou definice těla metody Spouštět části programu definované až za běhu Definice dynamických jazyků není jednoznačná, protože se snaží rozlišovat mezi kódem a daty a mezi dobou překladu programu a dobou jeho běhu Virtuální stroje, just-in-time překlad a schopnosti některých jazyků modifikovat kód programu za běhu činí toto dělením poněkud abstraktním Míra dynamičnosti jazyka se proto většinou odvozuje od snadnosti, s jakou je možno realizovat výše zmíněné operace Řada lidí zaměňuje dynamické jazyky s dynamicky typovanými jazyky Podrobnosti o dynamickém typování viz pasáž Dynamické typování Podrobnosti o dynamické podstatě Groovy viz pasáž 5. Dynamická podstata jazyka

6 Groovy.doc, verze , uloženo po :45 6 z Skriptovací jazyky Jako skriptovací jazyk označíme (většinou) interpretovaný programovací jazyk sloužící k ovládání jiných aplikací Skriptovací jazyky dělíme do dvou skupin Jazyky se zabudovanou podporou v operačním systému, která umožňuje v tomto jazyce přímo zadávat příkazy operačnímu systému (např. VBScript, JScript) Jazyky ovládající vyhrazenou aplikaci či skupinu aplikací (např. JavaScript) Podpora skriptovacích jazyků v operačním systému může být několika druhů Je definována speciální aplikace, která po spuštění umožní zapisovat příkazy jazyka přímo z konzoly Operační systém akceptuje zdrojový kód v daném jazyku jako spustitelný program (= skript), přičemž po spuštění tohoto programu spustí OS příslušný interpret, který zadaný program přímo interpretuje Některé jazyky se současně používají jako skriptovací a univerzální jedny (např. Perl) vznikly původně jako skriptovací a časem se rozšířily na univerzální, jiné (např. Lisp) vznikly původně jako univerzální a časem vznikly jejich dialekty používané jako skriptovací (AutoLisp, ECMALisp), další (např. Groovy) byly od samého začátku navrženy pro obě použití

7 Groovy.doc, verze , uloženo po :45 7 z Koncepce jazyka Groovy Jazyk běží nad virtuálním strojem Javy a používá knihovnu Javy, virtuální stroj nerozpozná, jestli byla třída napsaná v Javě nebo v Groovy Program může sestávat mixu z tříd napsaných v Javě a v Groovy Syntaxe Groovy je maximálně shodná s Javou, takže v optimálním případě je možno změnit jazyk pouhou změnou přípony zdrojového souboru To výrazně usnadňuje přijetí jazyka programátory pracujícími v Javě Groovy je plnohodnotný dynamický jazyk s vlastnostmi inspirovanými jazyky Smalltalk, Python, Dylan, Ruby, Perl Groovy se snaží maximalizovat své vyjadřovací schopnosti a současně podobnost své syntaxe s Javou Autoři chtěli navíc vytvořit jazyk, který by mohl být současně skriptovací V Groovy je možno velice efektivně psát dávkové soubory a různé skripty ovlivňující chování celého systému Převzato z Groovy in Action, str. 3, Fig. 1.1

8 Groovy.doc, verze , uloženo po :45 8 z 133 Groovy se nesnaží Javu nahradit, ale pouze doplnit => je zcela na vás, které části programu napíšete v Javě a které v Groovy Groovy-třídy mohou dědit z Java-tříd a naopak Programy v Groovy se překládají do standardních class-souborů; Groovy-kód lze zpětně přeložit dekompilátory Javy (nebude se ale originálu podobat a dost možná se v něm ani nevyznáte) Nástroje pro instrumentaci kódu akceptují i kód napsaný původně v Groovy Groovy je součástí ekosystému Javy byl pro něj definován Java Specification Request JSR JSR-223: Scripting for the Java Platform JSR-241: The Groovy Programming Language Groovy je druhým standardním jazykem pro platformu Java Domovská stránka Groovy: Stránka s dalšími informacemi:

9 Groovy.doc, verze , uloženo po :45 9 z Dva způsoby zavedení třídy Převzato z Groovy in Action, str. 48, Fig. 2.7

10 Groovy.doc, verze , uloženo po :45 10 z Přehled vlastnosti jazyka Groovy Bezešvá spolupráce s Javou: Převzato z Groovy in Action, str 6, Fig. 1.2, str. 10, Fig 1.4

11 Groovy.doc, verze , uloženo po :45 11 z Jak Groovy získat Groovy je součástí plné verze NetBeans; Eclipse a IDEA jej nabízí jako plug-in Instalace samostatné verze 1. Stáhnout poslední build z adresy 2. Ve Windows stačí spustit instalační soubor, v ostatních prostředích je třeba: a) Rozbalit stažený ZIP do vybrané složky/adresáře b) Definovat systémovou proměnnou GROOVY_HOME a zadat do ní cestu k této složce c) Přidat do systémové proměnné PATH cestu ke složce %GROOVY_HOME%\bin (Windows), resp. $GROOVY_HOME/bin (Unix + Linux) d) Otestovat správnost instalace zadáním příkazu groovy v Instaluje se několik programů: groovy spouští skript zadaný v parametru či souboru groovysh spouští shell umožňující komunikovat prostřednictvím konzoly groovyconsole spouští "operativní" prostředí pro jednoduché programy a testy groovyc překladač do class-souborů groovydoc vytváří dokumentaci, ekvivalent programu javadoc a některé další v závislosti na stažené verzi

12 Groovy.doc, verze , uloženo po :45 12 z Co Groovy od Javy přebírá Mechanismus balíčků a příkazy pro jejich definici (package) a import (import) Podobu příkazů a řídících struktur (podmíněné příkazy, cykly, ) s výjimkou příkazu do { } while() Definice tříd, výčtových typů, včetně interních tříd, avšak s výjimkou lokálních tříd Definice rozhraní včetně anotací Definice metod, operátory, výrazy, přiřazení Zpracování výjimek S drobnými úpravami deklarace literálů Největší rozdíl je v inicializaci polí, kde syntaxe Javy koliduje s jinými částmi Groovy a pole je proto třeba inicializovat prostřednictvím seznamů Na druhou stranu se doporučuje pole v programu nepoužívat, a dávat přednost seznamům Vytváření instancí, komunikace s objekty prostřednictvím odkazů, volání metod Syntaxi komentářů

13 Groovy.doc, verze , uloženo po :45 13 z Základní zjednodušení Groovy implicitně deklaruje importy: groovy.lang.* java.util.* groovy.util.* java.net.* java.lang.* java.io.* java.math.biginteger java.math.bigdecimal V souboru může být několik veřejných tříd a soubor se proto nemusí jmenovat podle obsažené veřejné třídy Na konci posledního příkazu na řádku není nutno psát středník Parametry volaných metod není nutno uzavírat do závorek Při zřetězeném volání metod není v řadě případů nutno používat tečky, např. paint wall with red, green and yellow je ekvivalentní klasickému zápisu paint(wall).with(red, green).and(yellow) V metodách se nemusí psát závěrečný return, automaticky se vrátí hodnota posledního výrazu/příkazu Všechny výjimky jsou převedeny na nekontrolované, je-li zachytávaná výjimka typu Exception, nemusí se v catch uvádět její typ

14 Groovy.doc, verze , uloženo po :45 14 z 133 Deklarované atributy mají automaticky definované přístupové metody, v Groovy je explicitně definujeme pouze tehdy, mají-li mít složitější tělo Zavádí literály i pro další datové typy seznamy, mapy, intervaly Všechna data jsou objektových typů, takže i čísla mají metody Zavádí nové užitečné datové typy a programové konstrukce (zejména cykly) Nechceme-li v program deklarovat typ proměnné a nechat jeho odvození na překladači, uvedeme deklaraci dané proměnné klíčovým slovem def Potřebujeme-li class-objekt, stačí napsat jméno třídy; není potřeba doplňovat.class V návěštích case příkazu switch lze použít téměř cokoliv Ve statických metodách zastupuje this odkaz na třídu, takže příkaz: println("my classobject: " + this) vytiskne zadaný text následovaný podpisem class-objektu dané třídy Cokoliv lze testovat na pravdivostní hodnotu (viz Podmínky)

15 Groovy.doc, verze , uloženo po :45 15 z Skripty Ve skriptech nemusí být příkazy uzavřeny do metody, a tím pádem ani do třídy překladač vše doplní sám current = 1; next = 1 //10.times { for (int i=0; i < 10; i++) { print current + ' ' newcurrent = next next = next + current current = newcurrent } println '' Ve skriptech nemusíme deklarovat použité proměnné stanou se automaticky lokálními proměnnými metody, kterou překladač definuje a uloží do ní veškerý kód nedefinovaný v nějaké metodě Podrobnosti o skriptech budou probrány v pasáži Specifika skriptů

16 Groovy.doc, verze , uloženo po :45 16 z Podmínky V podmínkách jsou za pravdivé jsou považovány výrazy, jejichž výsledkem je Booloean true Character char!= '\0' Collection size() > 0 Enumeration hasmoreelements() Iterator hasnext() Map size() > 0 Matcher Alespoň jeden vyhovující řetězec Number hodnota!= 0 Object[] length > 0 Jiný objekt Odkaz!= null

17 Groovy.doc, verze , uloženo po :45 17 z Sjednocení způsobů zjištění počtu prvků v kontejneru Type Zjištění velikosti v JDK a v Groovy Array atribut length size() method Array metoda size() method java.lang.reflect.array.getlength(array) String metoda length() size() method StringBuffer metoda length() size() method Collection metoda size() size() method Map metoda size() size() method File metoda length() size() method Matcher metoda groupcount() size() method

18 Groovy.doc, verze , uloženo po :45 18 z Co dalšího je jinak Operátor == vždy volá metodu equals(object). Chceme-li porovnat shodnost odkazů, musíme použít metodu is(object) Hodnoty s plovoucí čárkou jsou implicitně typy BigDecimal. Chceme-li pracovat s double, musíme u literálu uvést příponu d nebo D Implicitní přístup ke třídám, metodám a vlastnostem je nyní public ruší se implicitní přístup označovaný jako package private => zůstává pouze svatá trojice public protected private Příkaz získání hodnoty atributu, resp. přiřazení hodnoty vlastnosti (atributu) je ve skutečnosti voláním příslušné přístupové metody Groovy rozeznává více druhů textových řetězců stringů; ty mohou být uvozeny: 'apostrofy' "uvozovkami" /lomítky/ $/Dolarovými lomítky/$ '''trojicí apostrovů''' """trojicí uvozovek""" Podrobnosti v pasáži Textové literály stringy

19 Groovy.doc, verze , uloženo po :45 19 z Co Java má a Groovy (zatím) ne Cyklus do {... } while(?) Přístupová práva package private Novinky syntaxe Javy 7 (v Groovy 2.0 již jsou0 již jsou0 již jsou metoda metoda) _ Diamantový operátor: List<string> list = new ArrayList<>() Kumulované catch definující reakci na několik výjimek současně Automatizované zavírání zdrojů

20 Groovy.doc, verze , uloženo po :45 20 z Groovy rychlý úvod do jazyka Obsah 2.1 Aserce 2.2 Groovy Beans 2.3 Textové literály stringy Řetězce ohraničené apostrofy Řetězce ohraničené uvozovkami GStringy Řetězce ohraničené lomítky Řetězce ohraničené dolarovými lomítky Možnosti změny hodnoty instancí typu GString 2.4 Žádný datový typ není primitivní 2.5 Seznam List 2.6 Mapa Map 2.7 Rozsah Range Definice 2.8 Uzávěr Closure 2.9 Řídící algoritmické konstrukce Rozšíření iterovatelných objektů Interní iterátory zděděné od třídy Object Metody aplikovatelné na čísla Metoda with 2.10 Práce s čísly 2.11 Pojmenované parametry a jejich implicitní hodnoty

21 Groovy.doc, verze , uloženo po :45 21 z Aserce Programy v dynamických jazycích se musí mnohem podrobněji testovat V Groovy se hojně využívá konstrukce assert, přičemž se využívá obecněji pojaté podmínky assert true assert (x = 1) //Přiřazení výsledek je přiřazovaná hodnota assert (x == 1) //Logický výraz assert x //Aritmetická hodnota assert "Kuk" //Odkaz na objekt V Javě je assert klíčové slovo definující příkaz, pro nějž můžeme v parametrech virtuálního stroje nastavit, jestli se pro danou část programu má či nemá spouštět V Groovy není assert klíčové slov, ale metoda, která se volá pokaždé Groovy podporuje dvouparametrický assert, v němž druhý parametr specifikuje chybu; na rozdíl od Javy však není druhý parametr oddělen dvojtečkou, ale čárkou assert false, "Zde je uměle vytvořená chyba"

22 Groovy.doc, verze , uloženo po :45 22 z 133 Výrazy vyhazující výjimku //assert false //Logická hodnota //assert 0 //Číslo 0 //assert "" //Prázdný řetězce //assert null //Prázdný odkaz Výše uvedené hodnoty lze otestovat prostřednictvím jejich negace assert! null; assert! 0; assert! "" Vznikne-li při vyhodnocování argumentu funkce assert chyba, program se nám pokusí nejen vysvětlit, kde při vyhodnocování výrazu našel chybu, ale poskytne nám i informace k následnému odhalení její příčiny Exception in thread "main" Assertion failed: assert b == (a+a) false

23 Groovy.doc, verze , uloženo po :45 23 z Groovy Beans Koncept JavaBeans zavedl jisté konvence umožňující komponentový přístup k objektům Groovy používá stejné konvence jako Java, avšak zodpovědnost za definici přístupových metod bere na svá bedra překladač class Book { String title } def groovybook = new Book() Předchozí program Groovy přeloží tak, že: Definuje soukromý atribut title Definuje veřejnou metodu gettitle(), která vrátí jeho hodnotu Definuje veřejnou metodu settitle(string), která nastaví jeho hodnotu K atributu pak můžeme přistupovat zdánlivě přímo, nicméně toto přímé oslovení překladač nahradí odpovídajícím voláním přístupové metody

24 Groovy.doc, verze , uloženo po :45 24 z 133 Přímé volání metod def Book book = new Book() book.settitle("groovy conquers the world") assert book.gettitle() == "Groovy conquers the world" Nepřímé volání metod přístup prostřednictvím metod zabezpečí překladač (jinými slovy: výsledný kód je stejný jako v předchozí ukázce) book.title = "Groovy in Action" assert book.title == "Groovy in Action" book.title += '!' //Překlad: book.settitle(book.gettitle() + '!') assert book.gettitle() == "Groovy in Action!"

25 Groovy.doc, verze , uloženo po :45 25 z Textové literály stringy Řetězec ohraničený jedním apostrofem 'řetězec' Řetězec ohraničený třemi apostrofy '''řetězec''' Řetězec ohraničený jedněmi uvozovkami "řetězec" Řetězec ohraničený třemi uvozovkami """řetězec""" Řetězec ohraničený lomítky /řetězec/ Řetězec ohraničený dvojící lomítko + znak $ $/řetězec/$ Každý z těchto řetězců má vlastní sémantiku

26 Groovy.doc, verze , uloženo po :45 26 z Řetězce ohraničené apostrofy Klasický řetězec Javy pouze vyměnil ohraničující uvozovky za apostrofy a1 = 'Klasický řetězec' Řetězec uvozený třemi apostrofy je klasický řetězec, který však může zabírat několik řádků, přičemž konce řádků zadané v kódu se respektují Při používání víceřádkových řetězců se případné odsazení dalšího řádku, stane součástí výsledného řetězce => proto musí další řádek začínat zkraje a3 = '''Řetězec uvozený třemi apostrofy může zabírat několik řádků, přičemž konce řádků zadané v kódu se respektují''' Stačí-li nám rozdělit řetězec na řádky pouze ve zdrojovém kódu, můžeme jako poslední znak na řádku použít zpětné lomítko; toto odřádkování se však v zadávaném řetězci neobjeví ab = 'Zpětné lomítko na konci řádku \ nevloží odřádkování do výsledného textu' assert ab == 'Zpětné lomítko na konci řádku nevloží odřádkování do výsledného textu'

27 Groovy.doc, verze , uloženo po :45 27 z Řetězce ohraničené uvozovkami GStringy Řetězec ohraničený uvozovkami je tzv. GString ten může obsahovat výrazy, které se píší za znak $ a vyhodnocují se v době použití řetězce Je-li výraz složitější než pouhý název proměnné, vkládá se do složených závorek { } Výraz v závorkách může obsahovat i volání metod pr = 'proměnnou'; slo='složitý'; vý='výraz' u1 = "GString může vyhodnocovat $pr či celý ${slo + " " + vý.tolowercase()}" I uvozovkami ohraničené řetězce mají svojí trojitou verzi umožňující zapsat řetězec obsahující několik řádků u3 = """Odvoláváme li se pouze na $pr, nemusíme její název psát do závorek, Ty využijeme až když chceme vyhodnotit ${slo + " " + vý.tolowercase()}""" Zpětné lomítko na konci řádku máme k dispozici i v řetězcích ohraničených uvozovkami; ani zde se v zadávaném řetězci odřádkování neobjeví ub = " Zpětné lomítko na konci řádku, \ se ve výsledku neprojeví" assert ub == "Zpětné lomítko na konci řádku, se ve výsledku neprojeví"

28 Groovy.doc, verze , uloženo po :45 28 z Řetězce ohraničené lomítky Zpětné lomítko se v nich nemusí zadávat jako dvojice zpětných lomítek (je to zde běžný znak), a proto se používají především k zadávání regulárních výrazů Lomítko se v nich zadá pomocí escape sekvence \/ Kromě lomítka znají ještě escape sekvence \uhhhh Mohou obsahovat dolarové výrazy Od verze 1.8 jsou více řádkové, tj. ve vztahu ke konci řádku ve zdrojovém kódu se chovají jako trojité verze předchozích řetězců lo = /Zpětná lomítka (\) zde nemusíme zdvojovat. Tyto řetězce považují zpětné lomítko za prefix pouze tehdy, je li následované dopřeným lomítkem (\/ pak je dvojice chápána jako lomítko), anebo znakem 'u' např. znak \u00a9 je vyhodnocen jako./ l$ = /I zde lze použít výraz s $pr či celý ${slo + " " + vý}/

29 Groovy.doc, verze , uloženo po :45 29 z Řetězce ohraničené dolarovými lomítky Tyto řetězcové literály zavedlo Groovy 1.8 Ohraničíme-li lomítkový řetězec navíc znaky $ (dolar), změníme tím standardní escapovací znak \ na znak $ Znak $ bude uvozovat lomítko či sám sebe Znak \ bude nyní uvozovat pouze sekvenci \uhhhh $l = $/Znak dolar nyní píšme $$ a lomítko $/ avšak znak \u00a9 je nadále vyhodnocován jako /$

30 Groovy.doc, verze , uloženo po :45 30 z Možnosti změny hodnoty instancí typu GString Apostrofové řetězce jsou instancemi třídy java.lang.string Uvozovkové řetězce obsahující dolarové výrazy jsou instancemi třídy org.codehaus.groovy.runtime.gstringimpl, po vyhodnocení výrazů se vytvářejí instance třídy String Při používání GString-ů je třeba mít na paměti, že parametry se předávají hodnotou, takže má-li se hodnota parametru měnit v průběhu výpočtu, musí být parametr instancí nějakého proměnného typu Druhou možností je předat bezparametrický uzávěr např. ${ > string} Podrobnosti o uzávěrech viz pasáž 2.8 Uzávěr Closure Příklad k předchozímu tvrzení uvedený na další stránce demonstruje: Objekty typu String jsou neměnné, takže jakákoliv změna vede k vytvoření nového objektu Objekty typu StringBuilder jsou proměnné, takže GStringy, které je používají, mohou v průběhu času měnit svoji hodnotu Objekty typu String se dají použít jako proměnně, jsou-li správně uzavřené v dolarových závorkách

31 Groovy.doc, verze , uloženo po :45 31 z 133 str = 'oves' ;assert str instanceof String buf = new StringBuffer('oves') ;assert buf instanceof StringBuffer us = "Skákal pes přes $str" ub = "Skákal pes přes $buf" uc = "Skákal pes přes ${ >str}" assert us == 'Skákal pes přes oves' assert ub == 'Skákal pes přes oves' assert uc == 'Skákal pes přes oves' str = 'zelenou louku' buf.replace(0, 5, 'zelenou louku') assert us == 'Skákal pes přes oves' assert ub == 'Skákal pes přes zelenou louku' assert uc == 'Skákal pes přes zelenou louku'

32 Groovy.doc, verze , uloženo po :45 32 z 133 Při volání metody se situace zjednodušuje, protože při každém volání se řetězec vyhodnocuje znovu, takže není třeba zabezpečovat změnu def method(param) { return "Parametr: $param" } assert method(1) == 'Parametr: 1' assert method('groovy') == 'Parametr: Groovy'

33 Groovy.doc, verze , uloženo po :45 33 z Žádný datový typ není primitivní Všechny hodnoty primitivních typů se chovají jako objekty, takže jim lze posílat zprávy = volat jejich metody def s = '' 3.times { s += 'bu' } assert s == 'bububu' def x = 1 assert x instanceof Integer Operátory jsou ve skutečnosti definovány jako metody => použití operátoru nebo zavolání odpovídající metody má proto stejný efekt def x = 1 def y = 2 assert x + y == 3 assert x.plus(y) == 3 assert (x y) * y == 2 assert x.minus(y).multiply(y) == 1

34 Groovy.doc, verze , uloženo po :45 34 z Seznam List Skupina čárkami oddělených hodnot v hranatých závorkách je chápána jako literál seznamu => seznam tak můžeme inicializovat přímo v deklaraci K prvkům seznamů můžeme přistupovat prostřednictvím indexů obdobně, jako přistupujeme k prvkům pole def roman = ['', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII'] assert roman[4] == 'IV' //Přístup k prvku seznamu roman[8] = 'VIII' //Přidání prvku do seznamu assert roman.size() == 9 Seznam se automaticky konvertuje na objekt libovolného typu tak, že překladač zavolá konstruktor, jemuž se prvky seznamu předají jako parametry (třída samozřejmě musí daný konstruktor mít) java.awt.point point = [10, 20] // Ekvivalentní new Point(10, 20) assert point.tostring() == 'java.awt.point[x=10,y=20]' list = [100, 200] point = list assert point.tostring() == 'java.awt.point[x=100,y=200]'

35 Groovy.doc, verze , uloženo po :45 35 z 133 Hodnoty seznamu lze přiřadit členům skupiny proměnných uzavřených v závorkách list = [10, 'xxx', true] (a, b, c) = list assert (a==10) && (b=='xxx') && c (c, b, a) = ['third', 'second', 'first'] assert (a=='first') && (b=='second') && (c=='third') Přebytečné prvky v seznamu se zahodí, chybějící se přiřadí jako null (k, l, m) = [1,2,3,4] assert (k==1) && (l==2) && (m==3) (x, y, z) = [10,20] assert (x==10) && (y==20) && (z==null)

36 Groovy.doc, verze , uloženo po :45 36 z Mapa Map Skupina čárkami oddělených dvojic hodnot, které jsou vzájemně odděleny dvojtečkou, je chápána jako literál mapy => i mapy lze inicializovat přímo v deklaraci V této definici je objekt vlevo od dvojtečky chápán jako klíč a objekt vpravo od dvojtečky jako hodnota Mapu můžeme inicializovat přímo v deklaraci jako seznam dvojic klíč : hodnota def http = [ //Deklarace inicializované mapy 100 : 'CONTINUE', 200 : 'OK', 400 : 'BAD REQUEST' ] assert http[200] == 'OK' //Prvek indexujeme hodnotou klíče http[200] = 'YES' //Změna hodnoty existujícího prvku http[500] = 'INTERNAL SERVER ERROR' //Přidání prvku do mapy assert http.size() == 4

37 Groovy.doc, verze , uloženo po :45 37 z 133 Mapa se automaticky převede na jiný typ tak, že překladač zavolá jeho bezparametrický konstruktor a poté přiřadí hodnoty prvků mapy stejně pojmenovaným atributům Cílový typ musí mít bezparametrický konstruktor, nastavované atributy mohou být soukromé, ale nesmějí být konstantní, java.awt.point point = [y:20, x:10] // Ekvivalentní new Point(10, 20) assert point.tostring() == 'java.awt.point[x=10,y=20]' map = [x:100, y:200] point = map assert point.tostring() == 'java.awt.point[x=100,y=200]' class MappedClass { private int x, y, z; } String tostring() { return "MappedClass[x=$x, y=$y, z=$z]" } MappedClass mc = [y:200, z:300] //Hodnota x se nezmění assert mc.tostring() == 'MappedClass[x=0, y=200, z=300]'

38 Groovy.doc, verze , uloženo po :45 38 z Rozsah Range Rozsahy nejsou ve standardní knihovně Javy, Groovy je přidává Literálem rozsahu je dvojice porovnatelných hodnot oddělených dvěma tečkami; tyto hodnoty budeme označovat jako dolní a horní mez Je-li před druhou hodnotou menšítko, nepočítá se horní mez do rozsahu def x = 1..10; def y = 1..<10 assert x.contains(10); assert y.contains(9) assert x.contains(15) == false; assert y.contains(10) == false assert x.size() == 10; assert y.size() == 9 assert x.from == 1; assert y.from == 1 assert x.to == 10; assert y.to == 9 assert x.reverse() == 10..1; assert y.reverse() == 9..1 Rozsahy lze s jistou rezervou považovat za seznamy s posloupností hodnot def numberlist = [1,2,3,4,5,6,7,8,9,10] def numberrange = assert numberlist == numberrange //Jsou ekvivalentní, ale každý jiného typu assert (numberlist.class == ArrayList) && (numberrange instanceof Range)

39 Groovy.doc, verze , uloženo po :45 39 z Definice Rozsahy mohou být definovány nad libovolným uspořádaným typem, tj. typem, který: Definuje metody next() and previous(), resp. operátory ++ a vracející následníka, resp. předchůdce dané instance Implementuje java.lang.comparable, takže definuje metodu compareto, resp. ekvivalentní operátor <=> (spaceship operator) Přítomnost prvku v rozsahu zjišťujeme operátorem in: if (objekt in rozsah) Tentýž operátor lze použít v cyklu for místo dvojtečky enum DAY { Sun, Mon, Tue, Wed, Thu, Fri, Sat } working = DAY.Mon..DAY.Fri report = '' for (day in working) { report += day.tostring() + ' ' } assert report == 'Mon Tue Wed Thu Fri '

40 Groovy.doc, verze , uloženo po :45 40 z Uzávěr Closure Myšlenka, že funkce (a obecně část kódu) je běžným objektem jazyka stejně jako např. číslo, byla implementována již v roce 1958 v jazyce LISP Teoretickým základem je tzv. λ-kalkulus zavedený Churchem v roce 1936 V klasických procedurálních jazycích (Fortran Algol Pascal ) jsou procedury a funkce definovány jako zvláštní entity, které není možné uložit do proměnných Moderní programovací jazyky se snaží znovu začít pracovat s částmi kódu jako s entitami postavenými na roveň datům Termín uzávěr (closure) označuje skutečnost, že takováto část kódu musí nějakým způsobem uzavřít proměnné, s nimiž bude pracovat, aby nebyly v nevhodnou chvíli systémem odstraněny V OO jazycích nepoužívajících uzávěry se funkčnost uzávěrů nahrazuje použitím návrhového vzoru Příkaz (Command), který zabalí do objektu příslušnou část kódu jako metodu daného objektu Příklad: java.io.file.list(filenamefilter) Nevýhodou tohoto přístupu je zbytečný nárůst počtu explicitně definovaných datových typů (třída + rozhraní) a výrazně zašuměný zdrojový kód

41 Groovy.doc, verze , uloženo po :45 41 z 133 V příkladu na obrázku je volána metoda each(groovy.lang.closure) seznamu, což je metoda, o níž Groovy rozšiřuje portfolio metod třídy Object. Tato metoda vyžaduje jako svůj parametr uzávěr, který definuje, co se má udělat s každým z prvků daného iterovaného objektu Zobrazené volání využívá pravidla, že má-li metoda jako svůj poslední parametr uzávěr, nemusí jej uvádět v seznamu parametrů, ale může jej uvést až za ním V tomto případě byl uzávěr jediným parametrem, takže seznam klasických parametrů zcela chybí Převzato z Groovy in Action, str 44, Fig. 1.2

42 Groovy.doc, verze , uloženo po :45 42 z 133 Uzávěry mají své parametry vyjmenované za otevírací složenou závorkou a oddělené od vykonávaného kódu šipkou > Je-li parametr jen jeden, nemusí se uvádět a použije se pro něj implicitní název it list1 = [1, 3, 5, 7] list2 = list1.collect{ it *= 2 } //Vyrobí ze zpracovaných hodnot seznam assert list2 == [2, 6, 10, 14] Není-li parametr žádný, napíše se samotná šipka: { > kóduzávěru } Takovýto uzávěr byl použit např. v ukázce vyhodnocování GString-ů Podrobněji se k uzávěrům vrátíme v samostatné kapitole Uzávěry

43 Groovy.doc, verze , uloženo po :45 43 z Řídící algoritmické konstrukce Konstrukce if, while, switch a klasický cyklus for(inicializace, podmínka, modifikace) fungují jako v Javě def list = [] for (int j=0; j < 5; j++) { list += j } assert list == [0, 1, 2, 3, 4] Cyklus do { } while( ) nelze použít, Groovy nezná klíčové slovo do Dvojtečkový cyklus for (cyklus for each) nahrazuje dvojtečku slovem in string = '' for (num in 0..9) { string += num } assert string == ' '

44 Groovy.doc, verze , uloženo po :45 44 z Rozšíření iterovatelných objektů Groovy výrazně rozšiřuje paletu iterovatelných objektů; iteruje se podle následujících pravidel (a priorit): 1. java.util.iterator... Použije jej 2. org.w3c.dom.nodelist... Iterace přes uzly 3. java.util.enumeration... Převede jej na Iterator 4. java.util.regex.matcher... Iterace přes výskyty 5. Metoda iterator... Zavolat 6. Collections... Collection.iterator 7. java.util.map... Iterace přes objekty Map.Entry 8. Array... Iterace přes prvky 9. MethodClosure... Iterace přes volání 10. java.lang.string... Iterace přes znaky 11. java.io.file... Iterace přes řádky 12. null... Prázdný iterátor 13. Ostatní... Použije se pouze daný objekt

Výčtový typ strana 67

Výčtový typ strana 67 Výčtový typ strana 67 8. Výčtový typ V této kapitole si ukážeme, jak implementovat v Javě statické seznamy konstant (hodnot). Příkladem mohou být dny v týdnu, měsíce v roce, planety obíhající kolem slunce

Více

Seminář Java II p.1/43

Seminář Java II p.1/43 Seminář Java II Seminář Java II p.1/43 Rekapitulace Java je case sensitive Zdrojový kód (soubor.java) obsahuje jednu veřejnou třídu Třídy jsou organizovány do balíků Hierarchie balíků odpovídá hierarchii

Více

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod.

14.4.2010. Obsah přednášky 7. Základy programování (IZAPR) Přednáška 7. Parametry metod. Parametry, argumenty. Parametry metod. Základy programování (IZAPR) Přednáška 7 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 229, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky 7 Parametry metod, předávání

Více

1. Programování proti rozhraní

1. Programování proti rozhraní 1. Programování proti rozhraní Cíl látky Cílem tohoto bloku je seznámení se s jednou z nejdůležitější programátorskou technikou v objektově orientovaném programování. Tou technikou je využívaní rozhraní

Více

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni!

Příklad : String txt1 = new String( Ahoj vsichni! ); //vytvoří instanci třídy String a přiřadí ji vnitřní hodnotu Ahoj vsichni! Java práce s řetězci Trochu povídání.. Řetězce jsou v Javě reprezentovány instancemi tříd StringBuffer a String. Tyto třídy jsou součástí balíčku java.lang, tudíž je možno s nimi pracovat ihned bez nutného

Více

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech

7 Formátovaný výstup, třídy, objekty, pole, chyby v programech 7 Formátovaný výstup, třídy, objekty, pole, chyby v programech Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost formátovanému výstupu,

Více

Datové typy strana 29

Datové typy strana 29 Datové typy strana 29 3. Datové typy Jak již bylo uvedeno, Java je přísně typový jazyk, proto je vždy nutno uvést datový typ datového atributu, formálního parametru metody, návratové hodnoty metody nebo

Více

Úvod do Groovy pro Java experty

Úvod do Groovy pro Java experty Úvod do Groovy pro Java experty Václav Pech Senior Software Developer JetBrains, Inc. Něco o mně Václav Pech Programátor Nadšenec do Groovy JetBrains Dodavatel Vašich oblíbených nástrojů IntelliJ IDEA,

Více

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1 24-2-2 PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE AUTOR DOKUMENTU: MGR. MARTINA SUKOVÁ DATUM VYTVOŘENÍ: 23.7.2013 KLÍČOVÁ AKTIVITA: 02 UČIVO: STUDIJNÍ OBOR: PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) INFORMAČNÍ TECHNOLOGIE

Více

7. Dynamické datové struktury

7. Dynamické datové struktury 7. Dynamické datové struktury Java poskytuje několik možností pro uložení většího množství dat (tj. objektů či primitivních datových typů) v paměti. S nejjednodušší z nich, s polem, jsme se již seznámili.

Více

Skriptovací jazyky. Obsah

Skriptovací jazyky. Obsah Skriptovací jazyky doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Obsah Co je to skriptovací jazyk? Výhody a nevýhody

Více

Proměnné a datové typy

Proměnné a datové typy Proměnné a datové typy KAPITOLA 2 V této kapitole: Primitivní datové typy Proměnné Opakování Mezi základní dovednosti každého programátora bezesporu patří dobrá znalost datových typů. Ta vám umožní efektivní

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

7. Datové typy v Javě

7. Datové typy v Javě 7. Datové typy v Javě Primitivní vs. objektové typy Kategorie primitivních typů: integrální, boolean, čísla s pohyblivou řádovou čárkou Pole: deklarace, vytvoření, naplnění, přístup k prvkům, rozsah indexů

Více

Abstraktní datové typy: zásobník

Abstraktní datové typy: zásobník Abstraktní datové typy: zásobník doc. Ing. Miroslav Beneš, Ph.D. katedra informatiky FEI VŠB-TUO A-1007 / 597 324 213 http://www.cs.vsb.cz/benes Miroslav.Benes@vsb.cz Abstraktní datové typy omezené rozhraní

Více

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v

DSL manuál. Ing. Jan Hranáč. 27. října 2010. V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v DSL manuál Ing. Jan Hranáč 27. října 2010 V této kapitole je stručný průvodce k tvorbě v systému DrdSim a (v současné době krátký) seznam vestavěných funkcí systému. 1 Vytvoření nového dobrodružství Nejprve

Více

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39 Programování v C# Hodnotové datové typy, řídící struktury Petr Vaněček 1 / 39 Obsah přednášky Referenční datové typy datové položky metody přístupové metody accessory, indexery Rozhraní Pole 2 / 39 Třídy

Více

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007

WSH Windows Script Hosting. OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 WSH Windows Script Hosting OSY 2 Přednáška číslo 2 opravená verze z 15.10.2007 Co je skript? Skriptování nástroj pro správu systému a automatizaci úloh Umožňuje psát skripty jednoduché interpretované programové

Více

Prezentace a vysvětlení programového prostředí NXC

Prezentace a vysvětlení programového prostředí NXC Úvod Další jazyk, který je možno použít pro programování NXT kostky je NXC Not exatly C Na rozdíl od jazyku NXT-G, kde jsme vytvářeli program pomocí grafických prvků přesněji řečeno pomocí programovacích

Více

Kód. Proměnné. #include using namespace std; int main(void) { cout << "Hello world!" << endl; cin.get(); return 0; }

Kód. Proměnné. #include <iostream> using namespace std; int main(void) { cout << Hello world! << endl; cin.get(); return 0; } Jazyk C++ Jazyk C++ je nástupcem jazyka C. C++ obsahuje skoro celý jazyk C, ale navíc přidává vysokoúrovňové vlastnosti vyšších jazyků. Z toho plyne, že (skoro) každý platný program v C je také platným

Více

Z. Kotala, P. Toman: Java ( Obsah )

Z. Kotala, P. Toman: Java ( Obsah ) Z. Kotala, P. Toman: Java ( Obsah ) 13. Výjimky Výjimka (exception) je definována jako událost, která nastane během provádění programu a která naruší normální běh instrukcí. Výjimka je vyvolána například

Více

3. Třídy. Základní pojmy objektového programování. Třídy

3. Třídy. Základní pojmy objektového programování. Třídy 3. Třídy Základní pojmy objektového programování Jak už víme, je Java objektovým programovacím jazykem. V úvodu této kapitoly si objasníme základní pojmy objektové teorie. Objekt představuje souhrn dat

Více

Groovy agilní Java. Pavel Kříž Filip Malý

Groovy agilní Java. Pavel Kříž Filip Malý Groovy agilní Java Pavel Kříž Filip Malý Úvod Dynamický skriptovací jazyk pod JVM Navržen pro platformu Java, zcela interoperabilní (na úrovni bajtkódu) s běžnými programy v Javě, silně objektově orientovaný

Více

Projekt Obrázek strana 135

Projekt Obrázek strana 135 Projekt Obrázek strana 135 14. Projekt Obrázek 14.1. Základní popis, zadání úkolu Pracujeme na projektu Obrázek, který je ke stažení na http://java.vse.cz/. Po otevření v BlueJ vytvoříme instanci třídy

Více

1. Téma 12 - Textové soubory a výjimky

1. Téma 12 - Textové soubory a výjimky 1. Téma 12 - Textové soubory a výjimky Cíl látky Procvičit práci se soubory s využitím výjimek. 1.1. Úvod Program, aby byl programem, my mít nějaké výstupy a vstupy. Velmi častým případem je to, že se

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++ Globální konstantní proměnné Konstantní proměnné specifikujeme s klíčovým slovem const, tyto konstantní proměné

Více

MS Excel 2010. Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU

MS Excel 2010. Základy maker. Operační program Vzdělávání pro konkurenceschopnost. Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU MS Excel 2010 Základy maker Operační program Vzdělávání pro konkurenceschopnost Projekt Zvyšování IT gramotnosti zaměstnanců vybraných fakult MU Registrační číslo: CZ.1.07/2.2.00/15.0224, Oblast podpory:

Více

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování. Delphi lekce 6 Minimum z Object Pascalu Vrátíme se ještě k základům Object Pascalu. Struktura programu Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově

Více

2 Datové typy v jazyce C

2 Datové typy v jazyce C 1 Procedurální programování a strukturované programování Charakteristické pro procedurální programování je organizace programu, který řeší daný problém, do bloků (procedur, funkcí, subrutin). Původně jednolitý,

Více

Objektově orientované programování v jazyce Python

Objektově orientované programování v jazyce Python Objektově orientované programování v jazyce Python Co to je objektově orientované programování Python není přímo objektově orientovaný jazyk, ale podporuje nejdůležitější části objektově orientovaného

Více

Kolekce, cyklus foreach

Kolekce, cyklus foreach Kolekce, cyklus foreach Jen informativně Kolekce = seskupení prvků (objektů) Jednu již známe pole (Array) Kolekce v C# = třída, která implementuje IEnumerable (ICollection) Cyklus foreach ArrayList pro

Více

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích.

Windows je registrovaná obchodní známka firmy Microsoft v USA a v ostatních zemích. Sun, Sun Microsystems, Java a všechny obchodní známky a loga obsahující Sun nebo Java jsou ochrannými známkami nebo registrovanými ochrannými známkami firmy Sun Microsystems, Inc. v USA a v ostatních zemích.

Více

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++

Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Pokročilé programování v jazyce C pro chemiky (C3220) Dědičnost tříd v C++ Dědičnost tříd Dědičnost umožňuje vytvářet nové třídy z tříd existujících tak, že odvozené třídy (tzv. potomci) dědí vlastnosti

Více

10 Balíčky, grafické znázornění tříd, základy zapozdření

10 Balíčky, grafické znázornění tříd, základy zapozdření 10 Balíčky, grafické znázornění tříd, základy zapozdření Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně bude věnována pozornost příkazům balíčkům, grafickému

Více

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady

4.4.2012. Obsah přednášky. Příkaz for neúplný. Příkaz for příklady. Cyklus for each (enhanced for loop) Příkaz for příklady Základy programování (IZAPR, IZKPR) Přednáška 5 Ing. Michael Bažant, Ph.D. Katedra softwarových technologií Kancelář č. 03 022, Náměstí Čs. legií Michael.Bazant@upce.cz Obsah přednášky Příkazy cyklu -

Více

Bridge. Známý jako. Účel. Použitelnost. Handle/Body

Bridge. Známý jako. Účel. Použitelnost. Handle/Body Bridge Bridge Známý jako Handle/Body Účel odděluje abstrakci (rozhraní a jeho sémantiku) od její konkrétní implementace předchází zbytečnému nárůstu počtu tříd při přidávání implementací používá se v době

Více

Datové abstrakce v programovacích jazycích

Datové abstrakce v programovacích jazycích Datové abstrakce v programovacích jazycích Motivace Strukturovat rozsáhlé programy Dovolit separátní překlad Možné formy strukturování: Podprogramy původní forma abstrakce -abstrakce výpočtů Moduly kontejnery

Více

Využití OOP v praxi -- Knihovna PHP -- Interval.cz

Využití OOP v praxi -- Knihovna PHP -- Interval.cz Page 1 of 6 Knihovna PHP Využití OOP v praxi Po dlouhé teorii přichází na řadu praxe. V následujícím textu si vysvětlíme možnosti přístupu k databázi pomocí různých vzorů objektově orientovaného programování

Více

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4

2 Strukturované datové typy 2 2.1 Pole... 2 2.2 Záznam... 3 2.3 Množina... 4 Obsah Obsah 1 Jednoduché datové typy 1 2 Strukturované datové typy 2 2.1 Pole.................................. 2 2.2 Záznam................................ 3 2.3 Množina................................

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Part 1

MQL4 COURSE. By Coders guru www.forex-tsd.com. -5 Smyčky & Rozhodnutí Part 1 MQL4 COURSE By Coders guru www.forex-tsd.com -5 Smyčky & Rozhodnutí Part 1 Vítejte v páté lekci mého kurzu MQL4. Předchozí lekci si můžete stáhnout z tohoto odkazu: http://forex-tsd.com /attachment.php?attachmentid=399

Více

Datové struktury. alg12 1

Datové struktury. alg12 1 Datové struktury Jedna z klasických knih o programování (autor prof. Wirth) má název Algorithms + Data structures = Programs Datová struktura je množina dat (prvků, složek, datových objektů), pro kterou

Více

PHP. nejen pro začátečníky. $c; echo { Martin Pokorný. Vzdìlávání, které baví www.c-media.cz. Nakladatelství a vydavatelství.

PHP. nejen pro začátečníky. $c; echo { Martin Pokorný. Vzdìlávání, které baví www.c-media.cz. Nakladatelství a vydavatelství. }else{ { if($b >$ c){ echo $max=$b; // vypí }else{ echo $max=$c; // vypí?> cas se }e B : se{ echo B ; default: ($b>$c){ echo C ; } $max=$b; }else{ $max=$c; PHP nejen pro začátečníky k;?> $c; echo { Martin

Více

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události

Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události Petr Blaha Základy programování Proměnné Procedury, funkce, události Operátory a podmínková logika Objekt Range a Cells, odkazy Vlastnosti, metody a události Cykly Základní funkce (matematické, textové,

Více

17. Projekt Trojúhelníky

17. Projekt Trojúhelníky Projekt Trojúhelníky strana 165 17. Projekt Trojúhelníky 17.1. Základní popis, zadání úkolu Pracujeme na projektu Trojúhelníky, který je ke stažení na java.vse.cz. Aplikace je napsána s textovým uživatelským

Více

7.5 Diagram tříd pokročilé techniky

7.5 Diagram tříd pokročilé techniky 7.5 Diagram tříd pokročilé techniky Stereotypy - jeden ze základních prostředků rozšiřitelnosti UML - pro modelovací konstrukce neexistující v UML, ale podobné předdefinované v UML definované uživatelem

Více

Základy PHP. Úvod do jazyka PHP a principů skriptování na straně serveru

Základy PHP. Úvod do jazyka PHP a principů skriptování na straně serveru Základy PHP Úvod do jazyka PHP a principů skriptování na straně serveru Princip fungování web serveru Server se podívá do svého datového úložiště Hypertext Transfer Protocol Internet Internet Nalezne požadovaný

Více

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah:

Testování. Zadání příkladu. Vytvoření kostry třídy. Obsah: Obsah: Testování... 1 Zadání příkladu... 1 Vytvoření kostry třídy... 1 Napsání testů... 2 Testy správnosti... 3 Testy výjimek... 3 Testy vztahů/závislostí... 4 Zdrojový text testu... 4 Spuštění testů...

Více

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný

Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný Ukazatel (Pointer) jako datový typ - proměnné jsou umístěny v paměti na určitém místě (adrese) a zabírají určitý prostor (počet bytů), který je daný typem proměnné - ukazatel je tedy adresa společně s

Více

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans. 1 Grafické rozhraní Studijní cíl Tento blok je věnován vytváření programů s využitím grafického rozhraní (GUI). Vysvětlen bude základní filozofie pro vytváření aplikací s GUI ve srovnání s konzolovými

Více

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě

PHP PHP je skriptovací programovací jazyk dynamických internetových stránek PHP je nezávislý na platformě PHP PHP původně znamenalo Personal Home Page a vzniklo v roce 1996, od té doby prošlo velkými změnami a nyní tato zkratka znamená Hypertext Preprocessor. PHP je skriptovací programovací jazyk, určený především

Více

MQL4 COURSE. V tomto dodatku je obsažen popis 25 obchodních funkcí jazyka MQL4. Rozhodl jsem se napsat

MQL4 COURSE. V tomto dodatku je obsažen popis 25 obchodních funkcí jazyka MQL4. Rozhodl jsem se napsat MQL4 COURSE By Coders guru www.forex-tsd.com (Appendix 2) Trading Functions -------------------- V tomto dodatku je obsažen popis 25 obchodních funkcí jazyka MQL4. Rozhodl jsem se napsat tento dodatek

Více

Seznámení s datovými typy a operátory

Seznámení s datovými typy a operátory Knihovny tříd Javy KAPITOLA 2 Seznámení s datovými typy a operátory Klíčové dovednosti a pojmy Seznámení s primitivními typy jazyka Java. Používání literálů. Inicializace proměnných. Seznámení s pravidly

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci

Stream API. Petr Krajča. Základy programovaní 4 (Java) Katedra informatiky Univerzita Palackého v Olomouci Základy programovaní 4 (Java) Stream API Petr Krajča Katedra informatiky Univerzita Palackého v Olomouci Petr Krajča (UP) KMI/ZP4JV 5. listopad, 2014 1 / 10 Stream API Java 8 nový přístup k práci s kolekcemi

Více

Vstupní požadavky, doporučení a metodické pokyny

Vstupní požadavky, doporučení a metodické pokyny Název modulu: Základy PHP Označení: C9 Stručná charakteristika modulu Modul je orientován na tvorbu dynamických stánek aktualizovaných podle kontextu volání. Jazyk PHP umožňuje velmi jednoduchým způsobem

Více

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4 Uložení dat v počítači Data = užitečné, zpracovávané informace Kódování (formát) dat = způsob uložení v počítači (nutno vše převést na čísla ve dvojkové soustavě) Příklady kódování dat Text každému znaku

Více

Principy UML. Clear View Training 2005 v2.2 1

Principy UML. Clear View Training 2005 v2.2 1 Principy UML Clear View Training 2005 v2.2 1 1.2 Co je touml? Unified Modelling Language (UML) je univerzálníjazyk pro vizuální modelování systémů Podporuje všechny životní cykly Mohou jej implementovat

Více

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda

3. Je defenzivní programování technikou skrývání implementace? Vyberte jednu z nabízených možností: Pravda Nepravda 1. Lze vždy z tzv. instanční třídy vytvořit objekt? 2. Co je nejčastější příčinou vzniku chyb? A. Specifikace B. Testování C. Návrh D. Analýza E. Kódování 3. Je defenzivní programování technikou skrývání

Více

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write(\nPrumerna teplota je {0}, tprumer); Pole (array) Motivace Častá úloha práce s větším množstvím dat stejného typu o Př.: průměrná teplota za týden a odchylka od průměru v jednotlivých dnech Console.Write("Zadej T pro.den: "); double t = Double.Parse(Console.ReadLine());

Více

Sekvenční a podmíněné provádění

Sekvenční a podmíněné provádění Programování v Bourne shellu Sekvenční a podmíněné provádění Sekvenční provádění znamená vykonávání jednoho příkazu za druhým bez ohledu na okolnosti. Pro oddělení příkazů při sekvenčním provádění se používá

Více

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu

VÝUKOVÝ MATERIÁL. Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632 Číslo projektu VÝUKOVÝ MATERIÁL Identifikační údaje školy Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace Bratislavská 2166, 407 47 Varnsdorf, IČO: 18383874 www.vosassvdf.cz, tel. +420412372632

Více

Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku

Databázové aplikace pro internetové prostředí. 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Databázové aplikace pro internetové prostředí 01 - PHP úvod, základní princip, vkládání skriptu, komentáře, výpis na obrazovku Projekt: Inovace výuky prostřednictvím ICT Registrační číslo: CZ.1.07/1.5.00/34.250

Více

XQuery: dotazovací jazyk nad XML

XQuery: dotazovací jazyk nad XML XQuery: dotazovací jazyk nad XML Jakub Lysák Tomáš Hradecký XML vs. relační model dat XML nepravidelná struktura metadata jsou uložena společně s vlastními daty stromová struktura data mají určené pořadí

Více

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávání v informačních a komunikačních technologií

Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávání v informačních a komunikačních technologií VY_32_INOVACE_33_05 Škola Střední průmyslová škola Zlín Název projektu, reg. č. Inovace výuky prostřednictvím ICT v SPŠ Zlín, CZ.1.07/1.5.00/34.0333 Vzdělávací oblast Vzdělávání v informačních a komunikačních

Více

MQL4 COURSE. By Coders guru www.forex-tsd.com. -4 Operace & Výrazy

MQL4 COURSE. By Coders guru www.forex-tsd.com. -4 Operace & Výrazy MQL4 COURSE By Coders guru www.forex-tsd.com -4 Operace & Výrazy Vítejte ve čtvrté lekci mého kurzu MQL4. Předchozí lekce Datové Typy prezentovaly mnoho nových konceptů ; Doufám, že jste všemu porozuměli,

Více

Nápověda k aplikaci EA Script Engine

Nápověda k aplikaci EA Script Engine Nápověda k aplikaci EA Script Engine Object Consulting s.r.o. 2006 Obsah Nápověda k aplikaci EA Script Engine...1 1. Co je EA Script Engine...2 2. Důležité upozornění pro uživatele aplikace EA Script Engine...3

Více

Virtuální metody - polymorfizmus

Virtuální metody - polymorfizmus - polymorfizmus - potomka lze použít v místě, kde je možné použít předka - v dosud probraných situacích byly vždy volány funkce, které jsou známy již v době překladu. V situaci, kdy v době překladu není

Více

Program a životní cyklus programu

Program a životní cyklus programu Program a životní cyklus programu Program algoritmus zapsaný formálně, srozumitelně pro počítač program se skládá z elementárních kroků Elementární kroky mohou být: instrukce operačního kódu počítače příkazy

Více

Databáze pro evidenci výrobků

Databáze pro evidenci výrobků Databáze pro evidenci výrobků Databáze ve formátu Microsoft Access je součástí systému, který řídí automatizovanou výrobní linku. Tabulka tblcharge obsahuje data o výrobcích a je plněna automaticky řídicím

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

1. Téma 03 - Rozhodování

1. Téma 03 - Rozhodování 1. Téma 03 - Rozhodování Cíl látky Seznámit se a prakticky si vyzkoušet zápis rozhodování v jazyce Java 1.1. Úvod Jednou z nejčastěji používanou konstrukcí při programování je rozhodování. Právě této problematice

Více

22. Tvorba webových stránek

22. Tvorba webových stránek 22. Tvorba webových stránek Webové stránky jsou spolu s elektronickou poštou nejpoužívanější prostředky internetu. Brouzdáme li internetem používáme nějaký prohlížeč. To, co vidíme na obrazovce v prohlížeči

Více

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje

IUJCE 07/08 Přednáška č. 4. v paměti neexistuje. v paměti existuje Konstanty I možnosti: přednostně v paměti neexistuje žádný ; o preprocesor (deklarace) #define KONSTANTA 10 o konstantní proměnná (definice) const int KONSTANTA = 10; příklad #include v paměti

Více

PHP. Čtvrtek 8. září. Čtvrtek 15. září. Anonymní test znalostí

PHP. Čtvrtek 8. září. Čtvrtek 15. září. Anonymní test znalostí Čtvrtek 8. září Anonymní test znalostí Čtvrtek 15. září PHP je programovací jazyk, který pracuje na straně serveru. S PHP můžete ukládat a měnit data webových stránek. PHP původně znamená Personal Home

Více

Základy XML struktura dokumentu (včetně testových otázek)

Základy XML struktura dokumentu (včetně testových otázek) Základy XML struktura dokumentu (včetně testových otázek) Otakar Čerba Oddělení geomatiky Katedra matematiky Fakulta aplikovaných věd Západočeská univerzita v Plzni Přednáška z předmětu Počítačová kartografie

Více

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování

Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování. Předmět: Programování Vzdělávací oblast: Informatika a informační a komunikační technologie Vzdělávací obor: Programování Vzdělávací oblast Informatika a informační a komunikační technologie pro vzdělávací obor Programování

Více

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <->

Znaky. IAJCE Přednáška č. 10. každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak <-> Znaky každému znaku je nutné přiřadit nějaké číslo (nezáporné přímé mapování znak číslo) kódování jiný příklad kódování existuje mnoho kódů pojmy: morseova abeceda problémy o znaková sada které znaky

Více

RELAČNÍ DATABÁZE ACCESS

RELAČNÍ DATABÁZE ACCESS RELAČNÍ DATABÁZE ACCESS 1. Úvod... 2 2. Základní pojmy... 3 3. Vytvoření databáze... 5 4. Základní objekty databáze... 6 5. Návrhové zobrazení tabulky... 7 6. Vytváření tabulek... 7 6.1. Vytvoření tabulky

Více

19. Projekt Adventura

19. Projekt Adventura Projekt Adventura strana 189 19. Projekt Adventura 19.1. Základní popis, zadání úkolu Pracujeme na projektu Adventura, který je ke stažení na java.vse.cz. Po otevření v BlueJ vytvoříme instanci třídy Hra.

Více

Java aplety. Předávání parametrů z HTML

Java aplety. Předávání parametrů z HTML Java aplety Aplety jsou speciální formou Java aplikací - mohou být spouštěny z prostředí WWW prohlížeče. Aby je prohlížeč spustil, musíme vložit do HTML stránky potřebné příkazy:

Více

Platforma.NET 4. hodina dnes to bude ideologické

Platforma.NET 4. hodina dnes to bude ideologické Platforma.NET 4. hodina dnes to bude ideologické Aleš Keprt Ales.Keprt@upol.cz říjen 2006 Doporučená literatura 1. Duffy J. Professional.NET Framework 2.0. Wrox Press, 2006. 2. Wikipedia.NET Framework

Více

Jazyk C++ II. Šablony a implementace

Jazyk C++ II. Šablony a implementace Jazyk C++ II Šablony a implementace AR 2013/2014 Jazyk C++ II Úvod Dědičnost a kompozice nejsou vždy tou správnou odpovědí na požadavky znovupoužitelnosti kódu. Proto máme možnost definování určité třídy

Více

InputStream. FilterInputStream

InputStream. FilterInputStream 6. Vstupy a výstupy Pro práci se vstupy a výstupy nám Java poskytuje celou řadu tříd a jejich metod. Jsou uloženy v balíku java.io. Tato knihovna je založena na mechanizmu tzv. vstupních a výstupních proudů

Více

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML.

24. XML. Aby se dokument XML vůbec zobrazil musí být well-formed (správně strukturovaný). To znamená, že splňuje formální požadavky specifikace XML. 24. XML Úvod Značkovací jazyk XML (extensible Markup Language) vznikl ze staršího a obecnějšího jazyku SGML (Standard Generalized Markup Language). XML byl vyvinut konsorciem W3C, aby poskytl standardní

Více

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27

Úvod Informace o prostředí Práce se soubory Regulární výrazy Konec. Programování v C# Soubory a regulární výrazy. Petr Vaněček 1 / 27 Programování v C# Soubory a regulární výrazy Petr Vaněček 1 / 27 Obsah přednášky Informace o prostředí Práce se soubory Regulární výrazy 2 / 27 Zprostředkování informací Třída System.Environment Poskytuje

Více

KAPITOLA 5. Práce s textovými řetězci. V této kapitole najdete: Deklarace textových řetězců Operace s řetězci Ukázkový kód pro operace s řetězci

KAPITOLA 5. Práce s textovými řetězci. V této kapitole najdete: Deklarace textových řetězců Operace s řetězci Ukázkový kód pro operace s řetězci KAPITOLA 5 Práce s textovými řetězci V této kapitole najdete: Deklarace textových řetězců Operace s řetězci Ukázkový kód pro operace s řetězci 94 Kapitola 5: Práce s textovými řetězci Slova jsou textovými

Více

Tvorba klientských skriptů v jazyce Java Script

Tvorba klientských skriptů v jazyce Java Script Tvorba klientských skriptů v jazyce Java Script Publikace vznikla v rámci projektu OPVK Vyškolený pedagog záruka kvalitní výuky na Střední odborné škole veterinární, mechanizační a zahradnické a Jazykové

Více

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C

IMPLEMENTACE OPERAČNÍHO SYSTÉMU LINUX DO VÝUKY INFORMAČNÍCH TECHNOLOGIÍ JAZYK C Identifikační údaje školy Číslo projektu Název projektu Číslo a název šablony Autor Tematická oblast Číslo a název materiálu Anotace Vyšší odborná škola a Střední škola, Varnsdorf, příspěvková organizace

Více

Syntaxe vyjímek. #include #include using namespace std; // Trida vyjimek class Vyjimka { private:

Syntaxe vyjímek. #include <iostream> #include <string> using namespace std; // Trida vyjimek class Vyjimka { private: Vyjímky. Pod pojmem výjimka se rozumí nějaká výjimečná situace, která nastane v dané funkci. V jazyce C i C++ se často používá návratových hodnot funkcí, které vracejí úspěšnost provádění nějaké operace

Více

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze');

MySQLi (objektově) Příklad vytvoření instance třídy včetně parametrů pro připojení: $mysqli = new mysqli('localhost', 'login', 'heslo', 'databaze'); MySQLi (objektově) Rozšíření PHP MySQL - základní rozšíření umožňující práci s MySQL. Doporučuje se ho používat pouze do verze MySQL 4.1.3. I když je funkční i u novějších verzí, neumožňuje využití nových

Více

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz

Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz Ukazka knihy z internetoveho knihkupectvi www.kosmas.cz O autorovi Rudolf Pecinovský patří ke špičkovým odborníkům na výuku programování. Publikoval již 39 učebnic, které byly přeloženy do pěti jazyků,

Více

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku Znaky - standardní typ char var Z, W: char; - znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku - v TP (často i jinde) se používá kódová

Více

Ošetřování chyb v programech

Ošetřování chyb v programech Ošetřování chyb v programech Úvod chyba v programu = normální záležitost typy chyb: 1) programátorská chyba při návrhu každých 10 000 řádek 1 chyba lze jen omezeně ošetřit (před pádem aplikace nabídnout

Více

PHP tutoriál (základy PHP snadno a rychle)

PHP tutoriál (základy PHP snadno a rychle) PHP tutoriál (základy PHP snadno a rychle) Druhá, vylepšená offline verze. Připravil Štěpán Mátl, http://khamos.wz.cz Chceš se naučit základy PHP? V tom případě si prostuduj tento rychlý průvodce. Nejdříve

Více

Programy na PODMÍNĚNÝ příkaz IF a CASE

Programy na PODMÍNĚNÝ příkaz IF a CASE Vstupy a výstupy budou vždy upraveny tak, aby bylo zřejmé, co zadáváme a co se zobrazuje. Není-li určeno, zadáváme přirozená čísla. Je-li to možné, používej generátor náhodných čísel vysvětli, co a jak

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT Číslo a název šablony Číslo didaktického materiálu Druh didaktického materiálu Autor Jazyk Téma sady didaktických materiálů Téma didaktického materiálu Vyučovací předmět Cílová skupina (ročník) Úroveň

Více

2 Postup při programování, úvod do programovacího jazyka Java

2 Postup při programování, úvod do programovacího jazyka Java 2 Postup při programování, úvod do programovacího jazyka Java Studijní cíl V tomto bloku bude věnována pozornost správnému postupu při programování, budou detailně vysvětleny jednotlivé etapy programování

Více

Jakub Čermák http://www.jcermak.cz. Microsoft Student Partner

Jakub Čermák <jakub@jcermak.cz> http://www.jcermak.cz. Microsoft Student Partner Jakub Čermák http://www.jcermak.cz Microsoft Student Partner Úvod, příklady použití, trocha teorie Struktura aplikace Typy obecně, primitivní typy, speciální typy Podmínky, cykly, namespaces

Více