LINUXSOFT.cz Přeskoč levou lištu
Uživatel: Heslo:  
   CZUKPL

> Vala: hello world a trochu té praktiky

Minulý, první díl byl spíše přehlídkou jazyka Vala. Dnes budeme více praktičtí. Vytvoříme si jednoduchou ukázkovou aplikaci, podíváme se na konvenci psaní programu, nějaké ty základní prostředky (takové STL) a samozřejmě budeme kompilovat.

9.9.2013 00:00 | Ondřej Tůma | Články autora | přečteno 4285×

Hello world !

A začneme hezky zostra, ať to má trochu šťávy. Nejjednodušší a nejznámější aplikace hello world, tedy ahoj světe by mohla vypadat třeba takto:

void main(){
	stdout.printf("Hello world!\n");
}

To by byla ale docela nuda, a přeci jen, funkce main by měla odpovídat nějakým standardům, tedy rozšíříme:

int main(string[] args) {
    stdout.printf("Hello world!\n");
    stdout.printf("You have %d args:\n", args.length);

    foreach (string arg in args) {
        stdout.printf(@"\targ: $arg\n");	// varianta 1
        stdout.printf("\targ: %s\n", arg);	// varianta 2
    }

    return 0;
}
Soubor hello_world.vala.

Tento jednoduchý příklad nám ukazuje hned několik typických přístupů. Hlavní funkce main vrací číslo typu int a přijímá pole stringů. Pole stringů lze iterovat použitím slova foreach. Zápis je podobný C++, konec konců stejně jako v C++ je uveden i zápis pole stringů. Na konci každého příkazu je uveden středník. Protože je uveden návratový typ funkce, je nutné funkci ukončit vrácením hodnoty daného typu.

Stdout je statický objekt třídy FileStream, jenž mimo jiných obsahuje i metodu printf. Metoda printf je totožná s fprintf z céčkového stdio.h. Vedle stdout je možno použít i stdin, nebo stderr. Jak je vidět na třetím řádku, pole stringů obsahuje vlastnost length.

A konečně šestý a sedmý řádek názorně ukazuje, jak je možné dobrat se dvojí cestou k jednomu výsledku. Pravdou samozřejmě je, že použití druhé, pro jazyk C typické varianty je o něco méně náročnější na výsledný C kód. Ovšem co je optimálnější pro výsledný assembler, resp. binárku jsem nezkoumal.

Kompilace snadno a rychle

Jak jsem v minulém díle naznačil, kompilátor valac, jakožto zatím jediný kompilátor jazyka Vala, umožňuje kompilaci různým způsobem. Ten nejjednodušší způsob je prostě zavolat kompilátor s názvem zdrojového souboru.

$~ valac hello_world.vala

Kompilátor soubor přímo zkompiluje do výsledné binární podoby. Spustitelný soubor se nečekaně jmenuje hello_world. Kompilátor má samozřejmě mnoho různých voleb, k některým se teprve dostaneme, již nyní by se hodilo prozradit alespoň některé.

-?, --helpvypíše nápovědu
--versionvypíše verzi kompilátoru
--pkg=PACKAGEpoužije balíček pro valu
-C, --ccodevytvoří zdrojové .c soubory
-H, --header=SOUBORvytvoří hlavičkové .h soubory
-d, --directory=ADRESÁŘadresář pro výstupní soubory
-o, --output=FILEnastavení výstupního souboru
-g, --debugkompilace s debug informacema
--cc=COMMANDnastavení C kompilátoru
--profile=PROFILEnastavení profilu generování C kódu
Tabulka některých voleb kompilátoru valac.

Při psaní aplikace se programátor málokdy obejde bez různých knihoven. Tyto knihovny jsou ve vale přístupné jako tzv. balíčky. Funguje to tak, že pro knihovnu je vytvořen soubor vapi. Ten vlastně popisuje způsob, jakým jsou interpretované objekty, struktury, funkce, metody a výjimky patřičné knihovny. Jaké knihovny mají tzv. vala binding se dovíte na stránkách projektu. Použití takových balíčků si ukážeme později, pro teď zmíním, že jde o parametr --pkg.

V minulém díle jsme také probíraly, že kompilátor valac, vlastně generuje C soubory a ty pak kompiluje C kompilátorem. Volby -C a -H umožní vytvoření patřičných .c a .h souborů. To se může hodit při různých příležitostech. Mimo jiné například při kompilaci rozsáhlého projektu, kdy programátor ušetří strojový čas inkrementální kompilací jednotlivých .c souborů. Parametr --cc pak umožňuje nastavit jiný než výchozí (gcc) kompilátor.

Poslední parametry, na které se dnes podíváme jsou -g a --profile. Parametr -g stejně jako v případě c kompilátoru přidává do výsledné binární podoby řetězce používané k ladění. Jak ladit takovou aplikaci si ukážeme později. Parametr --profile říká kompilátoru valac, jak má generovat c-kód. Na výběr má programátor tři možnosti: gobject (implicitní), posix a dova (experimentální). Valac podle toho generuje c-kód s odlišnými závislostmi.

Za domácí úkol si můžete zkusit vygenerovat zdrojový c soubor. Při letmé studii výstupního souboru zjistíte, jak Vala vlastně pracuje. A přeci jen, studovat zdrojový c soubor je snazší, než assembler :)

Konvence a syntax

Psaní programu v jazyce Vala jsou dle mého názoru intuitivní a autoři jazyka nevymýšleli žádné nové druhy zápisů pokud nemuseli. A když už to udělali, inspirovali se jinde. Tedy, názvy tříd začínají velkými písmeny. V případě víceslovných názvů pak každé slovo začíná velkým písmenem „MojeNovaTrida”.

Názvy metod a funkcí a proměnných se píší malými písmeny. V případě víceslovných názvů se slova oddělují podtržítkem „moje_super_metoda”. Konstanty se píší velkými písmeny, což C/C++ programátorům správně připomíná že konstanty jsou implementovány jako #define. Kapitálkami se píší i jednotlivé stavy výčtového typu. To platí i pro výjimky, které se, jak jsem zmínil v předchozím článku, zapisují stejně jako výčtový typ. Název error domény, i výčtového typu se zapisují stejně jako názvy tříd, tedy s prvním velkým písmenem v každém slově.

Jako jiné jazyky i Vala podporuje namespace. Ten je uvozen klíčovým slovem namespace a zapisuje se stejně jako název tříd nebo výčtového typu. Veškeré cesty v takto definované struktuře se oddělují tečkou a to platí i pro výčtové typy. Zápis tedy vypadá takto:

throw new Namespace.ErrorDomena.TENTO_TYP("Text vyjimky");
Namespace.Trida.staticka_metoda("parametr metody");
var obj = new Namespace.SuperTrida();
var foo = new Namespace.Foo.pretizeny_konstruktor();
int boo = Namespace.Vycet.STAV_VYCTU;

Výše popsaný zápis podrobně vysvětlím v dalších článcích. Je dobré ale zmínit že namespace se nemusí stejně jako v C++ psát, pokud nejprve deklarujete, že tento namespace budete použivat. Použití namespacu deklarujete podobně jako v C++ slovem using, ovšem bez klíčového slova namespace:

using Gtk;

int main(string [] args){
    init(ref args);		// volá se Gtk.init
    return 0;
}
Ukázkové použití slova using, kód vlastně nic nedělá.

Nejpoužívanější a v podstatě všudepřítomný namsespace je GLib. Ten je implicitně používán a proto není nutné jej explicitně jmenovat nebo deklarovat jeho používání slovem using. Zde bych ale rád apeloval na Vás, vývojáře, abyste zvážili používání klíčového slova using. Můžeto totiž vést k nečekaným chybám, právě proto, že některé knihovny se velmi často a velmi rádi překrývají. A třeba později až budeme pracovat s Gtk, volání metody main z knihovny Gtk neuděláte jinak, než explicitním jmenováním namespace. To proto, že vyhrávají poslední deklarované / definované metody, a vytvořit metodu se stejným názvem (jako třeba main) je velmi snadné.

Z tohoto důvodu a i pro větší přehlednost budu dále používat názvy metod a tříd včetně jejich namespace. A to i v případě, že jde o standardní GLib namespace.

Hello world porduhé

Nejprve kód:


class HelloWorld : GLib.Object {
    public static int main(string[] args) {
        stdout.printf("Hello, World\n");
        return 0;
    }
}

Tento trochu výřečnější zápis, je brán jako pattern toho jak by to mělo vypadat. Jeho podoba asi nepřekvapí C# ani Java programátory, v podstatě se dá volně přeložit jako aplikace HelloWorld se standardní statickou metodou main.

V praxi se pak zvláště v případě Gtk+ aplikací budeme setkávat s oněco zřejmějším použitím:

class HelloWorld : GLib.Object {
    public void run(ref string[] args) {
        stdout.printf("Hello, World\n");
    }

    public static int main(string[] args) {
        HelloWorld app = new HelloWorld();
        app.run(ref args);
        return 0;
    }
}

Nekončíme

Příště si ukážeme práci s textem. Pokusíme se vytvořit konsolovou aplikaci, která bude pracovat s json v souboru. Bude ho umět rozšiřovat, měnit a vizualizovat. A samozřejmě se nebráním Vašim nápadům, které můžete napsat do komentářů.

https://live.gnome.org/Vala/
http://valadoc.org/
http://en.wikipedia.org/wiki/GObject
https://wiki.gnome.org/Dova
http://en.wikipedia.org/wiki/C_POSIX_library

Verze pro tisk

pridej.cz

 

DISKUZE

Hezky clanek =) 10.9.2013 11:47 Ondra Voves
  L Re: Hezky clanek =) 11.9.2013 14:27 Ondřej Tůma




Příspívat do diskuze mohou pouze registrovaní uživatelé.
> Vyhledávání software
> Vyhledávání článků

15.5.2017 23:50 /František Kučera

Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě DIY, CNC, SDR nebo morseovka? Přijď na sraz spolku OpenAlt, který se bude konat ve čtvrtek 18. května od 18:00 v Radegastovně Perón (Stroupežnického 20, Praha 5).


Přidat komentář

12.5.2017 16:42 /Honza Javorek
PyCon CZ, česká konference o programovacím jazyce Python, se po dvou úspěšných ročnících v Brně bude letos konat v Praze, a to 8. až 10. června. Na konferenci letos zavítá např. i Armin Ronacher, známý především jako autor frameworku Flask, šablon Jinja2/Twig, a dalších projektů. Těšit se můžete na přednášky o datové analytice, tvorbě webu, testování, tvorbě API, učení a mentorování programování, přednášky o rozvoji komunity, o použití Pythonu ve vědě nebo k ovládání nejrůznějších zařízení (MicroPython). Na vlastní prsty si můžete na workshopech vyzkoušet postavit Pythonem ovládaného robota, naučit se učit šestileté děti programovat, efektivně testovat nebo si v Pythonu pohrát s kartografickým materiálem. Kupujte lístky, dokud jsou.
Přidat komentář

2.5.2017 9:20 /Eva Rázgová
Putovní konference československé Drupal komunity "DrupalCamp Československo" se tentokrát koná 27. 5.2017 na VUT FIT v Brně. Můžete načerpat a vyměnit si zkušenosti z oblasti Drupalu 7 a 8, UX, SEO, managementu týmového vývoje, využití Dockeru pro Drupal a dalších. Vítáni jsou nováčci i experti. Akci pořádají Slovenská Drupal Asociácia a česká Asociace pro Drupal. Registrace na webu .
Přidat komentář

1.5.2017 20:31 /Pavel `Goldenfish' Kysilka
PR: 25.5.2017 proběhne v Praze konference na téma Firemní informační systémy. Hlavními tématy jsou: Informační systémy s vlastní inteligencí, efektivní práce s dokumenty, mobilní přístup k datům nebo využívání cloudu.
Přidat komentář

15.4.2017 15:20 /František Kučera
Máš rád svobodný software a hardware nebo se o nich chceš něco dozvědět? Zajímá tě IoT a radiokomunikace? Přijď na sraz spolku OpenAlt, který se bude konat ve středu 19. dubna od 18:30 v Šenkovně (Sokolská 60, Praha 2).
Přidat komentář

5.3.2017 19:12 /Redakce Linuxsoft.cz
PR: 23. března proběhne v Praze konferenci na téma Cloud computing v praxi. Hlavními tématy jsou: Nejžhavější trendy v oblasti cloudu a cloudových řešení, Moderní cloudové služby, Infrastruktura současných cloudů, Efektivní využití cloudu, Nástrahy cloudových řešení a jak se jim vyhnout.
Přidat komentář

27.2.2017 22:12 /František Kučera
Pozvánka na 137. sraz OpenAlt – Praha: Tentokrát jsme si pro vás připravili neobvyklou akci. Ve středu 1.3. v 17:30 nás přivítá sdružení CZ.NIC ve svých prostorách v Milešovské ulici číslo 5 na Praze 3, kde si pro nás připravili krátkou prezentaci jejich činnosti. Následně navštívíme jejich datacentrum pod Žižkovskou věží. Provedou nás prostory, které jsou běžnému smrtelníkovi nedostupné!
Po ukončení prohlídky se všchni odebereme do hostince U vodoucha, Jagelonská 21, Praha 3 pochutnat si na některém z vybraných piv či dát si něco na zub. Rezervaci máme od 19:30, heslo je OpenAlt.
Ale pozor! Do prostor datového centra máme omezený přístup, dostane se tam pouze 10 lidí! Takže kdo přijde dříve, ten má přednost, a občanky s sebou! Kdo nebude chtít na prohlídku datového centra, může se pomalu přesunout do hostince U vodoucha a u nepřeberné nabídky piv počkat na ostatní.
Přidat komentář

18.1.2017 0:49 /František Kučera
Členové a příznivci spolku OpenAlt se pravidelně schází v Praze a Brně. Fotky z pražských srazů za uplynulý rok si můžete prohlédnout na stránkách spolku. Příští sraz se koná už 19. ledna – tentokrát je tématem ergonomie ovládání počítače – tzn. klávesnice, myši a další zařízení. Také budete mít příležitost si prohlédnout pražský hackerspace Brmlab.
Přidat komentář

   Více ...   Přidat zprávičku

> Poslední diskuze

11.5.2017 23:32 / lelo
Re: Problém se správcem balíčků

11.5.2017 5:45 / davd mašek
Re: Problém se správcem balíčků

10.5.2017 22:54 / lelo
Re: Problém se správcem balíčků

10.5.2017 22:19 / davd mašek
Problém se správcem balíčků

17.4.2017 19:15 / Jakub shoop
chyba

Více ...

ISSN 1801-3805 | Provozovatel: Pavel Kysilka, IČ: 72868490 (2003-2017) | mail at linuxsoft dot cz | Design: www.megadesign.cz | Textová verze