This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Основные 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.


Vala/Examples


2024-10-23 11:37