Programování. Psaní čistého kódu. Martin Urza

Podobné dokumenty
Programování. Debugging a testování. Martin Urza

Programovací jazyk Pascal

VY_32_INOVACE_08_2_04_PR

NPRG030 Programování I, 2010/11

NPRG030 Programování I, 2016/17 1 / :58:13

NPRG030 Programování I, 2017/18 1 / :22:16

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Algoritmizace a programování

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

type Obdelnik = array [1..3, 1..4] of integer; var M: Obdelnik;

Vyučovací hodina. 1vyučovací hodina: 2vyučovací hodiny: Opakování z minulé hodiny. Procvičení nové látky

Rekurze. Pavel Töpfer, 2017 Programování 1-8 1

dovolují dělení velkých úloh na menší = dekompozice

Úvod do programování

NPRG030 Programování I, 2015/16 1 / :25:32

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

1 PRVOCISLA: KRATKY UKAZKOVY PRIKLAD NA DEMONSTRACI BALIKU WEB 1

Anotace. Soubory a práce s nimi, rekurze podruhé, struktury (datový typ record), Martin Pergel,

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

Identifikátory označují objekty v programu používané (proměnné, typy, podprogramy).

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

Test prvočíselnosti. Úkol: otestovat dané číslo N, zda je prvočíslem

Tabulkové processory MS Excel (OpenOffice Calc)

2.1 Podmínka typu case Cykly Cyklus s podmínkou na začátku Cyklus s podmínkou na konci... 5

Distanční opora předmětu: Programování v jazyce C Tématický blok č. 8: Dynamické datové struktury, ladění programů Autor: RNDr. Jan Lánský, Ph.D.

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Skripta ke školení. Základy VBA. vypracoval: Tomáš Herout. tel:

ALGORITMIZACE A PROGRAMOVÁNÍ

Sada 1 - Základy programování

Sada 1 - Základy programování

Pseudonáhodná čísla = algoritmicky generovaná náhrada za náhodná čísla

Programování 2 (NMIN102) Soubory. RNDr. Michal Žemlička, Ph.D.

Sada 1 - Základy programování

Interpret jazyka IFJ2011

Programování. Programování s řetězci. Martin Urza

Jazyk C# a platforma.net

Náhradní text k cvičení 4.11.

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

Implementace seznamů do prostředí DELPHI pomocí lineárního seznamu

Přidávání animací do programů

Činnost: 1) Vyhodnotí se výraz E. 2) Jeho hodnota se uloží do proměnné V.

6 Příkazy řízení toku

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

O datových typech a jejich kontrole

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

2 Strukturované datové typy Pole Záznam Množina... 4

Basic256 - úvod do programování Příklady. ing. petr polách

Souhrn Apendixu A doporučení VHDL

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

Rezervační systém TROJHŘIŠTĚ hriste.pist.cz

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

První kapitola úvod do problematiky

Zadání úloh. Úloha 2.1 Trojice. Úloha 2.2 Čerpadlo. (4b) (4b) matematicko-fyzikální časopis ročníkxiv číslo2

Visual Basic for Applications

Reprezentace aritmetického výrazu - binární strom reprezentující aritmetický výraz

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

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

MQL4 COURSE. By Coders guru -5 Smyčky & Rozhodnutí Část 2

Registrační číslo projektu: CZ.1.07/1.5.00/ Elektronická podpora zkvalitnění výuky CZ.1.07 Vzděláním pro konkurenceschopnost

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

Řídicí struktury. alg3 1

BASH. Kouzla s příkazovou řádkou. Petr Koloros

Šablonovací systém htmltmpl vypracoval: Michal Vajbar, Šablonovací systém htmltmpl

GENEROVÁNÍ KÓDU 9. SHRNUTÍ - PŘÍKLAD POSTUPU PŘEKLADU VSTUPNÍHO PROGRAMU (ZA POUŽITÍ DOSUD ZNÁMÝCH TECHNIK)

Náznak ukázky syntaxe a sémantiky pro projekt. 1 Syntaktické prvky. Poslední aktualizace: 8.

10 Algoritmizace Příklad 2 Word 2007/ VBA

Homer. prvky. délka. přední 0 zadní 4. Použití fronty BUS STOP. 3 Lisa. 2 Bart. 4 Maggie. 1 Marge. Grafické znázornění předchozí animace:

Obecná informatika. Matematicko-fyzikální fakulta Univerzity Karlovy v Praze. Podzim 2012

1.2.5 Reálná čísla I. Předpoklady:

Binární soubory (datové, typované)

Seminář z IVT Algoritmizace. Slovanské gymnázium Olomouc Tomáš Kühr

Programování. Jak fungují imperativní jazyky. Martin Urza

Kolekce ArrayList. Deklarace proměnných. Import. Vytvoření prázdné kolekce. napsal Pajclín

1. D Y N A M I C K É DAT O V É STRUKTUR Y

Vzdělávání v egoncentru ORP Louny

Maturitní otázky z předmětu PROGRAMOVÁNÍ

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Implementace LL(1) překladů

MAXScript výukový kurz

Radomíra Duží L Datový typ množina

Software je ve světě IT vše, co není Hardware. Do softwaru patří aplikace, program, proces, algoritmus, ale i data (text, obrázky), operační systém

= knihovna prostředků pro lepší práci s textovou obrazovkou, klávesnicí a generátorem zvuků

PREPROCESOR POKRAČOVÁNÍ

Strukturované typy a ukazatele. Úvod do programování 1 Tomáš Kühr

Binární vyhledávací strom pomocí směrníků Miroslav Hostaša L06620

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Úvod do programování. Úvod do programování. ing. Miroslav Jílek 2009, SJOP Poděbrady

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

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

ŘÍDÍCÍ STRUKTURY - PODMÍNKY

VISUAL BASIC. Práce se soubory

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

1. krok Přihlaste se. Klikněte na políčko Přihlášení

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

Uložené procedury Úvod ulehčit správu zabezpečení rychleji

Transkript:

Programování Psaní čistého kódu Martin Urza

Motivace Pro kompilátor je jedno, jestli je kód oddělen mezerami, odřádkováními či tabulátory. Přeložitelný kód může vypadat třeba i jako ten úchvatně přehledný výtvor v rámečku napravo. program modifychars;var numin:string;numout:string;func tion max(a,b:integer):integer; if (a>b) then max:=a else max:=b;end; readln(numin);while (0<length(numIn)) do numout:=copy(numin,length(numin )- 2,3)+numOut;delete(numIn,max(1, length(numin)-2),3);if (0<length(numIn)) then numout:=concat(',',numout);end; writeln(numout);end. Proč tak nepsat, když to jde? Z téhož důvodu, proč Vám nepřednáším s roubíkem v puse. Váš kód může někdo chtít číst (i Vy sami, nezajímají-li Vás ostatní). Ač by většinu z Vás nejspíše nenapadlo napsat tu krásu, která je uvedena v modrém rámečku, napadá Vás mnoho jiných nečitelných půvabů.

Práce v týmu Píšete-li programy dlouhé desítky až stovky řádek, jste typicky jedinými autory. Reálné projekty mívají desítky až stovky tisíc řádek a jsou tvořeny prakticky výhradně v týmech složených z více programátorů. Pracuje-li více programátorů na jednom projektu, je nutné, aby po sobě tito byli schopni číst kód pokud možno co nejsnáze. V jistých ohledech je jednoznačné, co je dobře a co špatně. Někdy je hypoteticky správných možností více; pak je důležité, aby se programátoři shodli. I když nebudete pracovat v týmu, pak vězte, že svůj kód po půl roce budete číst podobně jako cizí.

Odsazení kódu Ač mohou být různé názory na to, jakým způsobem odsazovat, rozhodně je špatné neodsazovat vůbec. V kódu se mohou vyskytovat celistvé bloky příkazů, které k sobě patří (typicky se jedná o takové, které mají být provedeny spolu, například podmíněně). Ty je třeba určitě odsazovat. Tímto odsazením znázorníte, o které příkazy se jedná. Doplnit případné chybějící /end bude snadnější. Dále je vhodné jednotně odsazovat při psaní cyklů a podmínek (příkaz a blok příkazů se může lišit). Tady je dobré si pohlídat i to, aby kód neodjížděl příliš doprava (měl by se stále vejít na obrazovku).

Příklady odsazení program programname; var var1 : type1; var2 : type2; order1; order2; while (condition1) do order3; if (condition2) then order4; order5; end else order6; while (condition3) do order7; order8; end; end. program programname; var var1 : type1; order1; while (condition1) do order2; if (condition2) then order3; order4; end else order5; while (condition3) do order6; order7; end; if (condition4) then order8 else order9; end. program programname; var var1 : type1; order1; while (condition1) do order2; if (condition2) then order3; order4; end else order5; while (condition3) do order6; order7; end; if (condition4) then order8 else order9; end. program programname; var var1 : type1; order1; if (condition2) then order2; order3; end else order4; end. program programname; var var1 : type1; order1; while (condition1) do order2; if (condition2) then order3; order4; end else order5; while (condition3) do order6; order7; end; if (condition4) then order8 else order9; end.

Špatná odsazení Téměř nejhorší je neodsazovat vůbec (viz. minulý slajd vpravo nahoře). Horší, než neodsazovat vůbec, je odsazovat náhodně a bez ohledu na logiku věci. Tento nápad vypadá tak hloupě, že by se mohlo zdát zbytečné jej zmiňovat, avšak se s tím lze kupodivu u některých lidí setkat. Další ne moc praktické -ač systematické- odsazování lze najít na minulém slajdu vpravo dole. Při opakovaném vnoření (například podmínky do jiné podmínky) jde kód moc doprava. Změna délky řádky (např. řádky s if) může vyžadovat změny v odsazení více jiných řádek.

Jména proměnných Pro překladač je zcela irelevantní, jak jsou proměnné pojmenovány, beztak jejich jména vyoptimalizuje a nepoužívá. Programátorům mohou jména proměnných výrazně pomoci při orientaci v kódu; proměnné pojmenované špatně v tomto směru poskytují medvědí službu. Nejčastější špatný způsob pojmenování proměnných je naprosto náhodný (jména nesouvisí s obsahem). Další oblíbený způsob je zavedení systému jmen ve stylu a, b, c, d,., což také usnadňuje orientaci. Problémy nastávají v každém kódu, kde je třeba více proměnných (než udržíte v hlavě, což je tak 2 až 8).

Jak správně pojmenovávat proměnné Ze jména proměnné by mělo být jasné, co proměnná označuje a co v ní je uloženo. Že to děláte špatně, poznáte podle toho, že při použití nějaké hodnoty musíte výše v kódu hledat, kde je ona hodnota uložena. Ještě zjevnějším příznakem toho, že je něco špatně, je pak situace, kdy koukáte na proměnnou a netušíte, co v ní vlastně je uloženo (což už je trošku extrém). Speciálním oříškem jsou proměnné typu boolean. Ty slouží typicky k uložení nějakého stavu. Jméno volte tak, aby bylo jasné, co znamená true a co false. Například název proměnné prime (prvočíslo) není moc vypovídající; lepší je použít isprime.

Různé notace pojmenování proměnných Je-li jméno proměnné jednoslovné, pak není žádný problém. Obsahuje-li jméno proměnné více slov, pak je více možností, jak od sebe tato slova oddělit. Oddělovat slova v proměnných mezerami či tečkami není možné (neprojde to přes kompilátor). Neoddělovat slova v proměnných vůbec nijak a psát je do jedné nudle není dobrý nápad (nepřehledné). Oddělovat slova v proměnných podtržítky je dobré. Příklad: is_prime Oddělovat slova velkými písmeny je také přehledné. Příklad: isprime

Funkce a procedury Každý program, který je možno zapsat pomocí funkcí a procedur, lze napsat i bez nich. Proč je používáme? Hlavní důvod používání funkcí a procedur byl zmíněn v přednášce o funkcích a procedurách: používáme je proto, aby mohl být stejný kód volán (spuštěn) víckrát. Existuje i jiný důvod. Funkce a procedury mohou být pojmenováním kódu, což zvyšuje přehlednost. Použití funkcí i procedur může být rozumné i tehdy, když se v celém kódu vyskytuje jen jedno volání. Uvažte kód, který má přečíst vstup, potom jej upravit, následně z něj něco spočítat a pak vypsat na výstup. Rozdělíte-li kód do readinput(), editinput(), calculate() a writeoutput(), zpřehledníte jej a snížíte riziko chyby.

Jména funkcí a procedur Logika pojmenovávání funkcí a procedur je přibližně stejná jako logika pojmenovávání proměnných. Pointou je pojmenovávat funkce podle toho, co vlastně dělají. Ta jména by měla být jasná, výstižná a přesná. Pro funkce typu boolean platí stejné doporučení jako pro booleovské proměnné. Jméno isprime je jasnější než prime. Jméno isset je lepší než set. Důvody jsou stejné jako u proměnných. Pozor na moc krátká jména. Problém je, že se mohou překrývat se jmény jiných funkcí. Například write() a read() jsou vestavěné funkce, jméno open() je celkem nicneříkající (nikdo neví, co se má otevřít).

Konstanty Hodnoty (všech typů, tedy čísla, řetězce a tak dále) je možné pojmenovávat. Klíčové slovo pro deklaraci konstant je const a používá se podobně jako var. program showconst; var a : integer; const b = 2; c = 'Jadzia Dax'; writeln(b); a := 2 * b; writeln(a); writeln(c); end. Syntaxe deklarace konstant: identifikátor = hodnota; Každá hodnota, která znamená něco jiného než sebe samu, by měla být pojmenována kvůli přehlednosti. 12 neznamená počet měsíců v roce, 4 neznamená délku slova ahoj, 8 neznamená počet opakování s = ½ * a * b je vzorec pro výpočet obsahu pravoúhlého trojúhelníku; ½ v něm znamená ½

Komentáře Komentáře jsou kusy textu, které je možné vložit do kódu a které budou překladačem zcela ignorovány. Jsou dvě možnosti, jak zapisovat komentáře: Do složených závorek {}. Cokoliv je psáno ve složených závorkách, je překladačem ignorováno, příklad použití: { následující příkaz vypíše ahoj na výstup } write('ahoj'); Za dvě lomítka //. Cokoliv je psáno za dvěma lomítky, je až do konce řádky ignorováno, příklad použití: write('ahoj'); //na výstup vypsáno ahoj, toto je ignorováno Do komentářů si může programátor zapisovat různé poznámky a postřehy ke kódu. Ve větších projektech jsou komentáře naprosto nezbytné.

Další možnost použití komentářů Představte si situaci, že ladíte kód a chcete nějakou jeho část smazat, ale nejste si jisti, zda je tento krok správný (a třeba jej nebude třeba znovu obnovit). V takovém případě není třeba kód odstraňovat, stačí jej umístit do složených závorek, čímž z něj uděláte komentář. Takový kód pak bude ignorován (protože se z pohledu kompilátoru vlastně už nejedná o kód, nýbrž o komentář). Budete-li dotyčný kód někdy znovu potřebovat, stačí jej zas z komentáře vyjmout. Pozor na kód, jehož valná většina je zakomentována, protože je pak trochu problém se v něm vyznat.

Jazyk Vždy je lepší používat angličtinu místo češtiny, neboť se jedná o jazyk mezinárodní, takže tomu bude více lidí rozumět. Je ale také možné, že Vaše vlastní angličtina není na takové úrovni, jak byste si možná přáli. V takovém případě lze přistoupit na kompromis, který spočívá v tom, že budete psát anglický kód a k němu české komentáře (v kódu není nutné třeba sestavovat celé věty, stačí slovní zásoba na jména identifikátorů). Nejste-li schopni ani takového kompromisu, pište celý kód česky (proměnné, funkce, komentáře,.). Nekombinujte český kód s anglickým!!

Rekapitulace Měli byste chápat, proč je důležité nepsat kód jako prase ;o) Nejdůležitější znaky hezkého kódu jsou zejména: správné (systematické) odsazování rozumné pojmenovávání proměnných používání funkcí a procedur správné pojmenovávání funkcí a procedur Měli byste vědět, proč a které konstanty pojmenovat, což je velmi těžké k pochopení. Samotné čtení slajdů k tomu stačit rozhodně nebude. Měli byste umět okomentovat kód, případně využít komentářů k mazání částí kódu.