Datový typ char
- jeden znak
- zapisuje se do uvozovek
- speciální znaky pomocí escape sekvencí
- tiskne se pomocí direktivy
%c
Metody
- zatím byly programy krátké a jde se v nich jednoduše vyznat
- větší programy je nutné nějak strukturovat
- třídy (někdy příště)
- metody (dnes)
- metoda je kus kódu, který dělá nějakou rozumně definovanou činnost
- např. výpis řádky na obrazovku, načtení čísla od uživatele...
- metodu vytvoříme, vždy, když si řekneme "teď by se mi hodilo mít příkaz, který ..."
- kód metody by měl pracovat na stejné úrovni abstrakce
- převod více obrázků do šedivé barvy
- metoda pro průchod seznamem souborů (obrázků) by neměla řešit
jednotlivé pixely
- spočtení počtu prvočísel v seznamu
- výpočet prvočísla vs průchod seznamem
- uložení objednávky v e-shopu
- práce s položkami v košíku vs způsob uložení na disku
- ...
Příklad: tisk pyramidy
int vyska = 5;
for (int v = 1; v <= vyska; v++) {
opakujZnak(' ', vyska - v);
opakujZnak('X', v);
System.out.println();
}
- doufám, že se shodneme, že tenhle kód je trochu přehlednější
Vytváření metod
-
zatím budeme metody vytvářet následujícím způsobem
public static void opakujZnak(char znak, int kolikrat) {
while (kolikrat > 0) {
System.out.printf("%c", znak);
kolikrat--;
}
}
- pokud v kódu pak napíšeme
opakujZnak(' ', vyska - v)
, bude se to
chovat, jako bychom napsali
znak = ' ';
kolikrat = vyska - v;
while (kolikrat > 0) {
System.out.printf("%c", znak);
kolikrat--;
}
Parametry metody
- to jsou proměnné v kulatých závorkách hned za jménem metody
- mohou se jmenovat stejně jako už existující proměnné v jiné metodě
- uvnitř metody se pak tváří jako normální proměnné
- (proměnné uvnitř metody nejsou nijak zvenčí vidět, tj. každé metoda
může mít svoji, zcela nezávislou, proměnnou
int i
)
Kdy vytvářet metody
- její kód je rozumně popsatelná činnost
- pokud nedokážu účel metody říci v jedné větě, typicky je něco špatně
- její funkci (co dělá) je potřeba zajistit na více místech v programu
- potřebuji opticky zkrátit jinou metodu
"Počítací" metody (též známé jako funkce)
- občas chceme něco spočítat a rádi bychom výpočet uzavřeli do metody
- např. chceme napsat následující program:
int rok = ...;
if (jePrestupny(rok)) {
System.out.printf("%d je prestupny rok.\n", rok);
} else {
System.out.printf("%d neni prestupny rok.\n", rok);
}
- čili někde chceme mít metodu
jePrestupny(int rok)
- v takovém případě místo
void
napíšeme typ, který má metoda "vracet"
- a spočítanou hodnotu vrátíme pomocí klíčového slova
return
/* Zjednodušená verze. */
public static boolean jePrestupny(int rok) {
return (rok % 4) == 0;
}
- to, co ve skutečnosti proběhne je vlastně...
int rok = ...;
if ((rok % 4) == 0) {
System.out.printf("%d je prestupny rok.\n", rok);
} else {
System.out.printf("%d neni prestupny rok.\n", rok);
}
- ... ale s pomocí oddělené metody při čtení kódu hned vidíme, že
se ptáme na přestupnost roku
- nehledě na to, že reálně je přestupnost roku trochu komplikovanější
a tedy bude i kód funkce delší