vala
English
English
  • Учебник Vala
  • Основы
    • Элементы языка
      • Типы данных
      • Управляющие конструкции
      • Методы
      • Делегаты
      • Лямбды / Замыкания
      • Пространства имён
      • Структуры
      • Классы
    • ООП
      • Основы
      • Конструктор
      • Деструктор
      • Сигналы
      • Свойства(Properties)
      • Наследование
      • Абстрактные классы
      • Интерфейсы / Миксины
      • Полиморфизм
      • Сокрытие методов
      • Информация о типах времени выполнения(Run-Time Type Information)
      • Динамическое приведение типов(Dynamic Type Casting)
      • Универсальные шаблоны(Generics)
      • Создание объектов в стиле GObject
      • Интеграция с D-Bus
      • Профили(Другие бэкенды помимо GLib)
  • Продвинутые возможности
    • Ассерты и контрактное программирование
    • Обработка ошибок
    • Управление параметрами
    • Методы с поддержкой синтаксиса
    • Многопоточность
    • Главный цикл(The Main Loop)
    • Асинхронные методы(Coroutine)
    • Слабые ссылки(Weak References)
    • Список аргументов переменной длины
    • Указатели
    • Классы не наследующие Object
    • Коллекции
      • Введение
      • HashSet<G>
      • ArrayList<G>
      • HashMap<K,V>
      • Lock-free структуры
  • Экспериментальные фичи
    • Введение
    • Строгий не null режим(Rust mode)
    • Литералы регулярных выражений(regexp)
    • Цепочки связанных выражений
  • Использование и создание библиотек
    • Введение
    • Инструменты
    • Генерирование VAPI файла из предыдущего с помощью vapigen.
    • Использование библиотек
    • Создание библиотеки
    • Vala and C
    • Meson
      • Config file
      • Static Library
      • Shared Library
      • Target GLib Version
  • Технические приёмы
    • Unit тестирование
    • Отладка
    • Использование GLib
  • Продвинуты гайд(WIP)
  • Functional Programming
    • Gpseq
    • Compose
  • Examples
    • Basic
    • GTK
      • Базовые GTK программы
      • Flappy Bird(WIP)
      • DnD
    • Websocket
  • Apps
    • Games
  • Meson-Book
    • MesonBook
    • Wrap
    • Crosscompile
    • Object files
    • Library
    • Executable
    • Code Generation
    • Installing
    • Unit Tests
    • Meson 0.54
    • Meson 0.53
  • golang-book
    • Ваша первая программа
    • Типы
    • UPDATE.MD
Powered by GitBook
On this page
  • Исходный код и компиляция
  • Обзор синтаксиса
  • Комментарии

Was this helpful?

Основы

PreviousУчебник ValaNextЭлементы языка

Last updated 6 years ago

Was this helpful?

Исходный код и компиляция

Код на Vala сохраняется в файлы с расширением .vala. Vala не принуждает к такой же структурированности, как в языках вроде Java - здесь нет принципа пакетов или class-файлов. Вместо этого структура определяется текстом в каждом файле, характеризуя логическое расположение кода с помощью конструкций вроде пространств имён. Для компиляции Вы передаёте компилятору список необходимых файлов, а Vala разберётся как их связать вместе.

В результате вы можете объявить столько классов или функций в файле, сколько захотите; можно даже комбинировать части различных пространств имен, но это не очень хорошая идея. Существуют определённые соглашения, которым вы, вероятно, захотите следовать. Хорошим примером того, как организовать структуру проекта на Vala, является сам .

Все файлы исходного кода одного пакета вместе с флагами компилятора передаются valac в виде параметров. Это похоже на компиляцию исходного кода в Java. Например:

$ valac compiler.vala --pkg libvala

создаст исполняемый файл с именем compiler, связанный с пакетом libvala. Кстати говоря, именно так и создается компилятор valac!

Если вы хотите, чтобы исполняемый файл имел другое имя, или вы передали компилятору сразу несколько файлов с исходным кодом, вы можете указать имя файла после флага -o:

$ valac source1.vala source2.vala -o myprogram

$ ./myprogram

Если вы запустите компилятор valac с флагом -C, то не получите исполняемый файл. Вместо этого компилятор создаст промежуточный код на C для каждого из исходных файлов Vala, в данном случае это source1.c и source2.c. Если вы посмотрите на содержимое этих файлов, вы увидите, что программирование класса в Vala эквивалентно той же задаче в C, но при этом менее трудоёмко. Также заметьте, что этот класс зарегистрирован динамически в запущенной системе. Это хороший пример возможностей платформы GNOME, но, как я уже сказал ранее, вам не требуется вдаваться в эти подробности для использования Vala.

Если вы хотите получить заголовочный файл C, для вашего проекта, используйте флаг -H:

$ valac hello.vala -C -H hello.h

Обзор синтаксиса

Синтаксис Vala основан на C#. В результате большинство из этого будет знакомо программистам, которые знают любой C-подобный язык, поэтому я буду краток.

Область видимости определяется с помощью фигурных скобок. Объект или ссылка действительны только между { и }. Также есть разделители, служащие для определения классов, методов, блоков кода и т. д., поэтому у них есть своя область определения. Vala не имеет строгих ограничений к месту объявления переменных.

Идентификатор определяется типом и именем, например, int d означает целое число с именем d. Для типов значений также создается объект заданного типа. Для ссылочных типов просто определяется новая ссылка, которая изначально ни на что не указывает.

Для идентификаторов используются те же правила, что и в языке С: первая буква должна быть из диапазонов [a-z], [A-Z] или символом нижнего подчеркивания, последующие символы также могут быть цифрами [0-9]. Другие символы Unicode не разрешены. Возможно использование зарезервированного слова в качестве идентификатора, если поставить символ @ перед ним. Этот символ не является частью имени. Например, вы можете назвать метод foreach, объявив его как @foreach, даже несмотря на то, что foreach - это зарезервированное слово Vala.

Экземпляры ссылочных типов создаются с помощью оператора new и имени метода-конструктора, который обычно совпадает с именем объекта, например: Object h = new Object() создает новый объект типа Object и ссылку на него с именем h.

Комментарии

В Vala есть различные способы комментирования исходного кода.

// Однострочный комментарий
/* Многострочный комментарий */
/**
* Документационный комментарий
*/

Они обрабатываются так же, как и в большинстве других языков, и нуждаются в небольшом пояснении. Документационный комментарий на самом деле не является специальным, но инструмент генерации документации, такой как Valadoc, распознаёт их.

проект Vala