NULOVATELNÉ TYPY POD LUPOU
|
|
- Renáta Holubová
- před 8 lety
- Počet zobrazení:
Transkript
1 NULOVATELNÉ TYPY POD LUPOU Aleš Keprt Katedra informatiky, FEI, VŠB Technická Univerzita Ostrava 17.listopadu 15, Ostrava Poruba Abstrakt Nová verze jazyka C# od Microsoftu obsahuje mimo jiné nový programovací prvek zvaný nulovatelné typy. Toto rozšíření umožňuje přiřazovat null do proměnných všech hodnotových typů a je vhodné zejména pro pohodlnou práci s SQL a relačními databázemi. Implementace nulovatelných typů v jazyce C# však skrývá řadu na první pohled ne zcela zřejmých vlastností. Jedná se zejména princip vazby na běžné hodnotové typy formou lifted conversions a zpracování operátorů formou lifted operators. Tyto neobvyklé konstrukce vycházejí ze snahy obejít některá nepříjemná omezení ohledně využívání operátorů v jazyce C#. Příspěvek je zaměřen na podrobný popis této problematiky. 1 Úvod Hodnotové typy (nullable types) jsou jednou z novinek, která se v jazyce C# objevuje v nové verzi 2.0. Pravděpodobně již konečná specifikace tohoto jazyka byla představena v květnu roku 2004 [1], zatímco nové Visual Studio 2005 je v době psaní tohoto textu teprve těsně před zveřejněním verze beta 2, která by se měla objevit koncem března. Tento příspěvek představuje nulovatelné typy ve dvou fázích. V první části jsou srozumitelně představeny běžné konstrukce, s vynecháním detailů, které by mohly ztížit pochopení. Podobné informace je možné najít také v MSDN verze 2005 [9], článku [3] nebo seriálu [2]. Druhá část příspěvku odkrývá další detaily nulovatelných typů, které v běžné literatuře nenajdeme. V závěru jsou ještě zmíněny některé myšlenky a teze, které jsou důsledkem diskuzí odborné veřejnosti nad nulovatelnými typy. 2 Nulovatelné typy 2.1 Úvod Jak známo, hodnotové datové typy (všechny typy struct, dále int, char, double, apod.) nepoužívají reference, nelze jim proto přiřadit null. Většinou to nemá žádný negativní dopad, někdy by však taková nepřiřazená reference mohla být využita k nějakým speciálním účelům. Například při práci s relačními databázemi se použití null přímo nabízí pro reprezentaci neuvedených (tj. prázdných) hodnot v datech načtených z databáze do C#. Chceme-li však mít takovou neuvedenou hodnotu například u datového typu int, pak nezbývá, než jako neuvedenou hodnotu použít některé z čísel, které nepotřebujeme. Může to být třeba 1, ale v případě, že daná proměnná může nabývat všech hodnot z domény příslušného datového typu, nastává obtížný problém. Používání vybraných čísel místo null navíc komplikuje kód a často vede k celé řadě (lidských) chyb. Nyní máme v jazyce C# k dispozici tzv. nulovatelné typy. Jsou to hodnotové typy, kterým ovšem můžeme přiřadit i hodnotu null. Každý nulovatelný typ je postaven nad nějakým
2 (libovolným) již existujícím hodnotovým typem (označujeme jej potom jako typ bázový nemá to však nic společného s dědičností) a přidává do jeho domény null. Nulovatelnou proměnnou (tj. proměnnou nulovatelného typu) deklarujeme uvedením bázového typu a přidáme otazník. Jak ukazuje následující příklad, i základní použití nulovatelných proměnných je zcela intuitivní. int? x; Console.WriteLine(x==null? "null" : x.value.tostring()); if(x.hasvalue) Console.WriteLine("x má hodnotu"); Nulovatelné typy mají tyto vlastnosti: Jsou vhodné pro proměnné, které mohou obsahovat nedefinovanou hodnotu. Syntaxe T? pouze zastupuje delší zápis System.Nullable<T>. Zápis s otazníkem je tedy ekvivalentní zápisu přes generický typ, vysvětlení generických typů je možno nalézt v [2], [3], [9]. Vlastnost HasValue slouží ke zjištění, zda má daná proměnná hodnotu (pak vrací true), nebo je null (pak vrací false). Vlastnost Value zpřístupňuje hodnotu typu T. Přiřazení hodnoty default způsobí nastavení HasValue = false. (Slovo default je jednou z dalších novinek jazyka C# vysvětlení viz [2], [3], [9].) 2.2 Přetypování Přetypování z nulovatelného T? na jeho bázový typ (T) je možný explicitním přetypováním, převod z bázového typu je dokonce implicitní. int a; int? x; x = a; //implicitní přetypování int int? a = (int)x; //explicitní přetypování int? int //vyvolá výjimku, když x bude null 2.3 Operátory Nulovatelné typy mají všechny operátory stejné jako bázový typ. Výsledkem operací, do kterých vstupuje null hodnota, je vždy null hodnota. Chování operátorů je tedy zcela intuitivní, uvedeme jen několik příkladů. double? a,b; long? c; a = b * 2.0; c++; if(a > c) {...} Pro pohodlnou práci můžeme použít také nově zavedený operátor?? (dva otazníky), který umožňuje definovat výchozí hodnotu při přetypování na bázový typ.
3 int? x; int y = x?? -1; V této ukázce do proměnné y přiřazujeme hodnotu proměnné x. Pokud by x bylo null, pak je do y přiřazena hodnota 1. Operátor?? můžeme použít i pro přiřazování mezi nulovatelnými proměnnými. int? z = x?? -1; Přestože z je nulovatelná proměnná, tímto příkazem do ní vložíme vždy nenulovou (not null) hodnotu. (Operátor?? totiž převede hodnotu na bázový typ int, při následném přiřazení do int? je pak použit implicitní konverzní operátor.) Když naopak chceme do nulovatelné proměnné vložit null, jednoduše jí přiřadíme literál null. z = null; 3 Další detaily, aneb nulovatelné typy pod lupou 3.1 Přístup k vlastnostem Value a HasValue Vlastnosti (properties) Value a HasValue jsou jen ke čtení, nelze jim tedy přiřadit hodnotu. Chceme-li změnit hodnotu Value, použijeme přiřazení přímo do proměnné. int? a; a.value = 20; //chyba Value je jen ke čtení a = 20; //toto je správně Chceme-li přiřadit hodnotu false do HasValue, uděláme to přiřazením null do proměnné. a.hasvalue = false; //chyba HasValue je jen ke čtení a = null; //toto je správně Hodnotu true do HasValue samozřejmě přiřadíme jedině tak, že přímo přiřadíme nějakou konkrétní hodnotu do proměnné (tj. jinou než null). 3.1 Typové konverze Princip generického programování zavedený v jazyce C# není dostatečně flexibilní, aby uměl popsat obecné typové konverze nulovatelných typů; tyto konverze tedy mají v jazyce zvláštní postavení. Obecně platí pravidlo, že nulovatelný typ poskytuje všechny typové konverze, které má jeho bázový typ. Navíc je možno kombinovat při převodech libovolné bázové i nulovatelné typy, pokud existují příslušné konverzní operátory pro příslušné bázové typy. Platnost tohoto pravidla je zřejmá již z sekce 2.2, při konverzích se totiž využívají výše zmíněné implicitní a explicitní konverze mezi nulovatelným typem a jeho bázovým typem. V následujících odstavcích si popíšeme všechny možné situace. (Poznámka: Těmto konverzím se v originální anglické specifikaci jazyka [1] říká lifted conversions, čili česky vyzvednuté nebo pozvednuté konverze.)
4 3.1.1 Převod z hodnotového (nenulovatelného) na nulovatelný typ Převod z hodnotového (nenulovatelného) na nulovatelný typ probíhá s využitím implicitní konverze z bázového typu na jeho nulovatelný typ. Tato konverze je tedy také implicitní, pokud je konverze mezi bázovými typy implicitní, jinak je explicitní. int? a = 'A'; //implicitní konverze char int? char? b = (char?)65; //explicitní konverze int char? char? b = (char)65; //explicitní konverze int char //potom implicitní char char? Převod z nulovatelného typu na nulovatelný typ Převod z nulovatelného typu na (jiný) nulovatelný typ probíhá tak, že hodnota null je zachována a pro ostatní hodnoty je použit příslušný konverzní operátor bázového typu. Tato konverze je tedy implicitní, pokud je konverze mezi bázovými typy implicitní, jinak je explicitní. int? a = (char?)'a'; //implicitní konverze char? int? char? b = (char?)(int?)65; //explicitní konverze int? char? Převod z nulovatelného typu na hodnotový typ Převod z nulovatelného typu na (jiný než jeho vlastní bázový) hodnotový typ vyvolá výjimku v případě, že výchozí hodnota je null. V ostatních případech je použita explicitní konverze na bázový typ a potom příslušný konverzní operátor bázového typu. Tato konverze je tedy vždy explicitní (tj. je třeba toto přetypování vždy explicitně uvést, není nikdy provedeno automaticky). Je-li konverzní operátor bázového typu explicitní, dochází tak de facto ke dvojí explicitní konverzi. Překladač však tuto konverzi považuje za přímou explicitní konverzi první řádek z následujícího příkladu tak ukazuje zbytečně složitou dvojí konverzi. char a = (char)(int)(int?)65; //explicitní konverze int? int //potom druhá explicitní int char char a = (char)(int?)65; //přímá explicitní konverze int? char 3.2 Jak fungují operátory Stejně jako přetypování, i operátory jsou nulovatelným typům zavedeny pomocí explicitní a implicitní konverze mezi nulovatelným a jeho bázovým typem (viz sekci 2.2). (Specifikace jazyka [1] pak hovoří o lifted operators, čili česky o vyzvednutých nebo pozvednutých operátorech.) Unární operace s nulovatelným typem Definuje-li bázový typ nějaký unární operátor, pak nulovatelný typ nad ním má tento operátor také. Je-li vstupní hodnotou null, pak výsledkem je také null. V opačném případě je hodnota konvertována na bázový typ, na něm je provedena operace a výsledek je konvertován zpět na nulovatelný typ. Výsledkem je pak tedy nenulová hodnota nulovatelného typu.
5 (Paradoxně se zde tedy objevuje implicitní použití explicitní konverze na bázový typ je to však bezpečné, neboť k tomu dojde jen při nenulové hodnotě vstupu.) int? a = 20; a++; //pozvednutý unární operátor Binární operace s nulovatelným typem Binární operace mají dvě vstupní hodnoty, může zde tedy nastat více situací. Je-li alespoň jedna ze vstupních hodnot null, potom výsledkem operace je také null. Není-li ani jedna ze vstupních hodnot null, pak jsou obě přetypovány na své bázové typy a je použit příslušný operátor bázového typu. Výsledek je pak převeden na příslušný nulovatelný typ. (Opět je zde tedy implicitní použití explicitní typové konverze a opět je bezpečné.) Test na null Jak již bylo řečeno, test na null provádíme pomocí vlastnosti HasValue. Můžeme k tomu však použít i speciální tvar operátorů == a!=, jak ukazuje následující příklad. int? a; if(a.hasvalue==false) { /* je to null */ } if(a==null) { /* je to null */ } Obě tyto konstrukce jsou ekvivalentní, ta druhá je zřejmě více intuitivní. 3.3 Trojhodnotový typ bool? Specifické postavení mezi nulovatelnými typy má bool?. Jak ukazuje tabulka 1, operátory logického součtu a logického součinu & dávají u tohoto typu v některých případech nenulové výsledky, i když jeden z operandů je null. Toto chování odpovídá klasické (matematické) trojstavové logice, potažmo chování trojstavové logiky v jazyce SQL a je specifické právě pro typ bool? u všech ostatních nulovatelných typů platí, že výsledkem binárních operací, kde jeden (nebo i oba) operandy jsou null, je vždy hodnota null. Tabulka 1. Tabulka pravdivostních hodnot typu bool? pro operátory & a. & (and) null false true (or) null false true null null false null null null null true false false false false false null false true true null false true true true true true 3.4 Nulovatelné typy vyšších řádů Přímo z definice nulovatelných typů (viz 2.1) je zřejmé, že každý nulovatelný typ je sám také typem hodnotovým a tudíž může být použit jako bázový typ pro další nulovatelný typ. V praxi to znamená, že C# umožňuje tzv. zřetězení otazníků, jak ukazuje další příklad. int?? a = null;
6 Tato konstrukce tedy vytvoří nulovatelnou proměnnou typu int??, což je nulovatelný typ nad bázovým typem int? (a int? je nulovatelný typ nad int). Tato konstrukce nápadně připomíná ukazatele vyšších řádů a principiálně také funguje obdobně. 1 unsafe { int** p = null; } Jeden zásadní rozdíl oproti ukazatelům vyšších řádů tu však je a týká se právě přiřazování null použitém ve výše uvedených příkladech. U ukazatelů se totiž rozlišuje ukazatel roven null a ukazatel ukazující na proměnnou rovnou null. U nulovatelných typů se však nulovatelná proměnná s hodnotou null a nulovatelná proměnná s hodnotou nulovatelného typu, jejíž hodnota je null nerozlišuje. Tento rozdíl je možno vyzkoušet například takto. //toto vypíše true unsafe { int* p1 = null; int** p2 = &p1; System.Console.WriteLine("p2 má hodnotu? {0}", p2!=null); } //toto vypíše false int? v1 = null; int?? v2 = v1; System.Console.WriteLine("v2 má hodnotu? {0}", v2.hasvalue); Přestože na předposledním řádku přiřazujeme nějakou hodnotu typu int?, což jistě není totéž jako přiřazovat literál null, proměnná v2 se nastaví na hodnotu null. 4 Další myšlenky Nad nulovatelnými typy se strhla bouřlivá diskuze na internetu. Na jedné straně totiž zjednodušují kód, zejména práci s relačními databázemi, na druhé straně však přinášejí několik sporných bodů: 1. Jednoduchá deklarace ve tvaru int? se každému nemusí nelíbí. Především kvůli tomu, že jde jen o syntaktický cukr, se programátoři rozdělili na dva proti sobě stojící tábory. Zástupci prvního tábora preferují jazyk C a odvozené jazyky pro jejich stručný zápis mnoha konstrukcí (viz operátor?:), druhý tábor to naopak považuje za zbytečné zkracování deklarací a prvek znepřehledňující kód. 2. Nulovatelné typy můžeme chápat také jako předkrok k zavedení podpory proměnných ve formě jednoduchých regulárních výrazů. Výraz int? totiž můžeme chápat jako žádný nebo jeden int. Potom int! by odpovídalo int a znamenalo by právě jeden int. Dále int+ by znamenalo jeden nebo více intů a int* by znamenalo libovolný počet intů. Tyto konstrukce by de facto deklarovaly kolekce a umožnily by pohodlnější práci s daty. Na druhé straně by však přinesly (další) zesložitění jazyka a je možné, že někteří programátoři by je ani nemuseli pochopit. Navíc pak zejména konstrukce int* je pro svou zaměnitelnost se zcela odlišným prvkem jazyka 1 Poznámka: Jazyk C# podporuje ukazatele stejně jako C++, pouze musíme části kódu, kde ukazatele používáme, uzavřít do bloku unsafe.
7 (s ukazateli) mnoha lidem vyloženě trnem v oku. Podrobněji je tato problematika rozebrána v dokumentu z Microsoft Research [4]. 3. Zatímco zde byl vyřešen problém nulovatelných typů, ticho zůstalo v otázce nenulovatelných typů, jak je známe z C++. Jazyk C# totiž dodnes neobsahuje konstrukci, jak zapsat kód ekvivalentní referencím jazyka C++, tedy referencím, do kterých nelze přiřadit null. Zatímco v C++ to lze obejít přetypováním přes ukazatel, v C# by to díky silnější typové kontrole mohlo fungovat ještě lépe. Jak ukazují některé studie, přidáním tohoto prvku by se mohla zvýšit bezpečnost i jednoduchost kódu, neboť na většině míst opravdu null hodnoty (místo skutečných objektů) vůbec nechceme. Pro podrobnější diskuzi viz [5]. 5 Závěr Nulovatelné typy jsou novým prvkem jazyka C#. Ačkoliv jejich použití se v praxi možná omezí jen na práci s relačními databázemi, principiálně jde o velmi zajímavý prvek, který nabízí jistý zobecněný pohled na chápání hodnotových datových typů. Při hlubším zkoumání nulovatelných typů navíc vidíme i prostor k debatám nad dalšími možnými zobecněními, což můžeme pro výzkum v oblasti programovacích jazyků považovat za velmi přínosné. Další informace je možno hledat ve všech publikacích zmíněných v textu a také na stránkách MSDN [6], MSDN Lab. [7] nebo MSDN Magazine [8]. Literatura 1. Hejlsberg, A., Golde, P. a Katzenberger, S. C# Version 2.0 Specification. Microsoft Keprt, A. Horké novinky v jazyce C# 2.0 (1.část). V časopise ComputerWorld. Ročník 15, číslo 42/2004. ISSN Keprt, A. Nové prvky jazyka Visual C# 2.0 (2005). Ve sborníku konference Objekty Ed. David Ježek, Vojtech Merunka, VŠB Technická Univerzita, Ostrava, 2004, pp , ISBN X. 4. Meijer, E. a Schulte, W. Unifying Tables, Objects and Documents. Microsoft Research Najmabadi, C. Who Wants Non-Nullable Types? In MSDN Blogs MSDN centrum nápovědy a dokumentace 7. MSDN Lab. laboratoř pro beta verze produktů apod MSDN Magazine časopis serveru MSDN 9. Visual Studio 2005 Beta Documentation
Algoritmizace a programování
Algoritmizace a programování Výrazy Operátory Výrazy Verze pro akademický rok 2012/2013 1 Operace, operátory Unární jeden operand, operátor se zapisuje ve většině případů před operand, v některých případech
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15
Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15 KAPITOLA 1 Úvod do programo vání v jazyce C++ 17 Základní pojmy 17 Proměnné a konstanty 18 Typy příkazů 18 IDE integrované vývojové
5 Přehled operátorů, příkazy, přetypování
5 Přehled operátorů, příkazy, přetypování Studijní cíl Tento studijní blok má za cíl pokračovat v základních prvcích jazyka Java. Konkrétně budou uvedeny detaily týkající se operátorů. Doba nutná k nastudování
PŘETĚŽOVÁNÍ OPERÁTORŮ
PŘETĚŽOVÁNÍ OPERÁTORŮ Jazyk C# podobně jako jazyk C++ umožňuje přetěžovat operátory, tj. rozšířit definice některých standardních operátorů na uživatelem definované typy (třídy a struktury). Stejně jako
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - deklarace pomocí funkčního
Paměť počítače. alg2 1
Paměť počítače Výpočetní proces je posloupnost akcí nad daty uloženými v paměti počítače Data jsou v paměti reprezentována posloupnostmi bitů (bit = 0 nebo 1) Připomeňme: paměť je tvořena řadou 8-mi bitových
Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní
Základy jazyka C# 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 přednášky Architektura.NET Historie Vlastnosti
Programování v C++, 2. cvičení
Programování v C++, 2. cvičení 1 1 Fakulta jaderná a fyzikálně inženýrská České vysoké učení technické v Praze Zimní semestr 2018/2019 Přehled 1 Operátory new a delete 2 3 Operátory new a delete minule
Úvod do programovacích jazyků (Java)
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2007/2008 c 2006 2008 Michal Krátký Úvod do programovacích
4. blok část A Logické operátory
4. blok část A Logické operátory Studijní cíl Tento blok je věnován představení logických operátorů AND, OR, NOT v jazyce SQL a práce s nimi. Doba nutná k nastudování 1-2 hodiny Průvodce studiem Při studiu
Zápis programu v jazyce C#
Zápis programu v jazyce C# Základní syntaktická pravidla C# = case sensitive jazyk rozlišuje velikost písmen Tzv. bílé znaky (Enter, mezera, tab ) ve ZK překladač ignoruje každý příkaz končí ; oddělovač
Programovací jazyk Pascal
Programovací jazyk Pascal Syntaktická pravidla (syntaxe jazyka) přesná pravidla pro zápis příkazů Sémantická pravidla (sémantika jazyka) pravidla, která každému příkazu přiřadí přesný význam Všechny konstrukce
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
DATOVÉ TYPY POKRAČOVÁNÍ
DATOVÉ TYPY POKRAČOVÁNÍ Hodnotové typy pokračování Znaky Pro práci se znaky slouží typ char. Jedná se o dvoubajtový typ a uchovává znaky v kódování UNICODE. Je tedy ekvivalentem typu wchar_t v jazyce C++.
Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo
Operátory, výrazy Tomáš Pitner, upravil Marek Šabo Operátor "Znaménko operace", pokyn pro vykonání operace při vyhodnocení výrazu. V Javě mají operátory napevno daný význam, nelze je přetěžovat jako v
Logické operace. Datový typ bool. Relační operátory. Logické operátory. IAJCE Přednáška č. 3. může nabýt hodnot: o true o false
Logické operace Datový typ bool může nabýt hodnot: o true o false Relační operátory pravda, 1, nepravda, 0, hodnoty všech primitivních datových typů (int, double ) jsou uspořádané lze je porovnávat binární
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Základy programování (IZP)
Základy programování (IZP) Šesté počítačové cvičení Brno University of Technology, Faculty of Information Technology Božetěchova 1/2, 612 66 Brno - Královo Pole Petr Veigend, iveigend@fit.vutbr.cz 6. týden
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++
Pokročilé programování v jazyce C pro chemiky (C3220) Pokročilá témata jazyka C++ Prostory jmen U programů mohou někdy nastat kolize mezi jmény (tříd, funkcí, globálních proměnných atd.) pokud v různých
Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy
Úvod do programování Michal Krátký 1,Jiří Dvorský 1 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programování, 2004/2005 Procesor Procesorem je objekt, který vykonává algoritmem popisovanou
Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b
Výrazy a operátory i = 2 i = 2; to je výraz to je příkaz 4. Operátory Unární - unární a unární + Např.: +5-5 -8.345 -a +b - unární ++ - inkrement - zvýší hodnotu proměnné o 1 - unární -- - dekrement -
Algoritmizace a programování
Algoritmizace a programování Řídicí struktury jazyka Java Struktura programu Příkazy jazyka Blok příkazů Logické příkazy Ternární logický operátor Verze pro akademický rok 2012/2013 1 Struktura programu
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ů
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 dalších letech se pak začaly objevovat první normy pro jazyk C++ (ISO/IEC 14882:1998; ISO/IEC 9899:1999; ISO/IEC 14882:2003; ISO/IEC 14882:2011).
Jazyk C++ 1 Blok 1 Úvod do programovacího jazyka C++ Studijní cíl První blok kurzu je věnován úvodu do problematiky programovacího jazyka C++. V bloku budou rozebrány historické souvislosti programovacích
Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické
Jak v Javě primitivní datové typy a jejich reprezentace BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické Obsah Celočíselný datový typ Reálný datový typ Logický datový typ, typ Boolean
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
8 Třídy, objekty, metody, předávání argumentů metod
8 Třídy, objekty, metody, předávání argumentů metod 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 třídám a objektům, instančním
DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA
DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA ze sady: 03 tematický okruh sady: Tvorba skript a maker ze šablony: 10 Algoritmizace a programování určeno pro: 4. ročník vzdělávací obor: vzdělávací
Výrazy, operace, příkazy
Výrazy, operace, příkazy Karel Richta a kol. katedra počítačů FEL ČVUT v Praze Přednášky byly připraveny s pomocí materiálů, které vyrobili Ladislav Vágner, Pavel Strnad Karel Richta, Martin Hořeňovský,
PB161 Programování v jazyce C++ Přednáška 4
PB161 Programování v jazyce C++ Přednáška 4 Přetěžování funkcí Konstruktory a destruktory Nikola Beneš 9. října 2017 PB161 přednáška 4: přetěžování funkcí, konstruktory, destruktory 9. října 2017 1 / 20
Jazyk C++, některá rozšíření oproti C
Karel Müller, Josef Vogel (ČVUT FIT) Jazyk C++, některá rozšíření oproti C BI-PA2, 2011, Přednáška 1 1/22 Jazyk C++, některá rozšíření oproti C Ing. Josef Vogel, CSc Katedra softwarového inženýrství Katedra
Pointery II. Jan Hnilica Počítačové modelování 17
Pointery II 1 Pointery a pole Dosavadní způsob práce s poli zahrnoval: definici pole jakožto kolekce proměnných (prvků) jednoho typu, umístěných v paměti za sebou int pole[10]; práci s jednotlivými prvky
Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií
1 Fakulta elektrotechniky a informatiky Katedra softwarových technologií 12. října 2009 Organizace výuky Přednášky Teoretické základy dle normy jazyka C Cvičení Praktické úlohy odpřednášené látky Prostřední
Programovací jazyk C++ Hodina 1
Programovací jazyk C++ Hodina 1 Používané překladače Bloodshed Dev C++ http://www.bloodshed.net/devcpp.html CodeBlocks http://www.codeblocks.org pokud nemáte již nainstalovaný překladač, stáhněte si instalátor
MAXScript výukový kurz
MAXScript výukový kurz Díl čtvrtý jazyk MAXScript, část I. Jan Melichar, březen 2008 Jan Melichar (aka JME) strana 1 OBSAH ÚVOD... 4 ZÁKLADNÍ PŘÍKAZY... 5 OPERÁTORY... 6 PROMĚNNÉ... 6 POLE... 7 ZÁVĚREM...
1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5
Obsah Obsah 1 Programovací jazyk Pascal 1 1.1 Struktura programu v Pascalu.................... 1 2 Proměnné 2 2.1 Vstup a výstup............................ 3 3 Operátory a některé matematické funkce 5
Programování v jazyce C a C++
Programování v jazyce C a C++ Příklad na tvorbu třídy Richter 1 4. prosince 2017 1 Ing. Richter Miloslav, Ph.D., UAMT FEKT VUT Brno Dvourozměrné pole pomocí tříd Zadání Navrhněte a napište třídu pro realizace
Jazyk PL/SQL Úvod, blok
Jazyk PL/SQL Úvod, blok 1 Bc. Tomáš Romanovský Procedural Language for Structured Query Language Součást systému Oracle, rozšíření SQL o procedurální rysy Prostředky pro vytváření a spouštění programových
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký 1 Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Booleovská algebra. Booleovské binární a unární funkce. Základní zákony.
Booleovská algebra. Booleovské binární a unární funkce. Základní zákony. Tomáš Bayer bayertom@natur.cuni.cz Katedra aplikované geoinformatiky a kartografie, Přírodovědecká fakulta UK. Tomáš Bayer bayertom@natur.cuni.cz
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ
MATURITNÍ OTÁZKY ELEKTROTECHNIKA - POČÍTAČOVÉ SYSTÉMY 2003/2004 PROGRAMOVÉ VYBAVENÍ POČÍTAČŮ 1) PROGRAM, ZDROJOVÝ KÓD, PŘEKLAD PROGRAMU 3 2) HISTORIE TVORBY PROGRAMŮ 3 3) SYNTAXE A SÉMANTIKA 3 4) SPECIFIKACE
Úvod do programování. Lekce 1
Úvod do programování Lekce 1 Základní pojmy vytvoření spustitelného kódu editor - psaní zdrojových souborů preprocesor - zpracování zdrojových souborů (vypuštění komentářů atd.) kompilátor (compiler) -
Úvod do databázových systémů
Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Katedra informatiky Database Research Group Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz
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
Třídy a struktury v C++
katedra informatiky FEI VŠB-TU Ostrava 7. prosince 2015 Odvozené a strukturované typy dat v C základní datové typy součást normy jazyka, preprocesor použití netypových maker, raději voĺıme konstanty d
Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12
Jazyk SQL 1 Michal Valenta Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12 https://edux.fit.cvut.cz/courses/bi-dbs/ Michal Valenta (FIT
Úvod do databázových systémů
Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 3 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování 4 fáze vytváření
1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:
1. lekce 1. Minimální program do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme: #include #include int main() { printf("hello world!\n"); return 0; 2.
02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox
02. HODINA Obsah: 1. Typy souborů a objektů 2. Ovládací prvky Label a TextBox 3. Základní příkazy a vlastnosti ovládacích prvků 4. Práce s objekty (ovládací prvky a jejich vlastnosti) 2.1 Typy souborů
Algoritmizace a programování
Algoritmizace a programování Typy Základní (primitivní) datové typy Deklarace Verze pro akademický rok 2012/2013 1 Typy v jazyce Java Základní datové typy (primitivní datové typy) Celočíselné byte, short,
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,
Algoritmizace prostorových úloh
INOVACE BAKALÁŘSKÝCH A MAGISTERSKÝCH STUDIJNÍCH OBORŮ NA HORNICKO-GEOLOGICKÉ FAKULTĚ VYSOKÉ ŠKOLY BÁŇSKÉ - TECHNICKÉ UNIVERZITY OSTRAVA Algoritmizace prostorových úloh Datové struktury Daniela Szturcová
O datových typech a jejich kontrole
.. O datových typech a jejich kontrole Programovací techniky doc. Ing. Jiří Rybička, Dr. ústav informatiky PEF MENDELU v Brně rybicka@mendelu.cz Typová kontrola Programovací techniky O datových typech
Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek
5 Vysoká škola báňská Technická univerzita Ostrava Fakulta strojní, Katedra automatizační techniky a řízení 2008/2009 Radim Farana 1 Obsah Jazyk SQL, Spojení tabulek, agregační dotazy, jednoduché a složené
Programování v jazyce JavaScript
Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Syntaxe 1. část BI-JSC Evropský sociální fond
Generické programování
Generické programování Od C# verze 2.0 = vytváření kódu s obecným datovým typem Příklad generická metoda, zamění dva parametry: static void Swap(ref T p1, ref T p2) T temp; temp = p1; p1 = p2; p2 =
PB161 Programování v jazyce C++ Přednáška 9
PB161 Programování v jazyce C++ Přednáška 9 Právo friend Přetěžování operátorů Nikola Beneš 16. listopadu 2015 PB161 přednáška 9: friend, přetěžování operátorů 16. listopadu 2015 1 / 30 Reklama PB173 Tematicky
ZPRO v "C" Ing. Vít Hanousek. verze 0.3
verze 0.3 Hello World Nejjednoduší program ukazující vypsání textu. #include using namespace std; int main(void) { cout
PROGRAMOVÁNÍ V JAZYCE C V PŘÍKLADECH 11 Dynamické datové struktury 11.1 Spojové struktury... 11-1 11.2 Příklad PROG_11-01... 11-2 11.
David Matoušek Programování v jazyce C v pøíkladech Praha 2011 David Matoušek Programování v jazyce C v pøíkladech Bez pøedchozího písemného svolení nakladatelství nesmí být kterákoli èást kopírována nebo
Strukturu lze funkci předat: (pole[i])+j. switch(výraz) velikost ukazatele
Strukturu lze funkci předat: hodnotou i pomocí ukazatele pouze pomocí ukazatele (reference na strukturu) pouze hodnotou (kopie struktury) (pole[i])+j adresa prvku na souřadnicích i, j adresa i-tého řádku
6 Příkazy řízení toku
6 Příkazy řízení toku 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 pro řízení toku programu. Pro všechny tyto základní
- 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á
Databázové systémy Cvičení 5.2
Databázové systémy Cvičení 5.2 SQL jako jazyk pro definici dat Detaily zápisu integritních omezení tabulek Integritní omezení tabulek kromě integritních omezení sloupců lze zadat integritní omezení jako
Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09
Střední průmyslová škola a Vyšší odborná škola technická Brno, Sokolská 1 Šablona: Název: Téma: Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh Operátory Autor:
9. přednáška - třídy, objekty
třída String a její použití kolekce, typované kolekce 9. přednáška - třídy, objekty Algoritmizace (Y36ALG), Šumperk - 9. přednáška 1 Třída String Objekty knihovní třídy String jsou řetězy znaků Od ostatních
6. blok část C Množinové operátory
6. blok část C Množinové operátory Studijní cíl Tento blok je věnován problematice množinových operátorů a práce s množinovými operátory v jazyce SQL. Čtenáři se seznámí s operátory, UNION, a INTERSECT.
Programování v jazyce JavaScript
Programování v jazyce JavaScript Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Pavel Štěpán, 2011 Operátory a příkazy BI-JSC Evropský sociální fond
Databáze I. Přednáška 4
Databáze I Přednáška 4 Definice dat v SQL Definice tabulek CREATE TABLE jméno_tab (jm_atributu typ [integr. omez.], jm_atributu typ [integr. omez.], ); integritní omezení lze dodefinovat později Definice
6. Příkazy a řídící struktury v Javě
6. Příkazy a řídící struktury v Javě Příkazy v Javě Příkazy v Javě Řídicí příkazy (větvení, cykly) Přiřazovací příkaz = Řízení toku programu (větvení, cykly) Volání metody Návrat z metody - příkaz return
Registrační číslo projektu: CZ.1.07/1.5.00/34.0553 Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost
Registrační číslo projektu: CZ.1.07/1.5.00/34.0553 Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost Projekt je realizován v rámci Operačního programu Vzdělávání pro konkurence
Sada 1 - PHP. 03. Proměnné, konstanty
S třední škola stavební Jihlava Sada 1 - PHP 03. Proměnné, konstanty Digitální učební materiál projektu: SŠS Jihlava šablony registrační číslo projektu:cz.1.09/1.5.00/34.0284 Šablona: III/2 - inovace a
typová konverze typová inference
Seminář Java Programování v Javě II Radek Kočí Fakulta informačních technologií VUT Únor 2008 Radek Kočí Seminář Java Programování v Javě (2) 1/ 36 Téma přednášky Rozhraní: použití, dědičnost Hierarchie
Racionální čísla, operátory, výrazy, knihovní funkce
Příprava studijního programu Informatika je podporována projektem financovaným z Evropského sociálního fondu a rozpočtu hlavního města Prahy. Praha & EU: Investujeme do vaší budoucnosti Racionální čísla,
Ukazatele a pole. Chceme-li vyplnit celé pole nulami, použijeme prázdný inicializátor: 207 Čárka na konci seznamu inicializátorů
Ukazatele a pole 204 Deklarace jednorozměrného pole s inicializací Chceme-li pole v deklaraci inicializovat, zapíšeme seznam inicializátorů jednotlivých prvků do složených závorek: #define N 5 int A[N]
for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }
5. Operátor čárka, - slouží k jistému určení pořadí vykonání dvou příkazů - oddělím-li čárkou dva příkazy, je jisté, že ten první bude vykonán dříve než příkaz druhý. Např.: i = 5; j = 8; - po překladu
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Ý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
Databázové systémy. * relační kalkuly. Tomáš Skopal. - relační model
Databázové systémy Tomáš Skopal - relační model * relační kalkuly Osnova přednášky relační kalkuly doménový n-ticový Relační kalkuly využití aparátu predikátové logiky 1. řádu pro dotazování rozšíření
Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007
Úvod do programovacích jazyků (Java) Michal Krátký Katedra informatiky VŠB Technická univerzita Ostrava Úvod do programovacích jazyků (Java), 2006/2007 c 2006 Michal Krátký Úvod do programovacích jazyků
Datové typy v Javě. Tomáš Pitner, upravil Marek Šabo
Datové typy v Javě Tomáš Pitner, upravil Marek Šabo Úvod k datovým typům v Javě Existují dvě základní kategorie datových typů: primitivní a objektové Primitivní v proměnné je uložena přímo hodnota např.
Úvod do databázových systémů
Vysoká škola báňská Technická univerzita Ostrava Fakulta elektrotechniky a informatiky Úvod do databázových systémů Cvičení 8 Ing. Petr Lukáš petr.lukas@vsb.cz Ostrava, 2014 Opakování Entita Entitní typ
Binární logika Osnova kurzu
Osnova kurzu 1) Základní pojmy; algoritmizace úlohy 2) Teorie logického řízení 3) Fuzzy logika 4) Algebra blokových schémat 5) Vlastnosti členů regulačních obvodů 6) Vlastnosti regulátorů 7) Stabilita
Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)
Operátory Základy programování 1 Martin Kauer (Tomáš Kühr) Organizační poznámky Formátujte kód přehledně! Pomůžete sobě i mně. Spusťte si vaše programy a zkuste různé vstupy! Pokud program nedává správné
Racionální čísla, operátory, výrazy, knihovní funkce
Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Racionální čísla, operátory, výrazy, knihovní funkce BI-PA1 Programování a algoritmizace 1 Katedra teoretické informatiky Miroslav Balík
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
Základní datové struktury
Základní datové struktury Martin Trnečka Katedra informatiky, Přírodovědecká fakulta Univerzita Palackého v Olomouci 4. listopadu 2013 Martin Trnečka (UPOL) Algoritmická matematika 1 4. listopadu 2013
Odvozené a strukturované typy dat
Odvozené a strukturované typy dat Petr Šaloun katedra informatiky FEI VŠB-TU Ostrava 14. listopadu 2011 Petr Šaloun (katedra informatiky FEI VŠB-TU Ostrava) Odvozené a strukturované typy dat 14. listopadu
přetížení operátorů (o)
přetížení operátorů (o) - pro vlastní typy je možné přetížit i operátory (tj. definovat vlastní) - pro definici slouží klíčové slovo operator následované typem/znakem operátoru - operátor je speciální
C++ Akademie SH. 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory. Michal Kvasni ka. 20. b ezna Za áte níci C++
C++ Akademie SH 2. Prom nné, podmínky, cykly, funkce, rekurze, operátory Za áte níci C++ 20. b ezna 2011 Obsah 1 Prom nné - primitivní typy Celá ísla ƒísla s pohyblivou desetinnou árkou, typ bool 2 Podmínka
Výroková logika - opakování
- opakování ormální zavedení Výroková formule: Máme neprázdnou nejvýše spočetnou množinu A výrokových proměnných. 1. Každá proměnná je výroková formule 2. Když α, β jsou formule, potom ( α), (α β), (α
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody
Pokročilé programování v jazyce C pro chemiky (C3220) Operátory new a delete, virtuální metody Dynamická alokace paměti Jazyky C a C++ poskytují programu možnost vyžádat si část volné operační paměti pro
Maturitní otázky z předmětu PROGRAMOVÁNÍ
Wichterlovo gymnázium, Ostrava-Poruba, příspěvková organizace Maturitní otázky z předmětu PROGRAMOVÁNÍ 1. Algoritmus a jeho vlastnosti algoritmus a jeho vlastnosti, formy zápisu algoritmu ověřování správnosti
Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal
Databázové systémy - SQL * definice dat * aktualizace * pohledy Tomáš Skopal Osnova přednášky definice dat definice (schémat) tabulek a integritních omezení CREATE TABLE změna definice schématu ALTER TABLE
9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>
9.3.2010 Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include int main(void) { int dcislo, kolikbcislic = 0, mezivysledek = 0, i; int vysledek[1000]; printf("zadejte
InterSystems Caché Post-Relational Database
InterSystems Caché Post-Relational Database Martin Holoubek xholoub@fi.muni.cz Úvod InterSystems byla založena shodou okolností ve stejném roce jako její největší konkurent Oracle 1978 Caché je velmi vyspělý
Přetěžování operátorů
Přetěžování operátorů Cíle lekce Cílem lekce je seznámit se s mechanizmem přetížení operátorů a s použitím tohoto mechanizmu při návrhu a implementaci programů. Po absolvování lekce budete: umět využívat
PREPROCESOR POKRAČOVÁNÍ
PREPROCESOR POKRAČOVÁNÍ Chybová hlášení V C# podobně jako v C++ existuje direktiva #error, která způsobí vypsání chybového hlášení překladačem a zastavení překladu. jazyk C# navíc nabízí direktivu #warning,