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 02:20 | Komunita

Mozilla.cz informuje, že program Firefox Test Pilot (zprávička) byl rozšířen o 3 nové experimentální funkce. Jedná se o Page Shot, Min Vid a Tracking Protection. Page Shot je nástroj pro vytváření snímků obrazovky s možností výběru konkrétní oblasti na stránce. Min Vid umožňuje sledování videí ze serverů YouTube nebo Vimeo v malém okně současné s prohlížením jiných webových stránek. Tracking Protection umožňuje zapnout ochrana proti sledování také v běžných oknech.

Ladislav Hagara | Komentářů: 0
včera 20:02 | Komunita

Nadace Raspberry Pi na svém blogu představuje PIXEL (Pi Improved Xwindows Environment, Lightweight), nové výchozí desktopové prostředí pro Raspberry Pi. Prostředí PIXEL je obsaženo již v aktuální verzi 2016-09-23 Raspbianu. Ten nově přichází například také s webovým prohlížečem Chromium, možností vzdáleného grafického přístupu k desktopu pomocí RealVNC nebo emulátorem rozšiřující desky Sense HAT.

Ladislav Hagara | Komentářů: 2
včera 12:34 | Nová verze

Po téměř deseti letech vývoje a testování byl LuaTeX (Wikipedie), program pro počítačovou sazbu TeX rozšířený o skriptovací jazyk Lua, prohlášen za dostatečně stabilní na to, aby mohla být vydána verze 1.0.0. Stalo se tak na 10. ConTeXt Meetingu.

Ladislav Hagara | Komentářů: 3
včera 12:00 | Komunita

Byly zveřejněny videozáznamy přednášek z konference vývojářů "softwaru, který štve méně" suckless conference 2016 konané minulý týden v Hofheimu. Mezi projekty suckless.org patří například dynamický dlaždicový správce oken dwm, emulátor terminálu st, webový prohlížeč surf, dynamické menu dmenu nebo linuxová distribuce sta.li (static linux).

Ladislav Hagara | Komentářů: 2
27.9. 18:12 | Zajímavý článek

Mozilla v diskusní skupině mozilla.dev.security.policy řeší co s certifikačními autoritami WoSign a StartCom. Výsledkem je (zatím) třináctistránkový dokument WoSign and StartCom na Dokumenty Google. V červenci se například provalilo, že služba StartEncrypt od certifikační autority StartCom umožňovala komukoliv automaticky vydat certifikát k prakticky libovolné doméně (zprávička). V srpnu se uživateli GitHubu povedlo získat

… více »
Ladislav Hagara | Komentářů: 7
27.9. 15:00 | Komunita

V arizonském Glendale dnes začíná třídenní konference AstriCon 2016 věnovaná Asterisku. Při té příležitosti byla vydána verze 14.0.0 této svobodné softwarové implementace telefonní ústředny (PBX). Přehled novinek na wiki stránkách.

Ladislav Hagara | Komentářů: 0
27.9. 10:20 | Komunita

Projekt GNU dnes slaví 33 let. Přesně před třiatřiceti lety, 27. září 1983, Richard Stallman oznámil, že se chystá napsat s Unixem kompatibilní operační systém GNU (Gnu's Not Unix).

Ladislav Hagara | Komentářů: 1
26.9. 20:20 | Bezpečnostní upozornění

Byly vydány verze 1.1.0b a 1.0.2j kryptografické knihovny OpenSSL. Dle bezpečnostního upozornění byly opraveny bezpečnostní chyby CVE-2016-6309 (Debian) a CVE-2016-7052 (Debian) způsobené nepříliš povedenou opravou bezpečnostních chyb minulý týden (zprávička).

Ladislav Hagara | Komentářů: 3
26.9. 17:47 | Komunita

Byly zveřejněny videozáznamy přednášek a prezentace (pdf) z konferencí vývojářů LLVM a GNU Tools. Konference proběhly v městečku Hebden Bridge. Jednodenní konference LLVM Cauldron 2016 proběhla 8. září. Od 9. do 11. září probíhala na stejném místě třídenní konference GNU Tools Cauldron 2016.

Ladislav Hagara | Komentářů: 0
26.9. 12:43 | Nová verze

Po téměř 11 měsících vývoje od verze 0.10.0 (zprávička) byla vydána verze 0.11.0 hardwarově nenáročného desktopového prostředí LXQt (Lightweight Qt Desktop Environment) vzniklého sloučením projektů Razor-qt a LXDE (zprávička). Z novinek lze zmínit například pavucontrol-qt, Qt port audio mixéru pavucontrol z projektu PulseAudio. V lxqt-config přibyla možnost nastavování jasu. Vylepšena byla podpora více monitorů.

Ladislav Hagara | Komentářů: 64
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (28%)
 (30%)
 (30%)
 (7%)
 (5%)
 (1%)
Celkem 183 hlasů
 Komentářů: 3, poslední 27.9. 09:40
    Rozcestník
    Reklama

    Scala 03 - další kroky

    7.9.2009 00:12 | Přečteno: 2990× | Výběrový blog | poslední úprava: 7.9.2009 10:30

    Další ze série článků o jazyce Scala. Tento článek je překladem volně přístupné ukázky z knihy Programming in Scala od Martina Oderského. Minulý článek skončil u definice metod.

    Krok 5: Píšeme Scala skripty

    Přestože je Scala navržená pro psaní velkých propramů, je velmi dobře použitelná pro psaní skriptů (jednoduchá sekvence příkazů). Pokud máte Scalu již nainstalovanou, spustit skript je jednoduché:
      //toto ulozte do ahoj.scala
      println("Ahoj svete")
    
    Pak tento soubor lze spustit:
     > scala ahoj.scala
     Ahoj svete
    
    Parametry programu (command line arguments) jsou ve Scala skriptu uložené v array(pole) args. Ve Scale jsou arraye číslované od nuly, stejně jako v Javě, ale položky jsou přistupovány přes kulaté závorky(hranaté v Javě). První parametr programu je tedy arg(0). Příklad:
      //pozdrav podle prvniho parametru, opet ulozte do ahoj.scala
      println("Nazdar "+args(0)+"!")
    
    a spusťte:
      >scala ahoj.scala Pepo
      Ahoj Pepo!
    
    V tomto případě 'Pepo' je parametr, který je předán skriptu a vytištěn na obrazovku.

    Tento skript také obsahuje komentář, Scala stejně jako Java ignoruje vše za //. Toto lze použít na krátké poznámky vysvětlující chod programu. Mimochodem, pokud pracujete na Unixu, Linuxu nebo MacOS můžete spouštět *.scala soubory jako shell skriptu. Toho lze dosáhnout jednoduchým trikem se shellem:

      #!/bin/sh
      exec scala $0 $@
      !#
      // nazdar
      println("Nazdar " + args(0) + "!")
    
    První dva řádky spouštějí vlastní skript a musí být na začátku souboru. Soubor také musí mít nastavený executable bit aby byl spustitelný:
      >chmod +x ahoj.scala
      >./ahoj.scala Pepo
      Nazdar Pepo! 
    

    Krok 6: Cykly s while, a if podmínky.

    Cykly ve Scale se dost liší od Javy a C like jazyků, ale to bude vysvětleno až v dalších kapitolách. Jednoduchý while cyklus funguje ve Scale podobně jako v Javě:
      var i = 0
      while (i < args.length) {
        println(args(i))
        i += 1
      }
    
    Tento skript začíná definicí promněné: var i = 0. Typová inference (odvozování) proměnné automaticky přiřadí typ scala.Int. While konstrukce na další řádce opakuje cyklus dokud platí podmínka, v tomto případě zda je promněnná i menší než počet programových parametrů (i < args.length). V cyklu je blok (část kódu mezi {} závorkami) opakovan dokud platí podmínka. První část bloku vypíše aktuální programový parametr, druhá část bloku inkrementuje proměnou i.

    A po spuštění tohoto skriptu:

      >scala test.scala Ahoj, tady Pepa z Depa
      Ahoj,
      tady 
      Pepa
      z 
      Depa
    
    Pokud nemáte rádi Pepu, je možné ho nahradit za někoho upřímnějšího
      var i = 0
      while (i < args.length) {
        if(args(i)=="Pepa") println("Standa")
        else println(args(i))
        i += 1
      }
    
    A výsledek:
    
      >scala test.scala Ahoj, tady Pepa z Depa
      Ahoj,
      tady 
      Standa
      z 
      Depa
    
    Ve Scale stejně jako v Javě musí být podmínky v kulatých závorkách. Dále pokud blok v if nebo while má více než jeden výraz, musí být uzavřen v kudrnatých závorkách. Drobný rozdíl je že if se doporučuje psát na jedné řádce.

    Další rozdíl je že ve Scale je možné metody, které nemají parametry, volat bez závorek. println() je stejné jako println. Obecné doporučení je psát u všech metod závorky, pouze gettery psát bez závorek.

    Jedním z přínosů Scaly je že má stručnost skriptovacích jazyků(Ruby nebo Pythom), ale zároveň má statické typování ukecanějších jazyků jako Java nebo C++. Stručnost Scaly pochází z typového odvozování, ale také z funkcionálního stylu.

    Krok 7. Funkcionální foreach a for.

    Možná o tom nevíte, ale předchozí příklady byly v imperativní stylu programování. Tento styl obsahuje podmínky, cykly a všechny ty věci co obvykle používané v Javě, C++ a C. Scala umožňuje také funkcionálnější programování. Vlastně jeden z cílů Scaly je umožnit plynulý přechod z imperativního do funkcionálního programování.

    Jednou z charakteristik funkcionálního programování je že funkce lze přiřadit jako proměnné a toto je 100% pravda ve Scale. Například trochu lepší cesta jak vypsat programové parametry je tato:

      args.foreach(arg => println(arg))
    
    V tomto případě voláme foreach metodu na proměnné args. Foreach metodě je předána annonymní funkce (nemá vlastní jméno, stejné jako anonymní třída v Javě), která bere jeden parametr s názvem arg. Kód uvnitř anonymní funkce pak vytiskne proměnnou arg.

    Předchozí kód může vypadat jako closures z dynamických jazyků. Ve skutečnosti je ale plně strongly typed a odpovídá spíše anonymní třídě v Javě (na úrovni bytecode je to anonymní třída). Typové odvozování zde funguje skvěle, takže dost ušetří psaní. Bez něj by bylo nutné definovat typ proměnné arg:

      args.foreach((arg: String) => println(arg))
    
    Je ještě třetí možnost jak tento kód zapsat. Ve Scale funguje něco jako odvozování argumentů. Pokud anonymní funkce volá pouze metodu s jedním argumentem, jsou argumenty funkce doplněny aby odpovídaly argumentům metody. Je možné tedy tedy napsat:
      args.foreach(println)
    
    Pro shrnutí: syntaxe anonymní metody je seznam parametrů v závorkách, následovaný šipkou (rovnítko a větší) a tělem funkce. Viz graf:

    Možná se ptáte jestli Scala má for cyklus stejně jako Java a ostatní imperativní jazyky. Krátká odpověď je že ne, dlouhá je že má funkcionální for, bez break continue apod. Plně to bude vysvětleno v dalších kapitolách. For cyklus v různých jazycích:

      //Scala
      for (arg <- args)
        println(arg)
      //Java
      for (String arg : args) {     // Remember, this is Java, not Scala
        System.out.println(arg);
      } 
      //ruby 
      for arg in ARGV   # Remember, this is Ruby, not Scala
        puts arg
      end
    

    Krok 8: Pole, definice typu a speciální funkce.

    Kromě toho že je funkcionalní, Scala je také objektově orientovaná. je tedy možné definovat abstraktní třídy jako typy a konkrétní objekty jako proměnné. Tento kód například vytvoří a vytiskne String.
      val s = new String("Nazdar Pepo!")
      println(s)
    
    V tomto případě je nový String vytvořen s parametrem "Nazdar Pepo!", který určuje jeho hodnotu. Při parametrizaci lze ale zajít ještě dál, například při vytváření arraye lze kromě počátečních hodnot definovat co array bude obsahovat. Tedy parametrizovat typ arraye.
      val nazdar = new Array[String](3)
      nazdar(0) = "Nazdar"
      nazdar(1) = ", "
      nazdar(2) = "Pepo!"
      for (i <- 0 to 2)
        print(nazdar(i))
    
    V tomto případě vytváříme array, který bere dva parametry. První je typový a určuje co Array bude obsahovat [String], druhý pak určuje počáteční délku. Ve Scale je všechno co se týče typů ve hranatých závorkách [].

    Konstrukce nazdar(0) = "Nazdar" může vypadat trochu divně. Jedná se o speciální případ, ne ve třídě Array, ale mnohem obecnější. Pokud je instance proměnné volána bez funkce, pouze se závorkami a argumenty, Scala to přetransformuje na volání metody apply. Pokud je navíc této funkci přiřazená hodnota, je volána metoda update.

    Další speciální případ je for (i <- 0 to 2). V tomto případě je definován cyklus s iterací od 0 do 2. Scala má třídu pro intervaly, ale nemá operátor 'to' pro jejich definici. Scala vlastně nemá operátory vůbec. 'to' je metoda na třídě int, která bere druhé číslo a vrací interval mezi těmito čísly. for (i <- 0 to 2) je pak přeložen jako for (i <- 0.to(2)).

    Scala nemá ani klasické aritmetické operátory jako +, -, *, nebo /. Vše je založeno na volání příslušných metod (s optimalizacemi překladače, na úrovni bytecode jsou čísla počítány stejně). Scala je velmi liberální v názvu metod, takže + je ve skutečnosti metoda ve třídě int. 1.+(2) je legální kód.

    Předchozí kód je pak ve skutečnosti přeložen jako:

      val nazdar = new Array[String](3)
      nazdar.update(0, "Nazdar")
      nazdar.update(1, ", ")
      nazdar.update(2, "Pepo!")
      for (i <- 0.to(2))
        print(nazdar.apply(i))
    

           

    Hodnocení: 100 %

            špatnédobré        

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

    Komentáře

    Vložit další komentář

    Fluttershy, yay! avatar 7.9.2009 07:33 Fluttershy, yay! | skóre: 81 | blog:
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Možná o tom nevíte, ale předchozí příklady imperativní styl programování.

    Já nevědět, co to znamenat mít.

    7.9.2009 09:31 Trained.Monkey | skóre: 12 | blog: monkey
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Opraveno
    vlastikroot avatar 7.9.2009 16:47 vlastikroot | skóre: 24 | blog: vlastikovo | Milevsko
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Ten obrazek je sice pekne pruhlednej, ale ja tu na tmavem pozadi nevidim zhola nic. Nebylo by pristupnejsi udelat obrazek spis s pozadim defaultni barvy pozadi na abc (bez pruhlednosti)?
    Sg1-game | We will destroys the Christian's legion ... and the cross, will be inverted | IP 80.188.182.6
    7.9.2009 17:16 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    svg:currentColor :D
    7.9.2009 22:23 Jirka P
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Sice to může vypadat jako hnidopišství, ale to není metoda scala.Int
    xsubway avatar 15.9.2009 14:27 xsubway | skóre: 13 | blog: litera_scripta_manet
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky

    Díky, ale stále mi chyběl příklad, jak použít scalu jako script a jak se vlastně předávají parametry. Takže například takto:

    #!/bin/sh
    exec scala -savecompiled "$0" "$@"
    !#

    object Parser {

      def main(args: Array[String]) {

        for (s <- args) {
            println("> " + s);
        }

      }

    }


    Parser.main(args.toArray)

     

    15.9.2009 17:58 petr_p | skóre: 59 | blog: pb
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Jak je takové skriptování rychlé, když to startuje JVM?
    xsubway avatar 16.9.2009 21:45 xsubway | skóre: 13 | blog: litera_scripta_manet
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky

    ... při prvním spuštění to není nic moc, ale díky přepínači -savecompiled se někde vytvoří soubor .class a příští spuštění je již "rychlé". Samozřejmě, že na jednoduché scripty bude možná rychlejší scriptování třeba i bashi, ale pokud script dělá složité operace, tak už překlad do bytecode bude znát. Subjektivně: mě to přijde dostatečně rychlé.

    Na tomto způsobu je hlavně fajn, že je vše v jednom spustitelném souboru, a uživatel třeba ani neví, že se uvnitř spouští scala/java.

    ps: porovnání rychlosti java/scala/groovy v jednom umělém příkladu (zde se porovnává běh nikoliv pouze start)

    xsubway avatar 16.9.2009 21:57 xsubway | skóre: 13 | blog: litera_scripta_manet
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky

    příklad prvního a druhého (dalšího) spuštění scriptu

    $ time ./4.scala 

    real 0m1.766s
    user 0m0.252s
    sys 0m0.040s
     
    $ time ./4.scala 

    real 0m0.271s
    user 0m0.196s
    sys 0m0.036s
     
    22.9.2010 14:41 jirazy
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Proč ten script psát tak složitě? Takhle to jde přímo, bez triků:

    #!/opt/scala/bin/scala -savecompiled
    !#
    args.foreach(println)
    22.12.2010 11:52 Tonda B.
    Rozbalit Rozbalit vše Re: Scala 03 - další kroky
    Btw na http://programming-scala.labs.oreilly.com/ byla uvolnena k prohlizeni kniha "Programming Scala". Krom toho mame v planu rozjet Scala wiki v cestine na zaklade teto: http://naildrivin5.com/scalatour . Kdyby se chtel nekdo pridat, necht mi napise na hacxcz zavinac gmail tecka com. Jinak jsem pro podporu ceske Scala komunity zalozil IRC kanal #scala-cz (irc.freenode.net) - jste vitani :-).

    Založit nové vláknoNahoru

    ISSN 1214-1267   Powered by Hosting 90 Server hosting
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.