Основные Vala примеры
Hello World
Простой Hello World:
void main () {
print ("hello, world\n");
}
Компиляция и запуск
$ valac hello.vala $ ./hello
Если бинарник должен иметь другое имя:
$ valac hello.vala -o greeting $ ./greeting
Читая ввод пользользователя
void main () {
stdout.printf ("Введите свое имя: ");
string name = stdin.read_line ();
if (name != null) {
stdout.printf ("Привет, %s!\n", name);
}
}
Vala предоставляет объекты stdin (стандартный ввод), stdout (стандартный вывод) и stderr (стандартный поток ошибок) для трех стандартных потоков. Метод printf берет формат-строку и переменное число агрументов в качеств параметров.
Математика
Математические функции внутри пространства имен Math.
void main () {
stdout.printf ("Please enter the radius of a circle: ");
double radius = double.parse (stdin.read_line ());
stdout.printf ("Circumference: %g\n", 2 * Math.PI * radius);
stdout.printf ("sin(pi/2) = %g\n", Math.sin (Math.PI / 2));
// Random numbers
stdout.printf ("Today's lottery results:");
for (int i = 0; i < 6; i++) {
stdout.printf (" %d", Random.int_range (1, 49));
}
stdout.printf ("\n");
stdout.printf ("Random number between 0 and 1: %g\n", Random.next_double ());
}
Аргументы командной строки и Код Завершения
int main (string[] args) {
// Output the number of arguments
stdout.printf ("%d command line argument(s):\n", args.length);
// Enumerate all command line arguments
foreach (string arg in args) {
stdout.printf ("%s\n", arg);
}
// Exit code (0: success, 1: failure)
return 0;
}
Первый аргумент командной строки (args[0]) всгда является приглашением самой программы.
Читаем и Записываем в файл
Это очень простая обработка текстовых файлов. Для продвинутого ввода/вывода исопльзуйте мощные потоковые классы GIO.
void main () {
try {
string filename = "data.txt";
// Writing
string content = "hello, world";
FileUtils.set_contents (filename, content);
// Reading
string read;
FileUtils.get_contents (filename, out read);
stdout.printf ("The content of file '%s' is:\n%s\n", filename, read);
} catch (FileError e) {
stderr.printf ("%s\n", e.message);
}
}
Спауним процессы
void main () {
try {
// Non-blocking
Process.spawn_command_line_async ("ls");
// Blocking (waits for the process to finish)
Process.spawn_command_line_sync ("ls");
// Blocking with output
string standard_output, standard_error;
int exit_status;
Process.spawn_command_line_sync ("ls", out standard_output,
out standard_error,
out exit_status);
} catch (SpawnError e) {
stderr.printf ("%s\n", e.message);
}
}
Первый класс
/* class derived from GObject */
public class BasicSample : Object {
/* public instance method */
public void run () {
stdout.printf ("Hello World\n");
}
}
/* application entry point */
int main (string[] args) {
// instantiate this class, assigning the instance to
// a type-inferred variable
var sample = new BasicSample ();
// call the run method
sample.run ();
// return from this main method
return 0;
}
Точка входа может быть также внутри класса, если вам так угодно:
public class BasicSample : Object {
public void run () {
stdout.printf ("Hello World\n");
}
static int main (string[] args) {
var sample = new BasicSample ();
sample.run ();
return 0;
}
}
В этом случае main обязана быть объявлена как static.