abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
dnes 11:44 | Zajímavý projekt

Na Indiegogo byla spuštěna kampaň na podporu herní mini konzole a multimediálního centra RetroEngine Sigma od Doyodo. Předobjednat ji lze již od 49 dolarů. Požadovaná částka 20 000 dolarů byla překonána již 6 krát. Majitelé mini konzole si budou moci zahrát hry pro Atari VCS 2600, Sega Genesis nebo NES. Předinstalováno bude multimediální centrum Kodi.

Ladislav Hagara | Komentářů: 0
dnes 00:10 | Nová verze

Byla vydána verze 4.7 redakčního systému WordPress. Kódové označením Vaughan bylo vybráno na počest americké jazzové zpěvačky Sarah "Sassy" Vaughan. Z novinek lze zmínit například novou výchozí šablonu Twenty Seventeen, náhledy pdf souborů nebo WordPress REST API.

Ladislav Hagara | Komentářů: 0
včera 12:00 | Zajímavý projekt

Projekt Termbox umožňuje vyzkoušet si linuxové distribuce Ubuntu, Debian, Fedora, CentOS a Arch Linux ve webovém prohlížeči. Řešení je postaveno na projektu HyperContainer. Podrobnosti v často kladených dotazech (FAQ). Zdrojové kódy jsou k dispozici na GitHubu [reddit].

Ladislav Hagara | Komentářů: 23
včera 11:00 | Bezpečnostní upozornění

Byly zveřejněny informace o bezpečnostní chybě CVE-2016-8655 v Linuxu zneužitelné k lokální eskalaci práv. Chyba se dostala do linuxového jádra v srpnu 2011. V upstreamu byla opravena minulý týden [Hacker News].

Ladislav Hagara | Komentářů: 2
5.12. 22:00 | Komunita

Přibližně před měsícem bylo oznámeno, že linuxová distribuce SUSE Linux Enterprise Server (SLES) běží nově také Raspberry Pi 3 (dokumentace). Obraz verze 12 SP2 pro Raspberry Pi 3 je ke stažení zdarma. Pro registrované jsou po dobu jednoho roku zdarma také aktualizace. Dnes bylo oznámeno, že pro Raspberry Pi 3 je k dispozici také nové openSUSE Leap 42.2 (zprávička). K dispozici je hned několik obrazů.

Ladislav Hagara | Komentářů: 6
5.12. 06:00 | Zajímavý software

OMG! Ubuntu! představuje emulátor terminálu Hyper (GitHub) postavený na webových technologiích (HTML, CSS a JavaScript). V diskusi k článku je zmíněn podobný emulátor terminálu Black Screen. Hyper i Black Screen používají framework Electron, stejně jako editor Atom nebo vývojové prostředí Visual Studio Code.

Ladislav Hagara | Komentářů: 50
5.12. 06:00 | Zajímavý článek

I letos vychází řada ajťáckých adventních kalendářů. QEMU Advent Calendar 2016 přináší každý den nový obraz disku pro QEMU. Programátoři se mohou potrápit při řešení úloh z kalendáře Advent of Code 2016. Kalendáře Perl Advent Calendar 2016 a Perl 6 Advent Calendar přinášejí každý den zajímavé informace o programovacím jazyce Perl. Stranou nezůstává ani programovací jazyk Go.

Ladislav Hagara | Komentářů: 10
3.12. 16:24 | Nová verze

Byla vydána Mageia 5.1. Jedná se o první opravné vydání verze 5, jež vyšla v červnu loňského roku (zprávička). Uživatelům verze 5 nepřináší opravné vydání nic nového, samozřejmě pokud pravidelně aktualizují. Vydání obsahuje všechny aktualizace za posledního téměř půldruhého roku. Mageia 5.1 obsahuje LibreOffice 4.4.7, Linux 4.4.32, KDE4 4.14.5 nebo GNOME 3.14.3.

Ladislav Hagara | Komentářů: 17
3.12. 13:42 | Pozvánky

V Praze probíhá konference Internet a Technologie 16.2, volné pokračování jarní konference sdružení CZ.NIC. Konferenci lze sledovat online na YouTube. K dispozici je také archiv předchozích konferencí.

Ladislav Hagara | Komentářů: 0
2.12. 22:44 | Komunita

Joinup informuje, že Mnichov používá open source groupware Kolab. V srpnu byl dokončen dvouletý přechod na toto řešení. V provozu je asi 60 000 poštovních schránek. Nejenom Kolabu se věnoval Georg Greve ve své přednášce Open Source: the future for the European institutions (SlideShare) na konferenci DIGITEC 2016, jež proběhla v úterý 29. listopadu v Bruselu. Videozáznam přednášek z hlavního sálu je ke zhlédnutí na Livestreamu.

Ladislav Hagara | Komentářů: 26
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (24%)
 (29%)
 (8%)
 (5%)
 (3%)
Celkem 781 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: JAVA - priklady

4.1.2010 10:21 Pavel
JAVA - priklady
Přečteno: 4550×
Ahoj, blizi se mi zkouzka z programovani(1. rocnik VS), a narazil sem na jedno ukazkove zadani(viz. nize), tak bych chtel poprosit o "nastineni reseni".....neco bych take vymyslel, jen me zajima, jak by to resili zkusenejsi a lepsi programatori nez jsem ja....... diky

1. [5 bodů] Vytvořte třídu Clovek reprezentující jednoho člověka s vlastnostmi jméno, příjmení a věk. Pro všechny atributy napište setry a getry.

2. [5 bodů] Pro třídu Clovek vhodně zastiňte metody toString - vrátí iformaci o osobě, equals - dvě osoby jsou stejné, pokud se shodují jejich jména, příjmení i věk, vhodně zvolte metodu hashCode.

3. [5 bodů] Třídu Clovek doplňte o možnost přirozeného řazení - implementujte vhodné rozhraní. Nejprve řaďte podle příjmení, při jejich shodě podle jména a při shodě podle věku.

4. [5 bodů] Vytvořte třídu umožňující řadit lidi podle věku, při jejich shodě podle příjmení a potom podle jména.

5. [5 bodů] Vytvořte třídu reprezentující frontu zákazníků (použijte zřetězený seznam) - instancí třídy člověk. Tato fronta bude mít metody pro vložení Clovek-a, vybrání z čela a zjištění, zda je fronta prázdná.

1., 2. a 5. je mi celkem jasna, ale u zbylych, si nejsem jist, co by bylo nejvhodnejdi pouzit.........? predem diky za rady :-)

Řešení dotazu:


Odpovědi

Řešení 1× (krtek007)
4.1.2010 10:50 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Upravil jsem formátování dotazu, aby byly jednotlivé úkoly oddělené.

Ohledně těch dvou úkolů se podívejte na java.lang.Comparable a java.util.Comparator. Pro programování v Javě je vůbec vhodné přečíst si JavaDoc k často používaným balíkům (java.lang, java.util, java.io, java.text) a alespoň anotaci všech tříd v těchto balíkách, abyste měl přehled aspoň o tom základním, co vám runtime knihovna Javy poskytuje.
4.1.2010 11:53 the human Yeoman
Rozbalit Rozbalit vše Re: JAVA - priklady
implementuj Comparable ;)
4.1.2010 11:55 the human Yeoman
Rozbalit Rozbalit vše Re: JAVA - priklady
jee - reaguju na odpoved, navic spravnou ... no nic, ignorujte me pls ;)
4.1.2010 15:21 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
tak uz sem si nec o zkusil vytvorit.....vytvotil sem si Tridu clovek s clenskymi promennynmi jmeno, prijemni, vek, telefoni cislo + setry a getry + zastinil metody toString(), implementoval sem rozhrani Comparable, implentoval jeho metodu int compareTo()......

ve druhe tride vytvorim List "Cloveku" :-D a radim ho... vse je OK a funguje(pokud radim podle veku), jen se mi nejak nedari to seradit podle jmena - nevim, jak mam ziskat tu clenskou promenmou jmeno.....?? :-(

diky za rady :-)

trida Clovek: http://pastebin.com/m317ab129 trida Test: http://pastebin.com/m6e4cc751
4.1.2010 12:03 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
na to Comparable se samozrejme podivam, ale ve skole jsme to nedelali :-( (a ani to neni nikde v osnovach)..... takze bych uprednostnil nejake(jednodussi) reseni (vrchol toho co jsme delali byl spojovy seznam, ArrayList,.......) takze by po me asi nemeli chtit nejake "komparatoty" :-).....napada Vas nake jednodussi reseni??

ja kdyz sem delal neco podobneho(semestralni praci - jednoduchou databazi), tak sem si kazdy Objekt me tridy "prevedl" do Stringu (kde byli vsechny jeho clenske promenne) a ten jsem pak radil....jenze to bylo urcite dost hloupe resene....

diky za rady :-)
4.1.2010 12:26 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Jednodušší řešení neexistuje. To, co jsem napsal, je přesně podle vámi napsaného zadání. Když se podíváte na JavaDoc java.lang.Comparable, najdete tam, že implementace této třídy je právě ono „přirozené řazení“ – a o tom se píše v zadání.
4.1.2010 12:54 kulik
Rozbalit Rozbalit vše Re: JAVA - priklady
Dost zalezi na tom co je to za skolu, dneska uz se obcas dokonce pozaduje, aby clovek zvladl i neco, co se pri vyuce nedelalo :-) Jinak jak uz nekdo psal, jednodussi reseni nez komparator asi neni. Prevest objekt na string a ten pak tridit neni snad primo hloupe, ale dobre reseni to rozhodne neni.
4.1.2010 13:28 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
tak mi zrejme nezbyva nic jineho nez to co ste doporucili......

jinak jen pro informaci: sem prvnim rokem a FEL CVUT....

diky za rady :-)
MaFy avatar 4.1.2010 14:40 MaFy | skóre: 24 | blog: kecy | Praha
Rozbalit Rozbalit vše Re: JAVA - priklady
Nevim, na ktere katedre, ale na Kybernetice tu Javu neuci uplne dobre...
Lidé se dělí do 10 skupin. Na ty, co rozumí binárnímu kódu a na ty ostatní...
4.1.2010 15:03 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
Ja sem na novem programu Kybernetika a Robotika :-)...... to zda to uci dobre nebo spatne nemohu dost dobre posoudit, protoze programovani moc nerozumim.....muzu jen rict, ze cviceni me bavi: s ucitelem byla sranda, rad na cokoli odpovi,...a myslim, ze sem se toho za tech par tydnu celkem dost naucil.....:-)

Jinak o vyuku techto predmetu(spojenych s programovanim) se stara katedra informatiky, ne?
4.1.2010 15:23 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
tak uz sem si nec o zkusil vytvorit.....vytvotil sem si Tridu clovek s clenskymi promennynmi jmeno, prijemni, vek, telefoni cislo + setry a getry + zastinil metody toString(), implementoval sem rozhrani Comparable, implentoval jeho metodu int compareTo()......

ve druhe tride vytvorim List "Cloveku" :-D a radim ho... vse je OK a funguje(pokud radim podle veku), jen se mi nejak nedari to seradit podle jmena - nevim, jak mam ziskat tu clenskou promenmou jmeno.....?? :-(

diky za rady :-)

trida Clovek: http://pastebin.com/m317ab129 trida Test: http://pastebin.com/m6e4cc751
4.1.2010 15:45 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Získáte jí tak jak jste získal ten věk: přetypováním. A tu celou kaskádu ifů si můžete ušetřit, stačí tam dát return jmeno.compareToIgnoreCase(jmeno2).
In Ada the typical infinite loop would normally be terminated by detonation.
4.1.2010 15:58 kuka
Rozbalit Rozbalit vše Re: JAVA - priklady
Nelze mit dve stejne metody compareTo. Na jina razeni nez prirozene je treba vytvorit vhodny Comparator. Nepouzivej pro telefonni cislo int, ale String (jednak nejde o "skutecne" cislo, protoze pro nej nemaji zadny smysl aritmeticke operace, jednak se ti tam nevejde napr. cislo ze zahranici). Je nejaky duvod proc nepouzivat generika (napr. stara verze prekladace)? Pokud ne, tak je pouzivej.
4.1.2010 16:39 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
to ze nesmim mit dve "stejnojmenne" metody je mi jasne(navic prekladac to ani nedovoli)....dal sem to tam jen pro ukazku....

nakonec sem to vyresil trochu jinak:

trida Propiska: http://pastebin.com/m3fdec390 trida Test: http://pastebin.com/m5cfff431

je to resene spravne?? nebo byste neco zmenili??

diky za rady
4.1.2010 17:08 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Za prvé, vkládejte prosím zdrojáky jako přílohy přímo na Abíčko, ať s dotazem zůstanou. Ty odkazy na Pastebin přestanou dříve či později fungovat, a ten dotaz pak nebude dávat smysl.

Za druhé, je divné míchat dohromady přístup přímo přes členskou proměnnou a přístup přes getter. Buď chcete mít možnost v potomcích metody přetížit a porovnávat podle přetížených metod, pak používejte gettery. Nebo chcete porovnávat důsledně podle hodnot v tomto typu, pak používejte přístup přímo přes členské proměnné (který je také o fous rychlejší). Ale kombinovat to bez nějaké logiky svědčí akorát o tom, že nevíte, co chcete.

Za třetí, zcela vám chybí test, zda druhý objekt je také typu Propiska. Lepší je použít generika, pak to za vás pohlídá kompilátor, pak ale stejně potřebujete udělat test na null.

Za čtvrté, stav by měl být zřejmě výčtový typ (enum).

Za páté, soustava tolika do sebe vnořených ifů by ve vás vždy měla vyvolat podezření, že je na tom kód něco špatně. Zkusil bych třeba tohle:
if (other == null) {
  return -1;
}

assert this.nazevFirmy != null;
int result = this.nazevFirmy.compareTo(other.nazevFirmy);
if (result != 0) {
  return result;
}

assert this.barva != null;
result = this.barva.compareTo(other.barva);
if (result != 0) {
  return result;
}

assert this.barvaPisma != null;
result = this.barvaPisma.compareTo(other.barvaPisma);
if (result != 0) {
  return result;
}

assert this.stav != null;
result = this.stav.compareTo(other.stav);
return result;
5.1.2010 07:11 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Za šesté nazvat něco "pomocna" je zhovadilost :P

Jinak ty asserty jsou zde myslím špatně. Z logiky věci vyplývá že,
int result = 0;

if (this.nazevFirmy != null) {
    result = this.nazevFirmy.compareTo(other.nazevFirmy);
} else if (other.nazevFirmy != null) {
    result = 1;
}

if (result != 0) {
    return result;
}

...
nebo kompaktněji
int result = (this.nazevFirmy  != null) ? this.nazevFirmy.compareTo(other.nazevFirmy)
           : (other.nazevFirmy != null) ? 1
                                        : 0;
In Ada the typical infinite loop would normally be terminated by detonation.
5.1.2010 07:54 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Ty asserty jsou přesně podle původního kódu (který nepředpokládal nullové hodnoty), jenom v tom původním kódu chyběly. Pokud tam prázdné hodnoty mohou být, pak je samozřejmě nutné s nimi počítat.
5.1.2010 08:14 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Aha, v tom případě bych to ale nechal chcípnout na normální nullpointerex. A nebo bych assertoval obě strany, abych neporušil kontrakt na antisymetričnost.
In Ada the typical infinite loop would normally be terminated by detonation.
5.1.2010 08:20 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Podle mne pokud předpokládám, že ta hodnota nemůže být prázdná, má ten předpoklad být v kódu vyjádřen assertem (a příslušně zdokumentován v JavaDocu).
5.1.2010 09:00 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Výsledek bude stejný - výjimka. Akorát s assertem budou dvě výjimky, podle stavu assertions on/off. Výjimky jako NPE jsou na to, aby se tyhle předpoklady nemusely explicitně předpokládat. :)

Pokud už chcete někam nějakou blbuvzdornost strkat, tak by to mohl být spíše konstruktor a setter.
In Ada the typical infinite loop would normally be terminated by detonation.
5.1.2010 10:13 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Výsledek je v tomto případě a se současnými kompilátory stejný, ale ten program pokaždé znamená trochu něco jiného.

V případě bez assertů je kontrakt metody takový, že nemá žádné požadavky na vstupní parametry, a v té metodě je chyba – neošetřený případ, kdy některá z hodnot bude prázdná. Pokud někdo tuto metodu zavolá na objekt s prázdnou hodnotou, dojde k výjimce, a je to chyba programátora této metody.

Pokud se použijí asserty (a zdokumentuje se to v JavaDocu, kompilátor zatím s asserty pracovat neumí), je součástí kontraktu metody to, že hodnoty nejsou prázdné. Pokud někdo zavolá metodu na objekt s prázdnými hodnotami, je to chyba volajícího. Některé budoucí verze kompilátorů snad budou umět na takové chyby upozornit už v době překladu.
5.1.2010 11:23 kulik
Rozbalit Rozbalit vše Re: JAVA - priklady
Asserty nemaji s kontraktem nic spolecneho, jejich ucel je jiny. Nikdo nebude zkoumat zdrojaky metod, aby se dozvedel, s jakymi parametry je muze nebo nemuze volat (to mozna u neverejnych metod, tam ale o kontraktu nema prilis smysl mluvit).
5.1.2010 11:32 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Účel assertů je právě popsat kontrakt (nebo aspoň jeho část) strojově zpracovatelným způsobem. Problém je, že současné asserty v Javě se ověřují až za běhu, a jsou tak obecné, že bude problém kontrolovat je v době kompilace – na to by se líp hodily nějaké anotace (také už se takové anotace někde používají, třeba Idea umí používat anotace @Null a @NotNull). Ale je potřeba si uvědomit, kdy se asserty do Javy přidaly.
5.1.2010 13:41 kulik
Rozbalit Rozbalit vše Re: JAVA - priklady
Ja mam (myslim logicky) na mysli prave to, co asserty v jave jsou, nikoliv to co nejsou nebo co jsou nekde jinde. A v soucasnosti assery v jave neslouzi k popisu kontraktu a ani tak nebyly pri zavedeni do jazyka mysleny.
5.1.2010 16:05 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Podle vás je assert jenom syntaktický cukr místo
if (Boolean.getBoolean("assertion.enabled") && !(expr)) {
  throw new AssertionError(…);
}
? K čemu by bylo dobré něco takového do jazyka zavádět?
5.1.2010 20:59 kulik
Rozbalit Rozbalit vše Re: JAVA - priklady
Nejde ani tak o to, co to je podle mne, ale co to je podle autoru. Doporucuji precist si to na strankach Sunu.
6.1.2010 11:43 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Na odkazované stránce autoři kupodivu píší o tom samém, co jsem psal já.
6.1.2010 17:45 kulik
Rozbalit Rozbalit vše Re: JAVA - priklady
To si vubec nemyslim, nicmene alespon se ukazuje, ze si v tomto tezko porozumime a dalsi diskuse je asi zbytecna.
5.1.2010 14:42 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
v té metodě je chyba – neošetřený případ, kdy některá z hodnot bude prázdná
Jenže ve Vašem případě je ten případ stejně špatně/dobře ošetřen. Buď null je platná hodnota, a pak se to může řešit extra porovnáním tak, jak jsem navrhoval. A nebo null platná hodnota není. A v případě vstupu neplatné hodnoty se vyhazuje výjimka. A je už jen na úzusu jestli vyhodíte NPE nebo jinou, akorát že kvůli NPE nemusíte psát další řádky kódu, čímžto má marginální výhodu.

Pokud chcete něco dokumentovat, můžete napsat do dokumentace jednu větu: žádné z polí nesmí být null. Slabé povahy takový guard ještě můžou chtít vynutit v konstruktoru/setteru jak jsem řekl.
In Ada the typical infinite loop would normally be terminated by detonation.
5.1.2010 15:59 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Vy pořád píšete o běhu na produkčním prostředí. Já píšu o vývoji. V Javě je snaha co nejvíc kontrol přesunout do vývoje, nejlépe do fáze kompilace, nebo alespoň testů. Pokud nedodržíte kontrakt a do metody přijímající jako parametr int budete cpát String, taky dostanete za běhu výjimku – ale je snaha to odchytit dřív, konkrétně tohle už v době kompilace. assert má stejný význam, akorát současné kompilátory asserty nijak nekontrolují. Na produkčním prostředí můžete mít assert vypnutý a kód může normálně projít (ne tento konkrétně, ale jiný kód chráněný assertem).
A v případě vstupu neplatné hodnoty se vyhazuje výjimka.
Jenže je podstatné, jestli programátor tu neplatnou hodnotu kontroluje, nebo jestli si dá jako podmínku, že na vstupu neplatná hodnota nesmí být, a pak už ji nekontroluje. Test s ifem a vyhozením výjimky je první případ, assert nebo třeba deklarace typů parametrů metody je druhý případ – programátor hodnoty na vstupu nekontroluje a předpokládá že jsou správně. A deklarovaný typ nebo assert jsou jen nápověda pro nástroje, které tuhle kontrolu udělají za programátora, který danou metodu využívá – přičemž u deklarace typu parametru tu kontrolu umí udělat už kompilátor, u assertů to udělat (zatím) neumí a je to ponecháno až na JVM.
5.1.2010 16:40 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
OK, chápu Vaši pointu. Co se týče vývoje a testování tak striktně řečeno by mělo být posílání nullů do té funkce součástí testu a výsledek by měl odpovídat specifikaci (ať už je jakákoliv).

To o čem mluvíte je přesunutí dalších kontrol na úroveň jazyka - tak, jako je statická typová kontrola, může být i statická kontrola na nenulové objekty. Potíž je ale v tom, co říkáte, totiž že toto vlastnost jazyka není. (Např. v jazyce Ada 2005 můžete u proměnné toto vyjádřit.) Tudíž je momentálně uvedený assert ekvivalentem testu s NPE a je momentálně zbytečné ho používat. Až to bude součástí jazyka, nebo bude aspoň známo, kdy bude a jak přesně to bude fungovat, je možné o tom polemizovat. Čistě syntakticky by ale bylo lepší aby guardy parametrů byly u jejich deklarace a ne někde v těle funkce.
In Ada the typical infinite loop would normally be terminated by detonation.
5.1.2010 17:25 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Potíž je ale v tom, co říkáte, totiž že toto vlastnost jazyka není.
Není to vlastnost současných kompilátorů, vlastnost jazyka to je od verze 1.4. Problém assertů v Javě je ten, že jsou tak obecné, že kompilátor nemůže umět vyhodnotit všechny možné případy. Ale nenulovost by umět vyhodnocovat mohl. A možná to už i nějaké nástroje na statickou kontrolu kódu dělají.

Ani kompilátor od Sunu ve všem neodpovídá plně specifikaci Javy (tj. že by využíval všechny možnosti dané jazykem) – třeba takovou anotaci @SuppressWarnings jednapětkový kompilátor od Sunu ignoroval, přestože byla součástí runtime knihovny (a u Javy se rozdíl mezi jazykem a runtime knihovnou stírá).
Tudíž je momentálně uvedený assert ekvivalentem testu s NPE a je momentálně zbytečné ho používat.
Funkčně ano, ale sémanticky to ekvivalentní není.

Souhlasím s vámi, že dnes není prakticky rozdíl*) v chování aplikace když použiju assert nebo klasický if a vyhození výjimky. Ale význam toho kódu je odlišný a je podle mne škoda se toho významového rozdílu zbavovat.

*) samozřejmě až na to, že s vypnutými assertions je instrukce assert ekvivalentní prázdné instrukci, takže se ušetří provedení pár instrukcí.
Čistě syntakticky by ale bylo lepší aby guardy parametrů byly u jejich deklarace a ne někde v těle funkce.
Ano, to jsem psal a zmiňoval jsem anotace, které ovšem v Javě 1.4, kde byly zavedeny asserty, nebyly.
5.1.2010 20:54 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Problém assertů v Javě je ten, že jsou tak obecné, že kompilátor nemůže umět vyhodnotit všechny možné případy.

No, ano. A tudíž je to z hlediska detekce při kompilaci k ničemu. Kdyby raději vzali ten jeden případ a dotáhli ho do dokonalosti. Java má vůbec zajímavou historii pokusů a omylů.
Ano, to jsem psal a zmiňoval jsem anotace, které ovšem v Javě 1.4, kde byly zavedeny asserty, nebyly.

Anotace mi přijdou jako takový úlet kde se kompenzují všechny problémy, které by se měly řešit jinde. Druhý úlet podobného rázu je pak "programování v snippetech", jak to dovolují "moderní IDE".
In Ada the typical infinite loop would normally be terminated by detonation.
5.1.2010 21:16 kulik
Rozbalit Rozbalit vše Re: JAVA - priklady
Ne opravdu to neni vlastnost jazyka od verze 1.4. Je presne definovano, co aserce jsou a rozhodne nejsou urcene ke kontrole nejakych invariantu behem prekladu. V nekterych pripadech by to slo, ale proste aserce to k tomuto ucelu neslouzi. Mozna ze jednou nekdo vymysli, jak je k tomuto ucelu pouzivat (ja o tom pochybuji), ale zatim to tak jednoduse neni. Sam asercim fandim, ale napriklad vyse uvadene umisteni aserce tesne pred radek, na kterem pri poruseni aserce ihned dojde k NPE, postrada smysl. Kdyz uz, tak by melo mozna vyznam umistit vsechny aserce tykajici se vstupu na zacatek metody, pak by to plnilo urcitou dokumntacni funkci. Aserce si precte pouze programator a ten by mel tak jako tak videt, ze na pristim radku dojde k NPE (pokud to nevidi, tak mu stejne zadna aserce nepomuze) a vysledkem je pouze prodlouzeni a tim zneprehledneni kodu.
6.1.2010 11:48 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Ne opravdu to neni vlastnost jazyka od verze 1.4. Je presne definovano, co aserce jsou
Doporučuju přečíst si ten dokument, který jste odkazoval.
rozhodne nejsou urcene ke kontrole nejakych invariantu behem prekladu.
To jsem taky nikde nepsal, já jsem psal o vývoji.
Sam asercim fandim, ale napriklad vyse uvadene umisteni aserce tesne pred radek, na kterem pri poruseni aserce ihned dojde k NPE, postrada smysl. … Aserce si precte pouze programator a ten by mel tak jako tak videt, ze na pristim radku dojde k NPE
Předpoklady je nutné do kódu napsat hned, když se píše – až ten jednoduchý kód na dva řádky natáhnete na deset řádků, už nikoho nenapadne assert tam doplňovat. Stejně tak to nikoho nenapadne v okamžiku, kdy přístup přes členskou proměnnou nahradí voláním metody a možnost vyhození NPE přestane být tak zjevná.
6.1.2010 11:55 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Ještě mne k tomu napadla jedna věc – assert v kódu zároveň znamená něco jako komentář „vím o tom, že tahle podmínka musí být splněna“. Takže když budu číst výše uvedený kód bez assertů, budu muset začít hledat, jestli ty hodnoty opravdu nemohou být prázdné, nebo jestli je v tom příslušném kódu chyba, nebo jestli je záměr vyhazovat NPE (a chybí to třeba v dokumentaci). Když je tam assert napsaný, vím, že neřešení prázdných hodnot byl autorův záměr.
6.1.2010 13:36 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Já raději používám komentáře, nikoliv něco jako komentáře :-)
In Ada the typical infinite loop would normally be terminated by detonation.
6.1.2010 15:38 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
Jenže komentář vám nevyhodí za běhu výjimku, když nastane ta situace, která podle assertu nastat nikdy neměla… A neumožní ani žádné jiné strojové zpracování.
6.1.2010 17:02 pht | skóre: 48 | blog: pht
Rozbalit Rozbalit vše Re: JAVA - priklady
Takže když budu číst
a
strojové zpracování
jsou dvě různé věci.

A já pro lidi píšu lidsky a už jsme si ujasnili, že asserty jsou strojově momentálně na prd. A když už mluvíme o strojovém zpracování tak si dovolím ještě dvě poznámky.

Za prvé proboha proč musím do JavaDocu opisovat jména parametrů (případně jejich typy), když to v zápětí píšu do deklarace. Vemte si příklad z perlovského Getopt::Euclid.

Za druhé divil byste se co všechno lze relativně spolehlivě stojove zpracovat. Bylo by stokrát příjemnější kdybych mohl psát "jméno nesmí být null" do komentáře a dostal z toho varování překladače, pokud tam někde budu cpát null, než abych strkal na dvacet míst kódu nějaké kryptogramy a počítač mi je překládal do češtiny.
In Ada the typical infinite loop would normally be terminated by detonation.
7.1.2010 07:22 Filip Jirsák | skóre: 66 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: JAVA - priklady
už jsme si ujasnili, že asserty jsou strojově momentálně na prd
Pokud váš kód nikdy nespouštíte. Pokud jej spouštíte například v testech, můžete spoustu porušení kontraktu odhalit už během testů. A i když se na chybu přijde až během normálního testování, pořád assert pomůže najít skutečné místo vzniku chyby (zatímco když necháte program běžet dál, může někdy spadnout až za dost dlouho, a původní příčinu pak budete dlouho hledat).
7.1.2010 06:11 cronin | skóre: 48
Rozbalit Rozbalit vše Re: JAVA - priklady
Po takmer desatroci programovania v Jave je assert pre mna okrem ineho aj indikator kvality kodu. Zatial co uplnu nepritomnost assertov nehodnotim nijako -- niektori ho proste pausalne nepuzivaju -- zriedkave pouztie assertov v zriedkavych koplikovanych castiach kodu hodnotim ako pozitivnu snahu programatora zaviest prisnejsiu kontrolu seba sameho. Ak je vsak kod prepchaty assertami, vidim to ako varovny signal, ze autor nebol schopny urobit natolko robustny dizajn, aby mu vobec sam doveroval.

MaFy avatar 4.1.2010 17:48 MaFy | skóre: 24 | blog: kecy | Praha
Rozbalit Rozbalit vše Re: JAVA - priklady
V tom programu jsem byl taky. Nevim, kdo to presne zajistuje, ale kantor na prednasky byl divny, ale na cvika jsem mel fajn kantora, to je pravda... Ale ta Java proste nic moc. Mozna to je jen muj nazor, protoze jsem Javu znal jeste predtim, tak me to treba tolik neoslovilo...
Lidé se dělí do 10 skupin. Na ty, co rozumí binárnímu kódu a na ty ostatní...
4.1.2010 20:34 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
to ja musim rict, ze me naopak Java docela zaujala.....ale ono asi hodne zalezi na ucitelich..... rekl bych, ze to byl nejlepsi(a zrejme nejuzitecnejsi) predmet prvniho semestru, ale ukaze se na zkouzce......btw jaka byla zkouzka??a vubec: jake bylo cele studium??nebo stale studujes?? :-)

MaFy avatar 4.1.2010 20:38 MaFy | skóre: 24 | blog: kecy | Praha
Rozbalit Rozbalit vše Re: JAVA - priklady
Nemohu posoudit, protoze jsem nedosel ani prvni semestr.... Nastoupil jsem vloni v zari. No a Javu uz jsem pouzival o rok driv, takze cvika pohoda, matiku jsem daval, a to ostatni celkem nuda - hlavne ta robotika. Roboty ze stavebnice pro deti od osmi let mi uplne nenavozovala pocit vysokoskolaka. Uvazoval jsem o zmene predmetu. Nakonec jsem se rozhodl radikalneji. Nechal jsem to plavat, abych se mohl naplno venovat praci a v zari si to dam kombinovane..
Lidé se dělí do 10 skupin. Na ty, co rozumí binárnímu kódu a na ty ostatní...
4.1.2010 21:18 HANZ
Rozbalit Rozbalit vše Re: JAVA - priklady
Nazdar taky jsem prvním ročníkem na felu a chtěl bych vědět jak jsi se připravoval na zkoušku z prg? já třeba vůbes nevím co josu to metody set a get?
4.1.2010 21:45 Pavel
Rozbalit Rozbalit vše Re: JAVA - priklady
no tak to si asi v pr.... kdyz nevis ani tohle :-D.....copak ste to nedelali na cvicenich(nebo prednaskach???)na jakem si programu??

na druhou stranu take nevim co od toho mam ocekavat:-(.....

ucil sem se z materialu co jsou na eduwebu(je to celkem pekne zpracovane), dale primo od zdroje napr: http://java.sun.com/docs/books/tutorial/ , pak ucebnice Pavla Herouta,.....

na netu je mraky informaci, zdrojaku,,.....

5.1.2010 19:18 Peta
Rozbalit Rozbalit vše Re: JAVA - priklady
Ahoj prosimte mohl by jsi nekam upnout co jsi vytvořil??? moc dík

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.