Vala hızlı başlangıç

Vala programlama diline hızlı bir başlangıç

Bu makalede Vala programlama dili ile neler yapılabileceğine kısa örnekler vereceğiz.

Vala programlama dili

Daha önce ismi Vala olan bir programlama dili duymuş muydunuz?

Şimdi belki bazılarınız şöyle düşünebilir. Yüzlerce programlama dili var. Nereden çıktı bu Vala dili.

Soruyu o zaman şöyle soralım.

Daha önce ismi C olan bir programlama dili duymuş muydunuz?

Yazılım geliştirme ile uğraşıp da herhalde C dilini duymayan yoktur.

İşte Vala programlama dilinin ilginçliği burada başlıyor.

Vala nesneye yönelik bir programlama dili ve Vala derleyicisi C kodu üretiyor.

Derleyici kaynak yazılımı , makine dili ya da Assembly diline çevirmek yerine ara bir dile çeviriyor. Daha sonra bu oluşturulan ara dil bir C derleyicisi tarafından derleniyor.

Dil olarak da C, C++, D ve Java gibi dillerden etkilenmiş.

Vala derleyicisi kurulumu

Vala ile uygulama geliştirebilmek için aşağıdaki araçlara ihtiyacınız olacak.

  • C derleyicisi
  • pkg-config Kütüphane ayrıntılarını C derleyicisine aktaran bir araç
  • Vala derleyicisi

Ubuntu altında kurulum

İlkönce Vala yazılım deposunu eklemek gerekiyor.

$ sudo add-apt-repository ppa:vala-team

Vala derleyicisini kurmak için de aşağıdaki komutları verebilirsiniz.

$ sudo apt-get install software-properties-common
$ sudo apt-get update
$ sudo apt-get install valac

Windows altında kurulum

Windows altında kurulum için ilk önce 64 bitlik bu yazılımı kurmanız gerekiyormuş.

64 bit Windows'ta kurulum için :

pacman -S mingw-w64-x86_64-gcc 
pacman -S mingw-w64-x86_64-pkg-config
pacman -S mingw-w64-x86_64-vala

şeklinde kurulum yapmak gerekiyormuş. Eğer 32 bit bir işletim sistemi kullanıyorsanız yukarıda x86_64 yerine i686 kullanmak gerekiyor.

OSX altında Vala kurulumu

OSX altında Vala kurulumu için brew paket yöneticisi kullanılıyor.

$ brew install vala

Vala ile Merhaba Dünya

Vala ile ilk uygulamamızı yazmak için bir metin düzenleyici ile merhaba.vala isimli bir kütük oluşturuyoruz ve içine aşağıdaki kodu giriyoruz.

void main ()
{
    stdout.printf ("Merhaba Dünya\n");
}

Yazılımı derlemek için komut satırından valac merhaba.vala komutunu giriyoruz.

Programı çalıştırmak için Linux ortamında

$ ./merhaba

Windows altında ise merhaba şeklinde çalıştırmamız yeterli olacaktır.

Eğer ekranda Merhaba Dünya yazısını gördüyseniz Vala ile ilk programınızı yazmış oldunuz.

Bu noktada yazdığımız örneğin ne kadar D örneğine benzediğini göstermek için aynı örneği bir de D dilinde yazabiliriz.

import core.stdc.stdio;

void main ()
{
    printf ("Merhaba Dünya\n");
}

Bunun uzantısına merhaba.d deyip dmd merhaba.d -ofmerhabadünya komutuyla derleyebilirsiniz.

Vala örneğinde stdout kısmını Unicode karakterleri yazdırabilmek için kullandım. D zaten Unicode karakterleri destekliyor.

Vala ile pencereli uygulama

Yazının başında da bahsettiğim gibi, bu makaledede bir ders gibi dilin tüm özelliklerini açıklamak yerine dile hızlıca bir bakış yapacağız.

Eğer pencereli uygulama geliştirmek istiyorsanız bu örneğe bakabilirsiniz. İsim olarak pencere.vala verebilirsiniz.

using Gtk;

int main (string[] corbalar)
{
    Gtk.init (ref corbalar);

    var pencere = new Window();
    pencere.title = "Merhaba Dünya!";
    pencere.border_width = 10;
    pencere.window_position = WindowPosition.CENTER;
    pencere.set_default_size (350, 70);
    pencere.destroy.connect (Gtk.main_quit);

    var etiket = new Label("Merhaba Dünya!");
    pencere.add (etiket);
    pencere.show_all ();
    Gtk.main();
    return 0;
}

Programı derlemek için valac --pkg gtk+-3.0 pencere.vala komutunu vermeniz yeterli olacaktır.

Çalıştırmak için ise

$ ./pencere

komutunu vermeniz yeterli olacaktır.

Vala ile pencereli uygulama

Görebileceğiniz üzere basit bir pencereli uygulamayı çok kolay bir şekilde yazdık.

Vala ile görsel uygulamalar

Vala ile görsel, diğer bir ifadeyle iki boyutlu grafik uygulamaları geliştirmek için SDL kütüphanesi kullanabiliriz.

using SDL;
using SDLGraphics;

public class SDLOrnek : Object
{
    private const int EKRAN_GENISLIGI = 640;
    private const int EKRAN_YUKSEKLIGI = 480;
    private const int EKRAN_COZUNURLUK = 32;
    private const int GECIKME = 10;

    private unowned SDL.Screen ekran;
    private GLib.Rand rastgele;
    private bool sonlandir;

    public SDLOrnek ()
    {
        this.rastgele = new GLib.Rand ();
    }

    public void calistir ()
    {
        ilklendir ();
        while (!sonlandir)
        {
            ciz ();
            olaylariIsle ();
            SDL.Timer.delay (GECIKME);
        }
    }

    private void ilklendir ()
    {
        uint32 ekranSecenekleri = SurfaceFlag.DOUBLEBUF
        | SurfaceFlag.HWACCEL
        | SurfaceFlag.HWSURFACE;

        this.ekran = Screen.set_video_mode (EKRAN_GENISLIGI, EKRAN_YUKSEKLIGI,
                                            EKRAN_COZUNURLUK, ekranSecenekleri);
        if (this.ekran == null)
        {
            stderr.printf ("Ekran seceneklerini ayarlayamadim.\n");
        }
        SDL.WindowManager.set_caption ("Vala SDL Örneği", "");
    }

    private void ciz ()
    {
        int16 x = (int16) rastgele.int_range (0, ekran.w);
        int16 y = (int16) rastgele.int_range (0, ekran.h);
        int16 cap = (int16) rastgele.int_range (0, 100);
        uint32 renk = rastgele.next_int ();

        Circle.fill_color (this.ekran, x, y, cap, renk);
        Circle.outline_color_aa (this.ekran, x, y, cap, renk);
        this.ekran.flip ();
    }

    private void olaylariIsle ()
    {
        Event olay;
        while (Event.poll (out olay) == 1)
        {
            switch (olay.type)
            {
            case EventType.QUIT:
                this.sonlandir = true;
                break;
            case EventType.KEYDOWN:
                this.klavyeOlaylari (olay.key);
                break;
            }
        }
    }

    private void klavyeOlaylari (KeyboardEvent olay)
    {
        if (altEnterBasiliMi (olay.keysym))
        {
            WindowManager.toggle_fullscreen (ekran);
        }
    }

    private static bool altEnterBasiliMi (Key tus)
    {
        return ((tus.mod & KeyModifier.LALT)!=0)
        && (tus.sym == KeySymbol.RETURN
            || tus.sym == KeySymbol.KP_ENTER);
    }

    public static int main (string[] corbalar)
    {
        SDL.init (InitFlag.VIDEO);
        var gorselOrnek = new SDLOrnek ();
        gorselOrnek.calistir ();
        SDL.quit ();
        return 0;
    }
}

Derlemek için şu komutu verebiliriz :

valac --pkg sdl --pkg sdl-gfx -X -lSDL_gfx -o sdl sdl.vala

Çıktısını ise aşağıda görebiliriz.

Vala ile SDL örneği

C alt düzey bir sistem programlama dili olduğu için, Vala ile ağ haberleşmesinden tutun, seri ya da USB iletişime kadar çok geniş yelpazede uygulamalar geliştirilebilir.

Daha fazla bilgi için Gnome sayfasına bakabilirsiniz.

https://wiki.gnome.org/Projects/Vala

Yorumlar

yorum yaz

Yorum yaz

Henüz yorum yok.