Skip to content


«
»

Neztraťme se ve zdrojovém kódu aneb tipy pro přehledný kód

Programátoři často, když píší kód nějaké aplikace, či třeba webu, píšou kód tak, aby mu rozuměli oni sami. Jenže často budou s kódem pracovat i další lidé. Například odevzdání projektu ve škole nebo týmová spolupráce na aplikaci. Je jedno, v jakém jazyce a co programujeme. Důležité je, když někdo například z týmu bude chtít kód upravovat, se v něm vyznal a rychle našel požadovaný segment. Pokud vytváříme aplikaci jen sami pro sebe, může se to stát zbytečné. Nemá to sice takovou váhu, jako týmová práce, ale třeba potřebujeme za pár měsíců kód upravovat a pak hledáme, jak je definována jaká funkce či třída. Příklady budu ukazovat na jazyce C# z rodiny .NET jazyků.

Komentáře v kódu

Snad nejjednodušším a nejrychlejším způsobem jsou komentáře kódu, resp. jeho částí. Nemusíme pochopitelně komentovat každý řádek, ale strategické části, nebo kde nemusí být zcela jasné, co v dané fázi se bude dít. Je jedno, zda tvoříme webovou stránku, či jinou aplikaci, komentovat lze všude. V drtivé většině případů je možnost jednořádkového a víceřádkového komentování. Uvedu nyní příklad komentování v jazyce C# pro jednořádkový komentář (//) a víceřádkový.

int width = grays.Size.Width; //šířka obrázku
int height = grays.Size.Height; //výška obrázku

Toto je jednoduchý příklad jednořádkových komentářů, které komentují akutální řádek. Ve většině vývojových prostředí (IDE) se komentáře zobrazují zeleně, díky zvýraznění syntaxe. Podobně komentujeme v XHTML:

<!– Nyní následuje tvorba HTML formuláře –>

Nyní ukažme příklad víceřádkového komentáře, který může komentovat např. následující část kódu a vysvětluje tak, co se v dané fázi zpracovává.

/* GetEigenvalues metoda vrací vektor
obsahující eigenvalues. */

Vector l = s4.GetEigenvalues();
Console.WriteLine("Eigenvalues: {0:F4}", l);

Komentáře tak poskytují cenné informace, když někdo hodlá s kódem pracovat a zvláště, když vidí kód poprvé. Můžeme komentovat klidně každý řádek a samozřejmě komentáře nijak neovlivňují výkonný (funkční) kód. Dá se to tak přirovnat např. k revizím v textovém editoru, kdy na jednom dokumentu pracuje více lidí a vkládají připomínky k textu. Kód bez komentářů bývá často matoucí a je dobré, když strategické části komentujeme.

Deklarace tříd, jmenných prostorů a objektů

Další důležitou částí jsou vhodné deklarace. Co je tím myšleno? Kromě webových aplikací, založených na XHTML, většina programátorů dnes píše v programovacích jazycích založené na paradigmatu OOP (Object Oriented Programming), tedy objektovém programování. Je to v mnohých ohledech daleko efektivnější, než procedurální přístup, který má např. Pascal či klasické C. Objektové programovací jazyky, mezi něž patří např. C# či Java jsou právě založeny na myšlence objektů. Nebudeme rozebírat pojmy OOP, to přesahuje obor tohoto dokumentu a předpokládá se, že uživatel má aspoň základní znalosti v OOP. Spíše si ukažme, jak vhodně tyto věci deklarovat a proč.

Deklarace znamená v podstatě nadefinování něčeho, co se bude dále používat, takže např. jmenný prostor a třídy. Třídy jsou v jmenných prostorech. V jazyce C# existují tzv. systémové jmenné prostory (např. System.IO, System.Threading, atd.). Ale samozřejmě máme možnost tvořit vlastní jmenné prostory. Třídy pak tvoříme zcela sami a moderní IDE nám umožní psát deklarace ručně nebo je modelovat podobně jako UML. To vychází z modelování tříd a diagramů, kdy vidíme vztahy mezi třídami. Pokud vytváříme v C# např. WinForms aplikace (tedy formuláře Windows), máme k dispozici designérský režim a pomocí tzv. Tooloboxu si přetahujeme ovládací prvky a komponenty na povrch okna. Je to velmi pohodlné, než každý prvek definovat kódem. Cílem tohoto textu je ukázka srozumitelného kódu. Implicitně po spuštění nového projektu WinForms, dostaneme tyto deklarace pro jmenný prostor a třídu (komentáře jsem doplnil):

namespace WindowsFormsApplication4 // výchozí pojmenovaný namespace (jmenný prostor)
{
public partial class Form1 : Form //deklarace třídy Form1
{

Je sice pěkné, že máme vygenerovaný jmenný prostor a třídu, ale tyto názvy nejsou moc výstižné. Nehledě na to, že takových prostorů a hlavně tříd mohou být v kódu stovky. Takže je dobré je nějak vhodně pojmenovat podle účelu, aby dalším lidem bylo jasné, co mají třídy za úkol. Třídu deklarujeme vždy klíčovým slovem class (a přístupovými identifikátory, které určují, jak se s třídou nakládá). Takže vhodně pojmenovaný jmenný prostor a třída by mohla vypadat například takto:

namespace Maticove_operace // v tomto jmenném prostoru se budou zpracovávat matice
{
public class Nasobeni //v této třídě násobení matic
{

Takto každý pochopí význam tříd a jmenných prostorů. Nicneříkající názvy nejsou dobrou volbou pro projekty, kde je hodně tříd, pak programátor, jemuž byl projekt předán, pracně hledá co daná třída znamená. Za deklarací třídy již začíná vlastní blok kódu.

Ovládací prvky

Budujeme-li nějakou desktopovou aplikaci (v Javě, C++, C# či jiných jazycích), často využíváme výhod IDE pro vizuální přetahování prvků, jak bylo zmíněno výše. To nám umožní jednoudše přetahovat na povrch např. tlačítka, popisky, přepínače, zkrátka prvky formulářů (oken). My pracujeme vizuálně a IDE si tvoří daný kód. A zde právě nastává problém další. Např. tlačítka se budou deklarovat stylem Button1, Button2, atd. Pokud v aplikaci bude třeba 10 tlačítek či více a programátor v týmu bude potřebovat provést nevizuální úpravu (tedy ne změnu vlastností, vzhledu), ale např. samotné události tlačítka, bude pracovat v kódu. Bude hledat pracně jaký význam má tlačítko Button1, kde se nachází. Když dáme tlačítkům (a jiným ovládacím prvkům) výstižné názvy, bude se hledat daleko lépe. Název by měl opět vystihovat význam prvku. Ukažme si příklad právě na tlačítku a popisku.

private System.Windows.Forms.Button btn_convert; //deklarace tlačítka pro konverzi
private System.Windows.Forms.Button btn_load; //deklarace tlačítka pro nahrání
private System.Windows.Forms.Button btn_save; //deklarace tlačítka pro uložení

Zde vidíme příklad dobře výstižně pojmenovaných tlačítek. Není pak problém najít daná tlačítka v kódu a provsét nějakou změnu. Vizuální změny budeme pravděpodobně řešit v designérském režimu pomocí vlastností. Nyní příklad definice popisků (label), které nejsou vhodně pojmenovány.

private Label label1;
private Label label2;
private Label label3;

V případě tlačítek pak není problém najít úsek kódu, kde se s tlačítkem pracuje…

private void btn_load_Click(object sender, System.EventArgs e)
{
OpenFileDialog open = new OpenFileDialog();

Do kódu aplikace jsem vizuálně přetáhl nový checkbox (zatržítko) a vygeneroval se kód:

private CheckBox checkBox1;

Výchozí událostí tlačítka je kliknutí, což je vidět v kódu. Tlačítkou jsem pojmenoval tlacitko (výchozí je button1).

private void tlacitko_Click(object sender, EventArgs e)

Výpisy na obrazovku

Posledním tématem, ke kterému se zmíníme, jsou výpisy na obrazovku. Máme-li napsaný kód, spustíme kompilaci a program by se měl spustit. Zvláště u konzolových aplikací jsou důležité srozumitelné výpisy na obrazovku, co program provedl, co má uživatel zadat. Ukažme si příklad vypsaného textu na obrazovku v jazyce C#, kdy má uživatel zadat nějaké hodnoty a program je má přečíst. Vidíme celý kód konzolové aplikace, která po spuštění vypíše co má uživatel zadat. Samozřejmě rozsahy musí být ošetřeny a čísla deklarována správným datovým typem.

namespace Nejaka_cisla
{
class Cisla
{
static void Main(string[] args) //vstupní bod aplikace v C#
{
Console.Write("Zadejte nyní hodnotu čísla a v rozsahu 0-150.");
Console.Read();
Console.Write("Nyní zadejte číslo b v rozsahu 0-200.");
Console.ReadKey();

Použití pro tvorbě webových aplikací

Samozřejmě uvedené rady lze využít nejen u tvorby desktop aplikací, ale také pro webový vývoj. I když třeba trošku jinak. Komentování je možno použít jak u samotného XHTML kódu, tak u psaní JS či PHP kódu, atd. Názvy prvků pak při navrhování formulářů v HTML či v XAML. A samozřejmě také u Silverlight aplikací. A také v mnoho dalších oblastech vývoje. Také přehledně komentovaný XHTML kód má svůj význam pro lepší pochopení, kde se co nachází.

Zvýraznění syntaxe

Nezapomínejme také na to, že při psaní složitějšího kódu se nám bude hodit editor, který zvýrazňuje syntaxi daného jazyka. Což znamená, že prvky jazyka zvýrazní tučně či nejlépe pomocí barev. Ihned vidíme jednotlivé části kódu a je-li kód patřičně komentovaný, snadno najdeme potřebné řádky k úpravě. Editorů je spousta, například oblíbený PSPad či Unired, který umí zvýraznit syntaxi pro desítky jazyků. Pro větší projekty využijeme komplexní vývojové prostředí.

Zvýraznění syntaxe je jedním z prvků programátorských editorů

Zvýraznění syntaxe je jedním z prvků programátorských editorů

Shrnutí na závěr

Cílem tohoto textu bylo stručně objasnit a přiblížit, co je potřeba pro psaní srozumitelného kódu a proč. V týmové práci je srozumitelný kód, jež je opatřen komentáři a jsou vhodně pojmenované části kódu, je nepostradatelným přínosem. Programátor, který kód převezme, nebo např. když student odevzdá program učiteli, tito lidé by měli být schopni rychle najít smysl programu, co která část kódu dělá a proč tam je. Také by měl schopen pochopit hned ze začátku cíl, jedná-li se o větší projekt. Takže psát co nejlépe, zalamovat řádky, logicky oddělovat celky s vhodným komentářem je předpokladem pro úspěšnou týmovou práci. Samozřejmě text nezachycuje všechny aspekty, upozorňuje na ty nejdůležitější.

Rubrika: Návody, Ostatní, Tipy.

0 reakcí

Mějte přehled o nových komentářích, přihlašte se k odběru RSS kanálu komentářů tohoto příspěvku.

Některé HTML je povoleno

(vyžadováno)

(vyžadováno, nebude nikde zobrazeno)