Diskuze: kód v triede mimo metód
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.
Samozřejmě, že ne. Bylo by to proti principu OOP.
Ano lze to.
public class Foo{
static{
//kod co chces vykonat, vykona se pouze jednou
}
{
//kod se vykona pred vytvoreni kazdou novou instanci
}
public Foo(){
...
}
}
Od toho jsou konstruktory, ať instanční nebo statický.
Ptal se jestli lze mit kod mimo metody, ne jestli je to spravne nebo ne.
Podle dotazu moc nerozumí jak OOP funguje, takže tímhle bych ho opravdu
nepletl. Vždycky žasnu co do těch jazyků dávají, co to je za lidi?
Konstruktory jsou potřebné pouze pokud potřebuješ do objektu předat inicializační parametry. Jinak je konstruktor zbytečný, kompozice objektu bez konstruktoru vypadá mnohem elegantněji.
Ten kód "před vytvořením instance" ani do složených závorek nedávám. Výsledek je však trochu odlišný: deklarované proměnné zůstávají součástí objektu. Když je dám do složených závorek, budou zlikvidovány.
Proč tam vlastně chceš dávat cyklus, když to jde i bez něho? Nějaká ukázka toho, co se ti nedaří, by nebyla?
Java není čistě objektový jazyk, a blok static se používá určitě častěji než myslíš
Možná hledáš něco takového:
Map<String,String> test = new HashMap<String, String>(){{
put(key1, value1);
put(key2, value2);
}};
Ide mi o to nejak spolu pospájať otázky správne odpovede na ne.
Najprv som chcel použiť Map, (vytvoril som si String[][] pole, obsahujúce
otázku aj odpoved), a potom prejst to pole cyklom, ktorý 'naputuje'
jednotlivé položky do Mapu.
Ale potom som zistil, že to pole mi vlastne bohate postačí, keď budem potrebovat otázku, vygenerujem z pola dvojícu, a potom porovnám if (userAnswer.equals(otazky[generovaneCislo][1]))
A ten poslední kód se ti nelíbí? Pokud to chceš tahat ze souboru nebo dvourozměrného pole, tak místo těch dvou putů uděláš cyklus, který projde všechny záznamy a putne je do mapy. Je to hezky zapouzdřené, je to tedy ve stylu OOP.
Použití toho pole bych se raději vyhnul. Přece jen je poněkud nepraktické dávat texty dovnitř aplikace. Raději bych je viděl v XML, CSV nebo v databázi.
"A ten poslední kód se ti nelíbí? Pokud to chceš tahat ze souboru nebo dvourozměrného pole, tak místo těch dvou putů uděláš cyklus, který projde všechny záznamy a putne je do mapy. Je to hezky zapouzdřené, je to tedy ve stylu OOP."
Ale páčil sa mi.. lenže ten cyklus a vkladanie tých otázok a odpovedí stojí nejaký čas a výkon nie? Ani neviem, či je branie položiek z HashMap-u rýchlejšie ako pole..
"Použití toho pole bych se raději vyhnul. Přece jen je poněkud
nepraktické dávat texty dovnitř aplikace. Raději bych je viděl v XML, CSV
nebo v databázi."
Ani jedno z tohto zatiaľ neviem
Pro těch pár tisíc položek, pro které to potřebuješ, to nehraje zas takovou roli. Pokud bys toho měl víc nebo to chceš často modifikovat, použij raději zmíněné externí způsoby. Tohle je určitě rychlejší, než konverze toho 2D pole:
Map<String,String> test = new HashMap<String, String>(){{
put("key", "klíč");
put("cube", "krychle");
put("interface", "rozhraní");
}};
CSV by mohlo vypadat třeba takto:
key, klíč
cube, krychle
interface, rozhraní
Jenže na načtení toho souboru potřebuješ zmíněný cyklus, který to pole bude číst po řádcích a ukládat do slovníku. Do pár set tisíc řádek by to mohlo stačit, ale na milióny bych raději použil tu databázi.
Zobrazeno 16 zpráv z 16.