KOPÍROVÁNÍ TEXTOVÉHO POLE

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

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

zapište obslužnou metodu události Click tlačítka a vyzkoušejte chování polevýsledek.text = polečíslo1.text + polečíslo2.text;

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

ÚLOHA 4-J-00 Projděte si kapitolu 4 knihy Moderní programování učebnice pro začátečníky a snažte se všemu porozumět.

Pokročilá práce s proměnnými

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Čtvrtek 3. listopadu. Makra v Excelu. Obecná definice makra: Spouštění makra: Druhy maker, způsoby tvorby a jejich ukládání

Indexové seznamy. známe už pole, kde ale musí být předem známa velikost indexové seznamy umí růst dynamicky

Tabulková data. budeme pracovat s CSV soubory položky oddělené středníkem, např.

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

Takto chápanému druhu objektů se říká TŘÍDA.

Tematický celek 03 - Cvičné příklady

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Střední škola pedagogická, hotelnictví a služeb, Litoměříce, příspěvková organizace

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

Word Lekce III. a IV.

Nový způsob práce s průběžnou klasifikací lze nastavit pouze tehdy, je-li průběžná klasifikace v evidenčním pololetí a školním roce prázdná.

POLE. - datová struktura ze složek stejného typu, ke kterým se přistupuje pomocí indexů

Jazyk C# a platforma.net

Manuál k programu KaraokeEditor

UŽIVATELSKÉ ROZHRANÍ WINDOWS-FORM DESKTOPOVÉ APLIKACE - CVIČENÍ

Jednoduchý návod k použití programu Vinotéka 2007, v 2.2.1

Úvod. Popis a funkce programu HESLO.

Cvičné příklady Hodina 2

Jazyk C# a platforma.net

Popis programu EnicomD

Grid 2. Krok za krokem. Jednoduchý manuál pro základní úpravy mřížek v programu

Školní kolo soutěže Baltík 2009, kategorie C

POZOR!!! INSTALACE POD WINDOWS 200 / XP / VISTA PROBÍHÁ VE DVOU ETAPÁCH A JE NUTNÉ DOKON

15. Projekt Kalkulačka

Vzorce. StatSoft. Vzorce. Kde všude se dá zadat vzorec

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Objekty jako zapozdření dat. začneme vytvářet vlastní objekty a třídy

Tabulkový kalkulátor

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

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

Zadání: TÉMA: Zápis algoritmu, čtení textového souboru, porovnání řetězců.

BM Software, Databáze Docházky 3000 na NAS serveru (pro MySQL) Němčičky 84, Němčičky u Břeclavi. Úvodní informace:

Vzorce. Suma. Tvorba vzorce napsáním. Tvorba vzorců průvodcem

Příručka pro aplikaci KSnapshot

Programování jako nástroj porozumění matematice (seriál pro web modernivyuka.cz)

Nejzajímavější jsou události MouseDown a KeyDown.

Kurikulum počítačové gramotnosti pro žáky se speciálními vzdělávacími potřebami příloha ŠVP ( 2.stupeň ZŠ - 3.část )

UniLog-L. v0.81 návod k obsluze software. Strana 1

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

Psaní programu pro PLC SIMATIC S7-300 pomocí STEP 7

Př. program s popojíždějícím autíčkem o 50 pixelů při každém stisku Popojeď

Jednoduchý návod k použití programu Vinotéka 2006, v 2.0

PRÁCE S APLIKACÍ Evidence městských knih

WinFAS. obecné. Praktický úvod do WinFASu IQ sestavy podrobně. Strana 1

Úvod do filtrace, Quick filtr

AUTOMATICKÉ ZÁLOHOVÁNÍ DATABÁZE PRO SQL Express 2005

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

PTV MAP&GUIDE INTERNET V2 USNADNĚNÝ PŘECHOD

WinFAS. 3 účto. Praktický úvod do WinFASu Banka

Databáze prodejců. Tlačítka. Vytvoří kartu nového prodejce (Alt+N); Změní vybraného prodejce Uloží nového prodejce nebo změnu (Alt+U);

Programování v jazyce VISUAL BASIC.NET


ERP informační systém

Android Elizabeth. Verze: 1.1

8 Makra Příklad 4 Excel 2007

METODICKÝ POKYN PRÁCE S MS PowerPoint - POKROČILÍ. Tento projekt je spolufinancován Evropským sociálním fondem a státním rozpočtem České republiky.

PRACUJEME S TSRM. Modul Samoobsluha

Jednoduché stříhání videa

INFORMATIKA. aplikační software pro práci s informacemi TSUNAMI. Pracovní list pro žáky. Gymnázium K. V. Raise, Hlinsko, Adámkova 55

Spuštění a ukončení databázové aplikace Access

Modul 2. Druhá sada úkolů:

VISUAL BASIC. Práce se soubory

4D Mobile! Úvod! Achitektura 4D Mobile!

THEOPHILOS. (návod k použití)

Stránky obce Olomučany

ERP informační systém

Základní orientace v MS Excel

01. HODINA. 1.1 Spuštění programu VB Prvky integrovaného vývojového prostředí. - pomocí ikony, z menu Start.

Program pro tvorbu technických výpočtů. VIKLAN - Výpočty. Uživatelská příručka. pro seznámení se základními možnostmi programu. Ing.

Algoritmizace a programování

Pro kontrolu správného formátu hodnoty N použijeme metodu try-catch.

MAXScript výukový kurz

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

Průvodce aplikací FS Karta

Návod k aplikaci DPH Kontrol

1. Obsah. 1. Obsah Začínáme Práce s mapou Kniha jízd Denní statistika Seznam řidičů...9

Téma 4: Správa uživatelského přístupu a zabezpečení II. Téma 4: Správa uživatelského přístupu a zabezpečení II

Základy HTML. Autor: Palito

Svolávací systém Uživatelský manuál

3 Makra Příklad 4 Access Ve vytvořené databázi potřebuje sekretářka společnosti Naše zahrada zautomatizovat některé úkony pomocí maker.

Import zboží ve formátu CSV

Modul Zásoby IQ sestavy a jejich nastavení Materiál pro samostudium +1170

HELIOS - Zálohování BüroKomplet, s.r.o.

II. Elektronická pošta

Formátování pomocí stylů

Formuláře. Téma 3.2. Řešený příklad č Zadání: V databázi formulare_a_sestavy.accdb vytvořte formulář pro tabulku student.

Gymnázium a Střední odborná škola, Rokycany, Mládežníků 1115

Návod k práci s programem MMPI-2

UniLog-D. v1.01 návod k obsluze software. Strana 1

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

Supernova 16 Ovládací zkratky. Akce Funkce Stolní počítač Přenosný počítač Automatické popisování grafických objektů LEVÝ CONTROL + PRAVÁ HRANATÁ

Transkript:

49 Kapitola 4. Přiřazovací příkaz V předchozí kapitole jsme si říkali, že život do programů s grafickým uživatelským rozhraním vnášejí události a že ke každé události, na kterou má program reagovat, je třeba připojit obslužnou metodu. Do obslužných metod se zapisují příkazy, jenž má počítač v reakci na vznik události provést. V našich příkladech obslužných metod jsme zatím zapisovali příkazy volání předem připravených podprogramů, konkrétně Close a MessageBox.Show. V této kapitole se zaměříme na jiný druh příkazu, konkrétně na přiřazovací příkaz. Ten umožňuje data kopírovat z jednoho místa na jiné ať už beze změny, nebo nějak vhodně zkombinovaná. KOPÍROVÁNÍ TEXTOVÉHO POLE Použití přiřazovacího příkazu si opět nejlépe ukážeme na příkladech. Začneme prográmkem, jehož uživatelské rozhraní je zobrazeno na Obr. 26. Budou v něm dvě textová pole doprovázená popisky a jedno tlačítko. Ve spodním textovém poli bude zakázána editace, bude určeno jen ke čtení. Funkce programu bude spočívat v tom, že při stisku tlačítka Kopíruj se zkopíruje text zadaný uživatelem v horním poli do pole spodního. Ve Visual Studiu vytvořte nový projekt nazvaný Kopírování a v Návrháři připravte uživatelské rozhraní podle obrázku. Horní textové pole pojmenujte polevěta, spodní polekopie a tlačítko tlačítkokopíruj. Jelikož se akce, tj. kopírování, má spustit v reakci na stisk tlačítka, je potřeba vložit obslužnou metodu události Click tlačítka. Jelikož Click je hlavní událostí tlačítka, stačí na tlačítko poklepat přímo v Návrháři. Na místě, kde bude blikat kurzor, vložte tento příkaz (opět jej opisujte pečlivě včetně velkých a malých písmen): polekopie.text = polevěta.text; Obr. 26 Úvodní prográmek s přiřazovacím příkazem Celou obslužnou metodu pak zachycuje Výpis 5. Program spusťte a ověřte jeho funkčnost. private void tlačítkokopíruj_click(object sender, EventArgs e) polekopie.text = polevěta.text; Výpis 5 Obslužná metoda události Click tlačítka

50 PŘIŘAZOVACÍ PŘÍKAZ Jak to funguje? Co ten příkaz znamená? Příkaz, který jste do programu vložili, je tzv. přiřazovací příkaz, který hodnotu na pravé straně od rovnítka přiřadí na místo udané na straně levé. Obecně bychom jej mohli vyjádřit takto (tento zápis si velmi dobře zapamatujte, budete jej od nynějška používat neustále): kam = co; Porovnáním obecného tvaru s příkazem zapsaným do programu (Tab. 12) můžete vidět, že zapsaný příkaz přiřazuje hodnotu vlastnosti Text objektu polevěta do vlastnosti Text objektu polekopie. Jelikož vlastnost Text reprezentuje text v textovém poli zobrazený, bude po provedení výše uvedeného příkazu polekopie zobrazovat tentýž text jako polevěta. Pokud uživatel následně obsah polevěta změní, nebudou se již dále zobrazované texty shodovat. K jejich synchronizaci dojde opět při dalším stisku tlačítka, který vyvolá vstup do obslužné metody a provedení přiřazovacího příkazu. Obecně V zapsaném příkazu Jak to počítač přečte kam polekopie.text Do vlastnosti Text objektu polekopie = = přiřaď co polevěta.text hodnotu vlastnosti Text objektu polevěta. Tab. 12 Porovnání obecného zápisu s použitým příkazem Z uvedeného výkladu jste se zřejmě dovtípili, že se v zapsaném příkazu provádí bližší určování jménem objektu. Je použito schéma jméno objektu, tečka, jméno vlastnosti daného objektu. Vlastnost Text mají všechny objekty uživatelského rozhraní, proto je vždy potřeba říct, vlastnost Text kterého objektu máte na mysli. Zápis polevěta.text tedy znamená vlastnost Text objektu polevěta, podobně zápis polekopie.text odkazuje na vlastnost Text objektu polekopie. Činnost přiřazovacího příkazu ve spojení s objekty si můžete představit i podle schématu z Obr. 27 a Obr. 28, které zachycují situaci před provedením přiřazení a bezprostředně po něm. Objekty polekopie i polevěta jsou na něm zobrazeny jako určité kontejnery obsahující řadu přihrádek. Každá přihrádka je jedna vlastnost objektu, hodnota vlastnosti je obsah přihrádky. Provedením výše uvedeného přiřazení se vezme obsah přihrádky Text objektu polevěta a tak, jak je, se zkopíruje do přihrádky Text objektu polekopie, kde nahradí jakýkoli původní obsah. Obsah přihrádky, ze které se kopírovalo, zůstane nedotčen. Stejně tak zůstane nedotčen obsah všech ostatních přihrádek obou objektů.

51 objekt polekopie vlastnost Text Prasátko vlastnost BackColor modrá barva vlastnost ForeColor bílá barva... objekt polevěta vlastnost Text Medvídek Pú a Ijáček vlastnost BackColor šedá barva vlastnost ForeColor černá barva... Obr. 27 Objekty před přiřazením objekt polekopie vlastnost Text kam Medvídek Pú a Ijáček vlastnost BackColor modrá barva vlastnost ForeColor bílá barva... objekt polevěta vlastnost Text co Medvídek Pú a Ijáček vlastnost BackColor šedá barva vlastnost ForeColor černá barva... Obr. 28 Objekty po realizaci přiřazení DALŠÍ PŘIŘAZOVÁNÍ V úvodním příkladu kapitoly jsme použili přiřazovací příkaz, který obsah vlastnosti jednoho objektu kopíroval do vlastnosti jiného objektu. Nyní si ukážeme, že do přihrádky-vlastnosti lze přiřadit nejen hodnotu z jiného objektu, ale i hodnotu, která je ve zdrojovém textu programu přímo uvedená. Obr. 29 Program s přiřazováním přímo uvedených hodnot

52 Program, na jehož příkladu si přiřazování přímo uvedených hodnot ukážeme, bude mít podobu podle Obr. 29. Textové pole umožní uživateli zadat slovo či větu a navíc ještě bude ovládáno jednotlivými tlačítky: Tlačítko Ahoj lidi vloží do textového pole takto znějící větu. Tlačítko Vymaž obsah textového pole smaže. Tlačítko Text červeně obarví text v poli na červeno. Tlačítko Zablokuj textové pole zablokuje tak, že text v něm nebude možno editovat ani přenášet do schránky. Tlačítko Odblokuj vrátí akci tlačítka Zablokuj. Ve vývojovém prostředí Visual Studio vytvořte nový projekt a podle Obr. 29 připravte uživatelské rozhraní. Abychom se v dalším postupu spolu shodovali, použijte tato pojmenování jednotlivých objektů: oknoprogramu, popisekvěta, polevěta, tlačítkoahojlidi, tlačítkovymaž, tlačítkotextčerveně, tlačítkozablokuj a tlačítkoodblokuj. Nyní se můžete pustit do programování naplánovaných činností. Jelikož u všech tlačítek půjde o obsluhu hlavní události Click, nebude ani potřeba použít Okno vlastností. Proveďte následující kroky: V Návrháři poklepejte na tlačítko Ahoj lidi a do vložené obslužné metody tlačítkoahojlidi_click vložte příkaz polevěta.text = "Ahoj lidi"; Do vlastnosti Text textového pole se tím přiřadí přímo uvedený řetězec. Ten je z obou stran ohraničen uvozovkami a ve vývojovém prostředí zobrazen červeně. S tím jsme se už setkali při předávání parametrů do podprogramu MessageBox.Show. V Návrháři poklepejte na tlačítko Vymaž a do vložené obslužné metody tlačítkovymaž_click vložte příkaz nebo příkaz polevěta.text = ""; polevěta.text = null; První varianta pracuje s tzv. prázdným řetězcem zapsaným dvojicí uvozovek bezprostředně za sebou bez jakékoli mezery mezi. Ve variantě alternativní představuje klíčové slovo null tzv. nedefinovanou hodnotu, používanou i jinde než pouze při práci s řetězci. Prázdný řetězec a nedefinovaná hodnota není obecně jedno a totéž, ve většině případů však namísto prázdného řetězce hodnotu null zapsat můžete.

53 V Návrháři poklepejte na tlačítko Text červeně a do vložené obslužné metody tlačítkotextčerveně_click vložte příkaz polevěta.forecolor = Color.Red; Pracujeme stále s objektem polevěta, nyní však s jeho jinou vlastností. Konkrétně s vlastností ForeColor udávající barvu zobrazeného textu. Konkrétní hodnota barvy se zapíše slovem Color, za kterým následuje tečka a anglický název barvy. V momentě, kdy za slovem Color napíšete tečku, vám vývojové prostředí okamžitě všechny použitelné názvy barev nabídne. Možná jste si tohoto našeptávání ze strany vývojového prostředí již všimli ať cokoli píšete, Visual Studio se vám snaží napovědět možné pokračování, případně za vás slovo dokončí po klepnutí na variantu či stisku klávesy Tab. Našeptávání je výborná věc, zvykněte si je používat! Ušetříte si tak spoustu překlepů. V Návrháři poklepejte na tlačítko Zablokuj a do vložené obslužné metody tlačítkozablokuj_click vložte příkaz polevěta.enabled = false; Tento příkaz pracuje s vlastností Enabled textového pole. Je-li tato vlastnost nastavená na true, pole normálně pracuje, je-li nastavená na false, pole dělá mrtvého brouka. Všimněte si, že hodnoty true a false se ve zdrojovém textu zapisují vždy malými písmeny! To je rozdíl oproti Oknu vlastností, který tyto hodnoty píše s prvním písmenem velkým. Tvůrci Visual Studio se pro tuto nekonzistenci rozhodli, nám zůstává toto rozhodnutí respektovat. No a konečně poklepejte na tlačítko Odblokuj a do vložené obslužné metody tlačítkoodblokuj_click vložte příkaz polevěta.enabled = true; Vysvětlení je stejné jako u tlačítka Zablokuj. Pro kontrolu, jak by měl nakonec vypadat celý zdrojový text Form1.cs, se podívejte na Výpis 6. Pro jistotu bych zdůraznil, že zdrojový text Form1.cs je jen jednou částí příběhu. Není možné tedy přípravu programu vyřešit tak, že tento zdrojový text od začátku do konce opíšete! Bez výše popisované práce s Návrhářem se neobejdete. Návrhář vytvoří vazby mezi událostmi a jejich obsluhami a tyto vazby zapíše do jím obhospodařovaného kódu Form1.Designer.cs. Program spusťte a důkladně prověřte všechny jeho funkce. Pokud by se vám jeho kompletace nepodařila, najdete ho jako obvykle na webových stránkách učebnice.

54 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace Různá_přiřazení public partial class oknoprogramu : Form public oknoprogramu() InitializeComponent(); private void tlačítkoahojlidi_click(object sender, EventArgs e) polevěta.text = "Ahoj lidi"; private void tlačítkovymaž_click(object sender, EventArgs e) polevěta.text = null; private void tlačítkotextčerveně_click(object sender, EventArgs e) polevěta.forecolor = Color.Red; private void tlačítkozablokuj_click(object sender, EventArgs e) polevěta.enabled = false; private void tlačítkoodblokuj_click(object sender, EventArgs e) polevěta.enabled = true; Výpis 6 Zdrojový text Form1.cs programu Různá přiřazení

55 VÍCE PŘÍKAZŮ V METODĚ Pohled na naše dosavadní programy Události tlačítka, Kopírování a Různá přiřazení by někoho mohl svádět k představě, že v obslužných metodách bývá vždy jediný příkaz, že se v nich vždy provede jediná akce. Není tomu tak, dovnitř metody můžete vložit tolik příkazů, kolik potřebujete. Hned se na nějaký program s více příkazy v metodě podíváme. Vraťte se k Obr. 29 a uvažujte se mnou. Což takhle pozměnit funkci tlačítek Zablokuj a Odblokuj? Možná by bylo šikovné, kdyby bylo v provozu jen to, které má v daném stavu programu svůj smysl. Když například textové pole normálně pracuje, nemá význam mačkat tlačítko Odblokuj. Tlačítko by pouze nabízelo zbytečnou možnost odblokovat nezablokované pole. Podobně můžeme uvažovat i v záležitosti tlačítka Zablokuj. Proveďme to tedy tak, že v obsluze tlačítka Odblokuj: jednak odblokujeme textové pole, ale přitom současně vyřadíme (zablokujeme) tlačítko Odblokuj a navíc oživíme tlačítko Zablokuj. Obsluha tlačítka Zablokuj bude analogická: zablokujeme textové pole, přitom vyřadíme tlačítko Zablokuj a oživíme tlačítko Odblokuj. Obslužné metody obou tlačítek se tedy změní do podoby, kterou ukazuje Výpis 7. Zkuste podle něj upravit program ve vašem počítači a spustit ho. private void tlačítkozablokuj_click(object sender, EventArgs e) polevěta.enabled = false; tlačítkozablokuj.enabled = false; tlačítkoodblokuj.enabled = true; private void tlačítkoodblokuj_click(object sender, EventArgs e) polevěta.enabled = true; tlačítkoodblokuj.enabled = false; tlačítkozablokuj.enabled = true; Výpis 7 Upravené obsluhy tlačítek Zablokuj a Odblokuj Při testování programu jste asi zaznamenali jeden jeho nedostatek, a tím je skutečnost, že při startu jsou aktivní obě tlačítka. Nuže, není nic snazšího, než s pomocí Okna vlastností nastavit vlastnost Enabled tlačítka Odblokuj na počáteční hodnotu False. Kompletní program najdete jako obvykle na webových stránkách učebnice.

56 K otázce více příkazů v metodě ještě zmíním, že většinou se každý příkaz z důvodu přehlednosti zapisuje na samostatný řádek zdrojového kódu. Není to však absolutní nutností, jazyk C# to nevyžaduje. Sem tam může být vhodnější na jeden řádek zapsat příkazů více, anebo naopak nějaký delší příkaz rozdělit na několik řádků 12. Rozhodujícím kritériem je vždy přehlednost programu a to, aby jeho formální podoba co nejlépe odrážela logiku řešení. SEKVENČNÍ ZPRACOVÁNÍ Věnujme se i nadále problematice více akcí v jedné metodě. Zkusíme vytvořit program, který bude udržovat dvě zálohy dokumentu. No dokumentu, to je silné slovo, spíš bych měl říct jedné věty. V reakci na stisk tlačítka Zálohuj se text z pole Věta zkopíruje (zazálohuje) do pole Záloha. Současně s tím se záloha samotná také zazálohuje do třetího textového pole (Obr. 30). Nuže, vytvořte si nový projekt Dvojitá záloha a připravte uživatelské rozhraní podle Obr. 30. Abychom se shodovali, zvolte pojmenování textových polí stejné jako já: polevěta, polezáloha, polepůvodnízáloha. V programu bude evidentně jediná obslužná metoda, a tou je obsluha události Click tlačítka. Vytvořte ji a zapište do ní jednak příkaz pro zkopírování věty do zálohy, jednak pro uložení původní zálohy. Kopírování Obr. 30 Program ilustrující otázku sekvenčního zpracování z jednoho textového pole do druhého jsme dělali na začátku kapitoly, takže by neměl být problém obslužnou metodu zapsat, viz Výpis 8. private void tlačítkozálohuj_click(object sender, EventArgs e) polezáloha.text = polevěta.text; polepůvodnízáloha.text = polezáloha.text; Výpis 8 Obsluha stisku tlačítka v programu Dvojitá záloha Program spusťte a zkontrolujte jeho činnost. Dost možná se budete divit. Zapsat obě akce do jedné metody problém opravdu nebyl, akorát že program nefunguje, jak má. V obou zálohovacích textových polích je vždy stejná hodnota. Program tedy dvě zálohy nevytváří! Příčina problému tkví v tom, že počítač nevykonává příkazy najednou. Jednotlivé příkazy metody počítač provádí vždy sekvenčně, jeden po druhém, v pořadí 12 Rozdělení příkazu je možno provést pouze v tom místě, kde se dá zapsat mezera. To znamená buď tam, kde mezera už je, nebo např. před závorkou či za závorkou. Rozdělení není možno provést uprostřed přímo uvedeného řetězce uzavřeného v uvozovkách.

shora dolů, jak jsou zapsány ve zdrojovém kódu. V kódu se tedy nejprve obsah polevěta zkopíruje do polezáloha a až poté se polezáloha zkopíruje do polepůvodnízáloha. V té chvíli je však již původní obsah polezáloha nenávratně ztracen, přepsán obsahem polevěta. Program tedy v obou zálohových polích vždy zobrazí tutéž hodnotu. Řešením problému je, jak se asi rychle dovtípíte, prohodit příkazy mezi sebou. Nejprve je třeba do spodního pole zkopírovat dosavadní obsah polezáloha a teprve poté, až je záloha bezpečně zazálohována, zkopírovat obsah polevěta do polezáloha. Správné řešení ukazuje Výpis 9. Kompletní program najdete opět na webu. private void tlačítkozálohuj_click(object sender, EventArgs e) polepůvodnízáloha.text = polezáloha.text; polezáloha.text = polevěta.text; Výpis 9 Obsluha stisku tlačítka v programu Dvojitá záloha (už správná!) SÉMANTICKÉ CHYBY Možná se ptáte, jak je možné, že chybné pořadí příkazů neodhalilo vývojové prostředí podobně jako třeba zapomenutý středník. Neodhalilo ji proto, že ji ani nemohlo odhalit. Vývojové prostředí dokáže zkontrolovat, zda je program zapsán podle pravidel jazyka C#, nemůže však vědět, jestli jste uvedené pořadí příkazů náhodou nezvolili záměrně. Co když jste to tak opravdu chtěli? Jednu věc vývojové prostředí rozhodně nedokáže, a to vidět programátorům do hlavy. Uvedenému druhu chyb, kdy je program funkční, ale dělá něco jiného, než dělat má, se říká chyby sémantické neboli významové. Chybám, se kterými jsme se setkali dříve, jako byl třeba zapomenutý středník, se oproti tomu říká chyby syntaktické. To jsou prohřešky proti syntaxi daného programovacího jazyka. Z počátku budete zápasit asi především se syntaktickými chybami. Jak si ale na pravidla jazyka C# víc a víc přivyknete, zjistíte, že skutečným problémem jsou chyby sémantické. Syntaktické chyby odhaluje vývojové prostředí za vás, chyby sémantické musíte najít sami. Jejich zrádnost je navíc ještě v tom, že mnohdy nejsou hned vidět, že se třeba projevují jen někdy. Z důvodu převážně skrytého charakteru sémantických chyb se při profesionálním vývoji programů věnuje nemalý čas na testování programu. Tester, což je obvykle osoba odlišná od autora programu, se snaží v programu navodit co možná nejrůznější situace, zkouší používat co možná nejrůznější vstupní data. Cílem jeho práce je odhalit v programu co nejvíce chyb. Čím dříve se chyba objeví, tím snadnější a levnější je její oprava. Chyby v ostrém provozu u zákazníka jsou ty nejdražší. Před předáním programu testerovi si základní testování ovšem provádí i programátor. Jako autor programu nejlépe tuší, kde asi mohou být citlivá místa, a tak se je snaží zkontrolovat. Zvykněte si i vy své programy testovat. Testujte o to pečlivěji, že vám záda nekryje jiná osoba v podobě testera. Přitom pamatujte, že cílem testování není najít případ, kdy program funguje, ale především najít případy, kdy program nefunguje! 57

58 SHRNUTÍ KAPITOLY Jedním z nejdůležitějších příkazů vůbec je přiřazovací příkaz. V jazyce C# se zapisuje v této podobě: kam = co; Příkaz funguje tak, že hodnotu uvedenou napravo od rovnítka přiřadí (zkopíruje) do místa zapsaného na straně levé. Při práci s vlastnostmi různých objektů se používá bližší určení jménem objektu, které lze schematizovat do sloganu jméno objektu, tečka, jméno vlastnosti daného objektu. Například polevěta.text označuje vlastnost Text objektu polevěta. Chcete-li v metodě vykonat více akcí, jednoduše zadáte více příkazů. Příkazy se pak vykonávají sekvenčně, jeden za druhým, v pořadí, v jakém jsou ve zdrojovém kódu zapsány. Kromě syntaktických chyb, což jsou prohřešky proti pravidlům programovacího jazyka, existují ještě chyby sémantické, jak se označují případy, kdy se program sestaví, ale po spuštění dělá něco jiného, než programátor zamýšlel. Zatímco syntaktické chyby odhalí vývojové prostředí, zůstává odhalení chyb sémantických na člověku. Za tím účelem je žádoucí každý program dostatečně důkladně otestovat.