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í
×
    dnes 18:00 | Nová verze

    Byla vydána (Mastodon, 𝕏) nová stabilní verze 2.0 otevřeného operačního systému pro chytré hodinky AsteroidOS (Wikipedie). Přehled novinek v oznámení o vydání a na YouTube.

    Ladislav Hagara | Komentářů: 1
    dnes 16:00 | Zajímavý software

    WoWee je open-source klient pro MMORPG hru World of Warcraft, kompatibilní se základní verzí a rozšířeními The Burning Crusade a Wrath of the Lich King. Klient je napsaný v C++ a využívá vlastní OpenGL renderer, pro provoz vyžaduje modely, grafiku, hudbu, zvuky a další assety z originální kopie hry od Blizzardu. Zdrojový kód je na GitHubu, dostupný pod licencí MIT.

    NUKE GAZA! 🎆 | Komentářů: 4
    dnes 13:33 | IT novinky

    Byl představen ICT Supply Chain Security Toolbox, společný nezávazný rámec EU pro posuzování a snižování kybernetických bezpečnostních rizik v ICT dodavatelských řetězcích. Toolbox identifikuje možné rizikové scénáře ovlivňující ICT dodavatelské řetězce a na jejich podkladě nabízí koordinovaná doporučení k hodnocení a mitigaci rizik. Doporučení se dotýkají mj. podpory multi-vendor strategií a snižování závislostí na vysoce

    … více »
    Ladislav Hagara | Komentářů: 4
    dnes 12:22 | Humor

    Nizozemský ministr obrany Gijs Tuinman prohlásil, že je možné stíhací letouny F-35 'jailbreaknout stejně jako iPhony', tedy upravit jejich software bez souhlasu USA nebo spolupráce s výrobcem Lockheed Martin. Tento výrok zazněl v rozhovoru na BNR Nieuwsradio, kde Tuinman naznačil, že evropské země by mohly potřebovat větší nezávislost na americké technologii. Jak by bylo jailbreak možné technicky provést pan ministr nijak nespecifikoval, nicméně je známé, že izraelské letectvo ve svých modifikovaných stíhačkách F-35 používá vlastní software.

    NUKE GAZA! 🎆 | Komentářů: 15
    dnes 06:00 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 162 (pdf).

    Ladislav Hagara | Komentářů: 0
    dnes 05:55 | IT novinky

    Sdružení CZ.NIC, správce české národní domény, zveřejnilo Domain Report za rok 2025 s klíčovými daty o vývoji domény .CZ. Na konci roku 2025 bylo v registru české národní domény celkem 1 515 860 s koncovkou .CZ. Průměrně bylo měsíčně zaregistrováno 16 222 domén, přičemž nejvíce registrací proběhlo v lednu (18 722) a nejméně pak v červnu (14 559). Podíl domén zabezpečených pomocí technologie DNSSEC se po několika letech stagnace výrazně

    … více »
    Ladislav Hagara | Komentářů: 9
    včera 18:33 | IT novinky

    Google představil telefon Pixel 10a. S funkci Satelitní SOS, která vás spojí se záchrannými složkami i v místech bez signálu Wi-Fi nebo mobilní sítě. Cena telefonu je od 13 290 Kč.

    Ladislav Hagara | Komentářů: 7
    včera 16:22 | Komunita

    Byl publikován přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Fedora 43 Asahi Remix s KDE Plasma už funguje na M3. Zatím ale bez GPU akcelerace. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 0
    včera 14:00 | IT novinky

    Red Hat představil nový nástroj Digital Sovereignty Readiness Assessment (GitHub), který organizacím umožní vyhodnotit jejich aktuální schopnosti v oblasti digitální suverenity a nastavit strategii pro nezávislé a bezpečné řízení IT prostředí.

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

    BarraCUDA je neoficiální open-source CUDA kompilátor, ale pro grafické karty AMD (CUDA je proprietární technologie společnosti NVIDIA). BarraCUDA dokáže přeložit zdrojové *.cu soubory (prakticky C/C++) přímo do strojového kódu mikroarchitektury GFX11 a vytvořit tak ELF *.hsaco binární soubory, spustitelné na grafické kartě AMD. Zdrojový kód (převážně C99) je k dispozici na GitHubu, pod licencí Apache-2.0.

    NUKE GAZA! 🎆 | Komentářů: 1
    Které desktopové prostředí na Linuxu používáte?
     (18%)
     (6%)
     (0%)
     (11%)
     (27%)
     (3%)
     (5%)
     (2%)
     (12%)
     (27%)
    Celkem 908 hlasů
     Komentářů: 25, poslední 3.2. 19:50
    Rozcestník

    Naučte mě Perl 6, III. Zkracování kódu

    17.4.2016 22:18 | Přečteno: 1876× | Perl | Výběrový blog | poslední úprava: 18.4.2016 11:21

    V tomto díle si ukážeme jak Perl 6 umožňuje zkracovat zápis. Konkrétně se zmíníme o zástupných proměnných, o whatever kódu a zástupnému znaku whatever * a nakonec o topic proměnné $_ a jejím nepsání.

    III. Zkracování kódu

    Perl vždy umožňoval zkracovat a popř. vynechávat části kódu, co při správném využití může vést nejen k přehlednějšímu kódu, ale i efektivnějšímu. Perl 6 navíc mimo jiné přináší zástupný znak whatever, pomocí kterého dokážeme řešit některé problémy, velmi elegantně.

    Zástupné proměnné v bloku

    Blok je v Perlu 6 část kódu, který ohraničují složené závorky. Objevuje se např. při zápisu řídících struktur, ale lze pomocí něho definovat i podprogram, předávat ho jako parametr atd. Standardní zápis bloku vypadá např. následovně
      -> $a, @b, :$x, :$y, *@positional, *%named { dd $a, $b, $x, $y, @positional, %named }
    
    kde $a, @b jsou poziční parametry a @positional je slurp pole ostatních pozičních parametrů a podobně $x, $y jsou jmenné parametry a %named je slurp hash ostatních jmených parametrů.

    Tento blok můžeme definovat, ale i pomocí zástupných proměnných
      { dd $^a, @^b, $:x, $:y, @_, %_ }
      #
    
    u pozičních parametrů záleží na lexikografickém uspořádání.

    Ukažme několik příkladů:
    { dd ($^a, @^b, $:x, $:y, @_, %_) }(
        1, (2, 3), 4, :32x, :12z, :1y
                                     
    );      #(1, (2, 3), 32, 1, [4], {:z(12)})         
    say (^5)».&{ $^a + 1 };         #(1 2 3 4 5) — voláme podpogram jako metodu, pamatujete první kapitolu
    say (^5).map: { $^a + 1 };      #(1 2 3 4 5) — přibližně totéž co výše
                                               
    for (^6) {                      #0 2 1          
        say "$^a $^c $^b";          #3 5 4          
    };                                              
    
    for (<a b c> Z ^3+1).flat {     #(1 a)
        say ($^number, $^letter)    #(2 b) — number je lexikograficky větší než letter 
    };                              #(3 c)
    
    Všimněte si jak for předá počet hodnot, podle toho kolik je v bloku zástupných (pozičních) parametrů.

    Zástupný znak (whatever) *

    V některých případech lze použít tzv. whatever kód, kde namístě parametrů uvedeme znak *.

    Příklady:
      say ( *.chars + * )("ahoj", 2);     #6 
    
      my &multiply_three_numbers = * * * * *;   #1. 3. a 5. * jsou parametry 
      say multiply_three_numbers 2, 3, 2;  #12  #2. a 4. * je binární operátor násobení 
    
      say (^5)».&( * + 1 );                #(1 2 3 4 5) — kulaté závorky místo hranatých
      say (^5).map: * + 1 ;                #(1 2 3 4 5) — zápis map bez závorek 
      say (^5).&( ** + 1 );                #(1 2 3 4 5) — ** je tzv. hyperwhatever 
    
    Hvězdičku můžeme použít jako zástupný znak i v jiných případech, většinou když chceme něco bez omezení nebo ve významu co možná nejvíc.

    Některé příklady využití whatever:
      my  @matrix = ( (1, 2, 3), ('a', 'b', 'c'), ('x', 'y', 'z') );
      say @matrix[*];          #((1 2 3) (a b c) (x y z))
      say @matrix[*-1;*];      #(x y z) — poslední řádek
      say @matrix[*;2];        #(3 c z) — druhý sloupec
      
      my  @e=@matrix[*;*];        
      say @e[*];                  #(1 2 3 a b c x y z)
      say @e[2 .. *];             #(3 a b c x y z)
      say @e[0 .. *-4];           #(1 2 3 a b c)
      say @e.pick(*);             #(3 x c y a z 1 b 2) — náhodné pořadí
      
      for 21 .. * Z~ '×' xx * Z~ @e {        #27×x
          say $^a if $^a ~~ '27×x' ff *;     #28×y
      }                                      #29×z
    

    Topic proměnná $_

    Opravdovou třešničkou na dortu je už z Perlu 5 dobře známá topic proměnná $_. Topic proměnná je zapisovatelná. Používají ji různé příkazy a často není potřeba ani psát. Především pro každou metodu jde zapsat .metoda jako zkrácený zápis pro $_.metoda, for a given nastavují $_. Topic proměnnou lze použít jako zástupnou proměnou v bloku. when porovnává s touto proměnou, s/// resp. m// implicitně nahrazuje resp. hledá v této proměnné atd. Raději místo dalšího vypisování uvedu pár příkladů:
      $_="ahoj";
      say .chars; 
      say  ( $OUTER::_, $_ for ^2 ); #((ahoj 0) (ahoj 1)) — tady nelze použít $^a před for není blok 
      s/aho/čau /;
      .say;                 #čau j 
      
      my ( $a, $b, $c ) = 0, 1, 2;
      for  $a, $b, $c {                 #0
          say .++;                      #1
      };                                #2
      say "$a $b $c";                   #1 2 3
      
      my @a = < abba kolo oko vede >;
      say grep {  True when .flip }, @a;    #(abba oko)
    
      for 21 .. * Z~ '×' xx * Z~ @e {        #27×x — srovnejte s předešlou kapitolou
          .say if '27×x' ff *;               #28×y
      }                                      #29×z
    
      my @b = < ahoj jak se vede >;
      say @b.first({ .=chop; .chars > 2 });  #s
      say @b;                                #[aho ja s vede]
    

    Závěr

    Ukázali jsme některé způsoby jak v si Perlu 6 usnadnit práci a psaní kódu. Ze začátku se to může zdát sice trochu matoucí, ale osvojení těchto technik se nám později bohatě oplatí. Samozřejmě jako u všeho podobného je to dobrý sluha, ale zlý pán. Jak je to ze zkracováním a vynecháváním psaní části kódu v jiných jazycích a je některý zkrácený zápis, který máte oblíbený, nebo naopak považujete za příliš matoucí?        

    Hodnocení: 75 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    Bedňa avatar 17.4.2016 22:44 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    V ďalšom diely by neškodilo nejaké hlasovanie, kto píše web v Perly. Môj prvý web v minulom tisícročí som napísal v Perly, len vtedy s tým na hostingoch boli problémy.
    KERNEL ULTRAS video channel >>>
    wamba avatar 17.4.2016 23:09 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Možná by bylo nejlepší, kdyby se ti, co píši web v Perlu, vyjádřili přímo v tomto vlákně. Anketa je dost nevypovídající. Co se týká mě, tak jsem sice pár webů v Perlu napsal, ale byli to spíš jen experimenty. Aktuálně, žádný mnou napsaný web (i díky tomu, že si neplatím žádný hosting) není přístupný.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    Bedňa avatar 18.4.2016 21:40 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    vyjádřili přímo v tomto vlákně
    To by platilo tak pred rokmi, dnes musíš ľudí dokopať, aby mali jednoduchú možnosť voľby :)

    Je pravda, že aj ja som migroval kvôli jednoduchosti na PHP, pretože to fungovalo Out of the box a ostatné jazyky mali úplne kulové, teda jediné naozaj použiteľné boli len Perl, PHP a mne ostatné jazyky prídu aj dnes viac náročné na spojazdnenie a správnu konfiguráciu.
    KERNEL ULTRAS video channel >>>
    18.4.2016 08:16 miluju tě!
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Obávám se, že Perl nikdo nepoužívá.
    18.4.2016 10:33 Mirek
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    V Perlu mám napsanou dost klíčovou utilitu pro synchronizaci úloh. Je to ideální pro heterogenní prostředí, kdy třeba vyvíjíte na Linuxu, ale musí to běžet na nějakým komerčním UNIXu. Dík za články, ale přechod na Perl 6 nechystám :-)
    21.4.2016 04:11 ChronicPain | blog: chronicPain
    Rozbalit Rozbalit vše Nemam problem prijmout st...
    Nemam problem prijmout stredoskolaka na pomerne financne zajimavou pozici, kdyz vidim, ze ma o svuj obor zajem a ze o svem oboru vi kolikrat vice nez uchazeci, kteri sice maji onen statni bc titul, ale pri tom o svem oboru v zivote nic neprecetli a krome naucenych statnich skript nedisponuji relevantnimi znalostmi. Vase nazory jsou jen dukazem toho, ze soucasna spolecnost ma mozek dokonale vymyty socialistickou propagandou (slabym je treba pomahat, zamestnavatele vas vykoristuji, musite v praci intrikovat pro zachovani mista, je treba donaset na druhe, a dalsi veci co jste predvedl) a jiz si nedokaze predstavit, jake by to bylo na svobodnem trhu.
    http://www.klaus.sk/ – energeticky úsporné vykurovacie systémy
    pavlix avatar 21.4.2016 07:57 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Nemam problem prijmout st...
    Někteří musejí dokonce na tu „socialistickou“ propagandu každý rok udělat v rámci zaměstnání e-learningový kurz. :)
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    18.4.2016 12:59 alkoholik | skóre: 40 | blog: Alkoholik
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Perl nahodou pouzivame docela dost. Je to pomerne slusny filtr na "takyprogramatory".
    ;)
    pavlix avatar 18.4.2016 13:05 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    To věřím, zkusmo jsem si v něm napsal generátor statického webu, a bylo to jako se snažit domluvit španělsky.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    27.4.2016 10:14 unavensluncem
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Ahoj, dovolim se nesouhlasit. Perl se pouziva. Z tech hodne znamych firem zminim booking.com, duckduckgo a cPanel

    jinak obecne na tema 'zivost' perlu jsme se vyjadrili v tomhle techtalku
    18.4.2016 13:25 jiri.v
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    To vybírání sloupce z matice je moc hezké. Jinak by se ale tyto featury měly používat s rozumem, tj. jen tam, kde to přirozeně zapadne do logiky věci. Ne se je pokoušet napasovat všude jen proto, že to jde. Kód by se neměl snažit používat větší expresivitu než přirozená logika. Ze zápisu by vždycky mělo být pokud možno na první pohled jasné, co dělá. Radši si v perlu napíšu o nějaký ten řádek víc, než aby to po mně někdo (já) musel za měsíc luštit.
    19.4.2016 17:16 Kooala
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Nenapsal jste ten serial na linuxsoftu? Jestli ano, tak velke diky, byl to prvni zdroj, z ktereho jsem se Perl ucil, a rekl bych, ze mi dal docela solidni zaklady.

    Jinak musim rict, ze my &multiply_three_numbers = * * * * *; dava uplne nove moznosti pro opravdu poradne obfuscovany kod. Nechapu, kdo mohl neco takoveho vymyslet. Funkcionalita to je zajimava, ale mohli pouzit aspon nejaky jiny znak.
    wamba avatar 20.4.2016 15:42 wamba | skóre: 38 | blog: wamba
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Tak musí se s * opatrně, &multiply_three_numbers jsem uvedl jako zajímavost. Někde mi, především u jednoduchých map, grep, … , připadá ten zápis přirozený .grep: * > 3;, .sort: *.chars; atd. A nebál bych se ani čitelnosti u něčeho takového .map: * * 1.328;.
    This would have been so hard to fix when you don't know that there is in fact an easy fix.
    David Watzke avatar 24.4.2016 10:29 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Tenhle kód bych chtěl po někom dostat na údržbu :-D
    for 21 .. * Z~ '×' xx * Z~ @e {        #27×x
        say $^a if $^a ~~ '27×x' ff *;     #28×y
    } 
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    Bedňa avatar 25.4.2016 00:07 Bedňa | skóre: 34 | blog: Žumpa | Horňany
    Rozbalit Rozbalit vše Re: Naučte mě Perl 6, III. Zkracování kódu
    Tak v PERLy sa dá písať skoro na úrovni inštrukcií a je okolo toho fakt veľa príkladov.

    Ale však "oneline" súťaží aj v iných jazykoch dosť ale neviem prečo práve z PERLu si robia všetci prdel :)
    KERNEL ULTRAS video channel >>>

    Založit nové vláknoNahoru

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