Язык программирования Vala
Содержание:
1.Hello world! (Вы читаете данный раздел);
2. Строки, массивы и управляющие конструкции ;
3. Делегаты и обобщенные классы;
4. Контрактное программирование и библиотека обобщенных контейнеров Gee.
Рассмотрение любого языка программирования традиционно положено начинать с простейшей программы «Hello world». Напишем нашу первую программу на Vala не в традиционном консольном варианте, а с использованием GUI на GTK+.
Скомпилировать эту программу можно командой:
Здесь все очень просто и если компиляция не проходит, значит с ним что-то не так. Проверить его работоспособность смогут тут (http://bimar.ru/) опытные мастера
Ключ --pkg указывает, какие пакеты нужны при компиляции и компоновке. Приятная новость состоит в том, что при правильной инсталляции компилятор сам разбирается с путями и директивами. Выполнение любой программы начинается в Vala с функции main, принимающей массив строк, содержащий параметры командной строки. Строки являются самостоятельным типом данных и автоматически поддерживают Unicode.
Первое, что нужно сделать, - инициализировать GTK+ с помощью строки:
Директива ref указывает, что параметр передается по ссылке, а не по значению. Далее начинается привычная для GTK+ «кухня» с созданием окон и виджетов. По сути Vala никак не меняет обычный порядок работы с GTK+ кроме предоставления объектно-ориентированного синтаксиса, поэтому ожидать магического упрощения работы с GUI не нужно - все «темные углы» GTK+ никуда не исчезают. Создадим главное окно (объект Window) с использованием стандартных констант GTK+:
Создается впечатление, что переменная window создается без указания типа. На самом деле, здесь срабатывает механизм неявной типизации для локальной переменной (type inference) по правой части оператора присваивания. Работает он так же, как в D, но ограничен только локальными переменными. Можно было бы объявить тип переменной явно:
// Явная типизация в Vala
Window window = new Window (WindowType.TOPLEVEL);
Для сложных типов, особенно обобщенных, неявная типизация становится просто спасительной. Сравните, например, эти два объявления в Vala:
возвращает объект, являющийся функцией одной переменной (source). Именно такую сигнатуру ожидает сигнал clicked. Тип переменной source указывать не нужно, т.к. он определяется компилятором автоматически и является ссылкой на объект, который вызвал сигнал, т. е. кнопкой.
Наконец, мы добавляем кнопку в окно, показываем содержимое окна функцией show_all() и входим в цикл обработки событий GTK+ с помощью Gtk.main(). Выход из этого цикла осуществляется только после закрытия окна программы.
Нетривиальный момент в примере состоит в отсутствии операторов delete после динамического создания объектов оператором new. Vala - язык с автоматическим управлением памятью, однако, в отличие от Java, имеется возможность «ручного управления» с помощью указателей, если это необходимо. Автоматическое управление памятью построено по методу подсчета ссылок, а не с помощью «сборщика мусора».
Полностью описать синтаксис языка в короткой статье невозможно, но к счастью, это и не нужно. Все конструкции языка Vala будут понятны любому программисту знакомому с С++, С# или Java. В то же время некоторые особенности языка заслуживают упоминания.
1.
2. Строки, массивы и управляющие конструкции ;
3. Делегаты и обобщенные классы;
4. Контрактное программирование и библиотека обобщенных контейнеров Gee.
Hello world!
Рассмотрение любого языка программирования традиционно положено начинать с простейшей программы «Hello world». Напишем нашу первую программу на Vala не в традиционном консольном варианте, а с использованием GUI на GTK+.
using Gtk;
int main (string[] args) { Gtk.init (ref args);
var window = new Window (WindowType.TOPLEVEL); window.title = "Hello world!";
window.set_default_size (300, 50);
window.position = WindowPosition.CENTER;
window.destroy.connect (Gtk.main_quit);
var button = new Button.with_label ("Click me!");
button.clicked.connect ((source) => { source.label = "Thank you";
});
window.add (button);
window.show_all ();
Gtk.main ();
return 0;
}
int main (string[] args) { Gtk.init (ref args);
var window = new Window (WindowType.TOPLEVEL); window.title = "Hello world!";
window.set_default_size (300, 50);
window.position = WindowPosition.CENTER;
window.destroy.connect (Gtk.main_quit);
var button = new Button.with_label ("Click me!");
button.clicked.connect ((source) => { source.label = "Thank you";
});
window.add (button);
window.show_all ();
Gtk.main ();
return 0;
}
Скомпилировать эту программу можно командой:
$ valac --pkg gtk+-2.0 hello.vala
Здесь все очень просто и если компиляция не проходит, значит с ним что-то не так. Проверить его работоспособность смогут тут (http://bimar.ru/) опытные мастера
Ключ --pkg указывает, какие пакеты нужны при компиляции и компоновке. Приятная новость состоит в том, что при правильной инсталляции компилятор сам разбирается с путями и директивами. Выполнение любой программы начинается в Vala с функции main, принимающей массив строк, содержащий параметры командной строки. Строки являются самостоятельным типом данных и автоматически поддерживают Unicode.
Первое, что нужно сделать, - инициализировать GTK+ с помощью строки:
Gtk.init (ref args);
Директива ref указывает, что параметр передается по ссылке, а не по значению. Далее начинается привычная для GTK+ «кухня» с созданием окон и виджетов. По сути Vala никак не меняет обычный порядок работы с GTK+ кроме предоставления объектно-ориентированного синтаксиса, поэтому ожидать магического упрощения работы с GUI не нужно - все «темные углы» GTK+ никуда не исчезают. Создадим главное окно (объект Window) с использованием стандартных констант GTK+:
var window = new Window (WindowType.TOPLEVEL);
Создается впечатление, что переменная window создается без указания типа. На самом деле, здесь срабатывает механизм неявной типизации для локальной переменной (type inference) по правой части оператора присваивания. Работает он так же, как в D, но ограничен только локальными переменными. Можно было бы объявить тип переменной явно:
// Явная типизация в Vala
Window window = new Window (WindowType.TOPLEVEL);
Для сложных типов, особенно обобщенных, неявная типизация становится просто спасительной. Сравните, например, эти два объявления в Vala:
MyFoo MyBar var foo = new MyFoo
возвращает объект, являющийся функцией одной переменной (source). Именно такую сигнатуру ожидает сигнал clicked. Тип переменной source указывать не нужно, т.к. он определяется компилятором автоматически и является ссылкой на объект, который вызвал сигнал, т. е. кнопкой.
Наконец, мы добавляем кнопку в окно, показываем содержимое окна функцией show_all() и входим в цикл обработки событий GTK+ с помощью Gtk.main(). Выход из этого цикла осуществляется только после закрытия окна программы.
Нетривиальный момент в примере состоит в отсутствии операторов delete после динамического создания объектов оператором new. Vala - язык с автоматическим управлением памятью, однако, в отличие от Java, имеется возможность «ручного управления» с помощью указателей, если это необходимо. Автоматическое управление памятью построено по методу подсчета ссылок, а не с помощью «сборщика мусора».
Особенности синтаксиса
Полностью описать синтаксис языка в короткой статье невозможно, но к счастью, это и не нужно. Все конструкции языка Vala будут понятны любому программисту знакомому с С++, С# или Java. В то же время некоторые особенности языка заслуживают упоминания.