NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 8 - Nejčastější chyby Kotlin nováčků - Umíš pojmenovat proměnné?

V předešlém cvičení, Řešené úlohy k 7. lekci Kotlinu, jsme si procvičili nabyté zkušenosti z předchozích lekcí.

V dnešním Kotlin tutoriálu si ukážeme první tzv. dobré praktiky pro programování v Kotlinu. Často je porušují nejen nováčci a programátoři tak zanášejí do svých programů zbytečné chyby. Neděláš je také?

Slovo senior programátora

David Čápka - Základní konstrukce jazyka Kotlin

Gratuluji ke zdolání prvních lekcí Základních konstrukcí jazyka Kotlin!

Materiál pro dnešní lekci jsem sestavil na základě dvaceti let zkušeností s programováním. Jako šéfredaktorovi a lektorovi mi rukama prošly stovky, možná tisíce zdrojových kódů vytvořených komunitou. Nebylo těžké si všimnout, že ačkoli většina těchto kódů funguje, obsahuje zbytečné chyby, které se navíc stále dokola opakují. Chyby kupodivu často dělali jak nováčci, tak zkušenější programátoři. Mezi chybující jsem v začátcích patřil i já.

Došel jsem k tomu, že základním a mylným předpokladem je:

✗ Program je správně, pokud funguje.

Programy a domy

Pokud stavíme dům, tak to, že se nám líbí a nefouká do něj, neznamená, že je zkonstruovaný správně. Dům totiž musí mít promyšlenou architekturu, a pokud nemá základy, za pár let se nám začne sesouvat.

Programování je často přirovnáváno ke stavebnictví právě s ohledem na architekturu, v našem případě ovšem tu softwarovou. Vysvětleme si proč.

Lidský mozek dokáže najednou pracovat jen s určitým omezeným množstvím informací. Zjednodušeně můžeme říci, že pokud je program napsaný nepřehledně, od určité chvíle musel programátor udržet v hlavě více věcí, než člověk vůbec dokáže. Přidávání dalších funkcí do takového programu pak vždy způsobí, že v aplikaci vznikne chyba. V praxi to dopadá tak, že hobby projekt autora "přestane bavit" a komerční projekt zkrachuje, protože už je "moc složitý".

Uveďme si ještě jiný příklad. Když bude naše domácnost uspořádaná tak, že kladivo bude v lékárničce, která bude umístěna ve sklepě, asi těžko v ní budeme schopní efektivně fungovat. Ačkoli tento příklad zní absurdně, jeho alternativy v podobě programů vznikají denně.

Kdy je program správně?

To je snadné. Program je správně, pokud:

  • funguje,
  • dodržuje dobré praktiky a
  • je otestovaný.

Všimněme si, že funkcionalita z pohledu uživatele programu představuje jen 1/3 kritérií kvality programu. Podobně jako funkčnost domu z pohledu bydlícího představuje asi jen zlomek jeho reálné kvality z hlediska stavařiny.

Právě o porušování dobrých praktik a o kvalitě kódu se dnes budeme bavit. Záleží nám na tom, abyste byli opravdu dobří, proto těchto lekcí naleznete napříč našimi kurzy vícero.

Jak správně pojmenovávat proměnné?

Říká se, že 10 % času něco programujeme a 90 % času pro to vymýšlíme název ;-) Jedná se samozřejmě o nadsázku, nicméně vtip naráží na nutnost strávit určitý čas vymýšlením názvů proměnných. To aby každý včetně nás, kdo se po pár měsících vrací k vlastnímu kódu, pochopil, k čemu ona proměnná slouží. Obecně se dá spolehnout na jednoduché pravidlo:

Proměnné vždy pojmenováváme podle toho, co obsahují, nikoli podle toho, k čemu v programu slouží.

Porovnejme následující dva kódy:

✗ Špatně

val vypis : String
val text2 : String
var pole = arrayOf<Int>()
var foo : Int
var bar : Int
val x : Int
val vypocet : Int

✓ Správně

val nazev : String
val jmeno : String
var odpovedi = arrayOf<Int>()
var i : Int
var j : Int
val bonus : Int
val celkovyBonus : Int

Oba kódy vytvářejí proměnné pro jednoduchý konzolový kvíz. U prvního příkladu není vůbec jasné, co některé proměnné obsahují, např. pojmenovat proměnnou pole má asi stejnou vypovídací hodnotu, jako bychom ji pojmenovali promenna.

Častou chybou také je, že chceme např. uložit výsledek nějakého výpočtu a proměnnou pojmenujeme vypocet. Výpočet s proměnnou ovšem vůbec nesouvisí, to je nějaká akce (děj), proměnná obsahuje vždy hodnotu (výsledek děje). Tou je zde v případě kvízu celkovyBonus. Podobně je v prvním kódu pojmenovaná proměnná vypis, protože ji někde vypisujeme. Z druhého kódu ale reálně vidíme, že obsahuje název kvízu.

Ruku na srdce – kdo z vás by pochopil, že kód vlevo se týká programu na kvízy?

Proměnné také nikdy nepojmenováváme pomocna nebo pom apod.

Pozor na "czenglish" a diakritiku

Ve zdrojovém kódu je na naší úrovni začátečníků jedno, jakým jazykem budeme pojmenovávat proměnné (pokud tedy nepošleme Angličanovi kód v češtině).

Proměnné v jednom projektu pojmenováváme jedním jazykem. Pokud pojmenováváme česky, tak bez diakritiky!

Opět si ukažme příklady:

✗ Špatně

val zpráva = "Čau!"
var count : Int

✓ Správně

val zprava = "Čau!"
var pocet : Int

Nebo:

val message = "Čau!"
var count : Int

V identifikátorech (např. v názvech proměnných) nikdy nepoužíváme háčky a čárky. V hodnotách v nich uložených je to již samozřejmě v pořádku.

Přestože moderní jazyky podporují kódování UTF-8 i v identifikátorech, lze velmi snadno na háček nebo čárku zapomenout a používáme pak jinou proměnnou! Navíc soubor se zdrojovým kódem může zpracovávat aplikace, která kódování nepodporuje, a typicky se to i časem stane (např. je občas problém zobrazit diakritiku v příloze mailovým klientem apod.).

Víceslovné proměnné

Dnešní aplikace jsou stále složitější. Často se stane, že by jedno slovo k popisu toho, co je v proměnné uloženo, nestačilo. Pak je výhodné použít více slov. Krátké identifikátory z 80. let tak v současných business aplikacích střídají i poměrně dlouhé názvy jako userObjectOutputStreamFactory a podobně.

Takto dlouhý název má ovšem smysl jen ve složité aplikaci, kde je několik podobných proměnných, a proto musíme přidat další slovo. V Hello world aplikaci tedy nebudeme vytvářet proměnnou textSPozdravemHelloWorld, ale stačí nám jen pozdrav, pokud tam jiný není :)

Oddělení slov

Kvůli čitelnosti musíme slova v takovém názvu proměnné nějak oddělit:

  • Více slov oddělujeme podle konvence daného programovacího jazyka. Ta je v Kotlinu tzv. camelCase (česky velbloudí notace, kdy každé další slovo má velké písmeno a název pak vypadá jako hrby). V jiných jazycích se může používat např. podtržítko jako snake_case a další notace.
  • Vyhneme se pokud možno číslování proměnných a už vůbec nepíšeme čísla slovy, ne pozdrav2 ani pozdravDve. "Dvě" totiž neříká nic o tom, co pozdrav obsahuje.
camelCase - Základní konstrukce jazyka Kotlin snake_case - Základní konstrukce jazyka Kotlin

Ukažme si to na příkladech:

✗ Špatně

var zprava1 : String
var zpravaDve : String

Zde není jasné, co je uloženo:

var prijato : String // text, bajty, zprava, objednavka…?
var odeslano : String

A zde je název nečitelný:

var prijatazprava : String
var odeslanazprava : String

✓ Správně

var prijataZprava : String
var odeslanaZprava : String

Nepoužíváme zkratky

Tuto podkapitolu započněme citací:

Všichni si lámali hlavu nad tím, k čemu je ten sloupec DATNAR. Až se jednou zjistilo, že je to prý datum narození.

Tato špatná praktika je vlastně opakem víceslovných názvů proměnných. Nevymýšlíme nesmyslné zkratky. Například z názvu pz nikdo nepozná, že myslíme prijataZprava. Pomůcka může být:

Pokud se na kód podívá někdo jiný než my, měl by přesně vědět, co v které proměnné je.

✗ Špatně

var zp : String
var pz : Int

✓ Správně

var zprava : String
var pocetZprav : Int

Jak jsme slíbili, k tématu dobrých praktik se ještě několikrát vrátíme v podobných, spíše odpočinkových lekcích :)

V příští lekci, Textové řetězce v Kotlin podruhé - Práce se znaky, na vás čeká překvapení ;-)


 

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Předchozí článek
Řešené úlohy k 7. lekci Kotlinu
Všechny články v sekci
Základní konstrukce jazyka Kotlin
Přeskočit článek
(nedoporučujeme)
Textové řetězce v Kotlin podruhé - Práce se znaky
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
33 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity