Kategorie: Programování

  • Java tip: For není fór a split není řiť

    For()

    Už jste se někdy přistihli při psaní tohoto cyklu?

    for(int i = 1; i < something; i++) {
        //Do something
    }
    

    Pak vězte, že v (dle mého názoru) opravdu velkém počtu případů je to znamení, že je něco špatně. Buď máte špatný design, anebo to jde celé udělat jinak a mnohem lépe. Ne vždy se tomu člověk vyhne, ale čím častěji, tím líp.

    Split()

    Další věcí je metoda String.split(). Použili jsme ji asi všichni, ale přiznejte se, kolik z vás ji opakovaně používá na parsování Stringu ve smyslu, že pak použijete pouze něco z výsledné množiny? Na to mám pouze jednu odpověď: Naučte se regulární výrazy a vyzkoušejte Rojo 🙂.

    NějakýInterfaceImpl

    Původně jsem se domníval, že je to spíše věc ojedinělá, ale nedávno jsem v praxi narazil již na druhého člověka, který, jak se zdá, má až chorobnou touhu vytvářet interfacy 🙂 . Jedná se především o DAO třídy. Moje představa o použití interfacu z hlediska designu je taková:

    1. Očekává se, že něco může mít vícero implementací
    2. Tyto implementace jsou volány „přes jediné API“ / nebo též „stejným způsobem“

    Pokud si tyto dvě otázky položím v případě DAO tříd, tak jsem názoru, že každé DAO má mít vždy pouze jednu jedinou implementaci, a i kdybych připustil, že by někdo někdy chtěl mít pro 1 DAO implementací více, tím hůře si dokážu představit, proč by je chtěl volat stejným způsobem? 🙂 S tímto i úzce souvisí názvosloví končící na Impl, kde vám hned vysvětlím, proč ho nemám rád. Samotná neurčitost názvu na mě působí dojmem, že implementace daného interfacu je skutečně pouze jedna, čímž smysl interfacu samotného vlastně popírá, jinak by se přeci jmenovala nějak smysluplně, nebo ne? Např. měl-li bych interface Service, čekal bych implementace jako FileService, NetworkService, ale rozhodně ne ServiceImpl 🙂 . Z tohoto mi plynou hned dvě ponaučení:

    1. Přemýšlejte nad názvoslovím, protože již ono samotné může odhalit chybu ve vašem myšlení
    2. Nedržte se striktně naučených pouček o čistém kódu, ale běžte více do hloubky daného problému a, zkrátka, přemýšlejte 🙂 . Aneb jak již jednou někdo řekl: „Všechny generalizace jsou mylné, včetně této“.

    PS: Další důvod proč nedělat interfacy tam, kde jsou zjevně zbytečné, je ten, že když si na některou metodu takového objektu v Eclipsu se stiskem CTRL kliknu, nedostanu se přímo do kódu, ale do interfacu samotného, což je strašně otravné 🙂 .

  • Rojo benchmark s JMH

    Zrovna nám nedávno vyšlo Rojo ve verzi 1.0.3 a já jsem si říkal, jak je na tom tato knihovna s výkonem. Rozhodl jsem se ji tedy trochu otestovat a proměřit pomocí JMH a i přesto, že se mi způsob vytváření nového benchmarku přes maven archetyp příliš nepozdával, tak se mi to nakonec rozjet podařilo 🙂 .

  • Nejšikovnější způsob, jak v Javě inicializovat pole

    Věděli jste, že se to dá udělat i takto?

    Object[] objects = {1, "2", 3.5f};
    String[] strings = {"one", "two", "three"};
    int[] ints = {1, 2, 3};
    

    Já teda ne … až dodnes :-). Ale krom toho: pole nepoužívejte – jen když musíte ;-).

  • Rojo: Java knihovna pro mapování regulárních výrazů na POJO objekty

    Možná si někteří z vás ještě vzpomenou, jak jsem kdysi psal o „mikro-knihovně“ Re. Čas i myšlenky trochu uzrály, a tak tu máme nástupce, který jde ještě o krok dál. Mám zároveň radost, protože je to má první knihovna, která je dostupná  i přímo z centrálního Maven repozitáře! Pojďme mrknout na to, co umí …

  • JavaSlang a srovnání výkonu s java.util.stream

    Už je to nějaký pátek, co jsem objevil knihovnu JavaSlang, která do Javy přináší trochu funkcionálního paradigmatu a dále taky pohodlnější způsob, jak pracovat se streamy. Říkal jsem si, jestli by byl dobrý nápad tuto knihovnu použít v některých našich projektech a tak jsem se rozhodl udělat benchmark pro verzi 2.0.0-RC4, jak je na tom s rychlostí oproti standardnímu Stream API v Javě 8.

  • Java tipy a triky: Porovnávání řetězce se Stringovou proměnnou

    Když jsem zhruba před rokem nastoupil do nového zaměstnání, objevil jsem při brouzdání kódem jednoho z našich větších projektů zajímavou fintu. Ti zkušenější z vás to už asi budou znát, ale kdo po zkušenostech teprve touží, nechť se společně se mnou podívá na tento krátký příspěvek.

  • Regulární výrazy v Javě s mikro-knihovnou Re

    EDIT 10.12.2016: Projekt Re jsem již ukončil a smazal ze svého GitHubu, jelikož ho nyní plně nahradilo Rojo.

    S nástupem Javy 8 se nám sice otevřely nové možnosti s lambda funkcemi, ale standardní třída pro regulární výrazy Pattern zůstala stejná. A tak jsem si řekl, že by bylo fajn, kdybychom v Javě mohli psát regulární výrazy se stejnou lehkostí, jako např. s pomocí modulu re v Pythonu. Na internetu jsem hledal podobné knihovny, které by již toto umožňovaly, ale nic se mi nepodařilo najít (čímž nevylučuji, že jsem hledal špatně 🙂 ). Pojďme se tedy na to podívat trochu blíže …

  • Řekni mi něco

    Podařilo se mi dokončit jednoduchou, ale dle mého názoru mou nejepičtější webovou aplikaci :-). Sice jsem málem u toho Javascriptu propotil i duši, ale nakonec se to povedlo! Nezapomeňte si zapnout mikrofon a … řekněte mi něco! 🙂

    http://reknineco.herokuapp.com/

  • Generátor vět

    Pro svou zajímavost jsem si v Pythonu napsal skript, který si načte všechny slova z Ekumenického překladu Bible, vytvoří pravděpodobnostní mapu jak jedno na druhé navazuje a pak generuje věty o 5 slovech. Vybral jsem některé zajímavé/zvláštní:

    • Devoxx 2015 – Polsko / Kraków

      Konferenci máme za sebou a centrum Krakowa bylo taky celkem fajn. Lidé tam hodně běhají, jezdí na kole, kolečkových bruslích, občas i na segwayi a dále lze potkat i kočáry s koňským spřežením. Díky tomu je v centru mnohem lepší vzduch než poblíž hlavních motoristických tahů. Pak různí kejklíři, pouliční hudebníci, nabízeči letáků, slečna lákající velmi milým hlasem do strip klubu, free hugs, holubi, kebab, zmrzlina, prasátko “I love tips”, suvenýry a velká různorodost národností (především na hotelu). A ještě nesmím zapomenout i na pěkné holky :-). Vždy se mi líbila ta typická polská módní výstřednost.