<?xml version="1.0" encoding="utf-8"?>
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" type="topic" id="writing-good-code" xml:lang="cs">

  <info>
    <link type="guide" xref="index#general-guidelines"/>
    
    <credit type="author copyright">
      <name>Federico Mena-Quintero</name>
      <email its:translate="no">federico@gnome.org</email>
      <years>2013</years>
    </credit>
    <credit type="author copyright">
      <name>Miguel de Icaza</name>
      <email its:translate="no">miguel@gnome.org</email>
    </credit>
    <credit type="author copyright">
      <name>Morten Welinder</name>
      <email its:translate="no">mortenw@gnome.org</email>
    </credit>

    <include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>

    <desc>Kvalitní a čitelný kód zajišťuje udržovatelnost projektu</desc>
  </info>

  <title>Význam psaní kvalitního kódu</title>

  <p>GNOME je velmi ambiciózní svobodný softwarový projekt a skládá se z velkého množství softwarových balíčků, které jsou na sobě navzájem více či méně závislé. Většina práce na GNOME je prováděna dobrovolníky. Ačkoliv jsou i lidé, kteří na GNOME pracují placeně na plný nebo částečný úvazek, dobrovolníci zatím odvádějí největší díl práce ze všech přispěvatelů. Programátoři mohou přicházet a odcházet kdykoliv a věnovat projektu GNOME libovolné množství času. Lidem se mohou měnit podmínky ve „skutečném světě“ a to se odrazí v množství času, který mohou GNOME věnovat.</p>

  <p>Vývoj softwaru zabírá hodně času a vyžaduje nemalé úsilí. To je důvod, proč dobrovolníci na částečný úvazek nemohou začít velké projekty vlastními silami. Je mnohem jednodušší, a přináší uspokojivější výsledky, přispět do stávajícího projektu. Výsledky jsou navíc ihned viditelné a použitelné.</p>

  <p>Proto je jasné, že je velmi důležité u stávajících projektů zajistit, aby do nich lidé mohli přispívat jednoduše. Jedním ze způsobu, jak toho dosáhnout, je zajištění snadné čitelnosti, srozumitelnosti, úprav a správy.</p>

  <p>Škaredý kód se špatně čte a lidé mohou ztratit zájem, když nemohou rozluštit, o co se kód vlastně snaží. Je také důležité, aby byli programátoři schopni kód pochopit rychle a začít tak přispívat opravami chyb a vylepšeními ve velmi krátkém čase. Zdrojový kód je jistou formou <em>komunikace</em> a slouží spíše pro lidi, než pro počítače. Stejně, jako by se určitě nikomu nechtělo číst román plný překlepů, gramatických chyb a špatné interpunkce, i programátoři by měli usilovat o psaní kvalitního kódu, který je jednoduchý na pochopení a úpravy od ostatních.</p>

  <p>Následující věci jsou důležitými měřítky kvality dobrého kódu:</p>

  <terms>
    <item>
      <title>Čistota</title>
      <p>Čistý kód se dobře čte, bez potřeby vynakládat na to nadměrné úsilí. Lidem to pomůže jej snadno pochopit. Patří k tomu přímo styl kódování (umístění závorek, odsazení, názvy proměnných) a vlatní řízení průběhu kódu.</p>
    </item>

    <item>
      <title>Jednotnost</title>
      <p>Jednotnost kódu usnadňuje lidem porozumět, jak program funguje. Když čtete konzistentní kód, podvědomě si utváříte řadu předpokladů a očekávání o tom, jak kód funguje, takže v něm jednodušeji a bezpečněji můžete provádět změny. Kód, který na dvou místech <em>vypadá</em> stejně, by měl i stejně <em>pracovat</em>.</p>
    </item>

    <item>
      <title>Rozšiřitelnost</title>
      <p>Kód s obecným účelem se snáze znovu použije a upraví, než velmi specifický kód s řadou natvrdo vložených předpokladů. Když chce někdo do programu přidat novou funkcionalitu, bude to mít samozřejmě jednodušší, když byl kód od začátku navrhován jako rozšiřitelný. Kód, který nebyl psán tímto způsobem, může vést lidi k použití různých nepěkných kliček, aby novou funkcionalitu mohli přidat.</p>
    </item>

    <item>
      <title>Správnost</title>
      <p>No a konečně, programový kód, který je navržen tak, aby byl správný, nenutí lidi trávit čas trápením s řešením chyb a mohou tak více času věnovat vylepšování funkcionality programu. I uživatelé ocení správný kód, protože nikdo nemá rád software, který se hroutí. Kód, který je napsán správně a bezpečně (tj. kód, který se výslovně snaží zajistit, aby program setrval v konzistentním stavu) zabrání mnoha druhům nepříjemných chyb.</p>
    </item>
  </terms>

  <section id="book-references">
    <title>Doporučené knihy</title>

    <list>
      <item><p><link href="http://www.cc2e.com">Code Complete</link> od autora Steve McConnell.</p></item>
      <item><p><link href="http://martinfowler.com/books/refactoring.html"> Refactoring: Improving the Design of Existing Code </link>, Martin Fowler.</p></item>
      <item><p><link href="https://en.wikipedia.org/wiki/Design_Patterns"> Design Patterns: Elements of Reusable Object-Oriented Software </link>, kolektiv autorů Erich Gamma, Richard Helm, Ralph Johnson a John Vlissides.</p></item>
      <item><p><link href="http://astore.amazon.com/gnomestore-20/detail/020163385X"> Object-Oriented Design Heuristics </link>, Arthur Riel.</p></item>
    </list>
  </section>
</page>
