Язык программирования Vala: строки, массивы и управляющие конструкции
Содержание:
1. Hello world!;
2.Строки, массивы и управляющие конструкции (Вы читаете данный раздел);
3. Делегаты и обобщенные классы;
4. Контрактное программирование и библиотека обобщенных контейнеров Gee
.
Все строки в Vala имеют формат UTF-8. Тип string задает строку произвольной длины, которая является неизменяемым (immutable) объектом. Строку можно объявить как стандартным образом, так и в стиле «строки в тройных кавычках», знакомому по языку Python:
В таких строках не обрабатываются специальные символы n, t, и т.д. Они могут содержать кавычки и занимать несколько строк.""";
Строки, предваряемые символом «@», являются «строковыми шаблонами». В них можно вставлять переменные и выражения с помощью префикса «$», как это делается во многих скриптовых языках. Значения встроенных в строку переменных и выражений автоматически преобразуются к строковому типу. Удобство такого способа форматирования строк трудно переоценить:
Такие шаблоны не нужно путать со строковыми подмешиваниями (интерпретацией строки как кода) - они являются всего лишь своеобразными макросами.
Получить подстроку или отдельный символ можно с помощью «срезов». Отрицательные значения индексов отсчитывают-ся от конца строки:
Поддерживаются также многие стандартные строковые функции библиотеки Glib.
Массивы в Vala могут быть динамическими (созданными в куче) и статическими (созданными в стеке).
Для динамических массивов (но не для статических) поддерживается добавление элементов «на лету»:
Нужно иметь в виду, что такая возможность рассматривается исключительно как еще один способ инициализации массива. Стандартные массивы не предназначены для использования в качестве контейнеров с переменным количеством элементов. Для этих целей лучше использовать классы-коллекции из библиотеки Gee (массивы, списки, хеши и т.п.).
Поддерживаются также многомерные массивы:
Встроенных ассоциативных массивов в Vala нет, но они доступны в библиотеке контейнеров Gee.
Синтаксис управляющих конструкций if, for, while, switch в Vala полностью аналогичен синтаксису C/C++. Отдельного внимания заслуживает только конструкция foreach, позволяющая легко перебирать элементы массивов и коллекций:
Тип переменной цикла компилятор может определить автоматически, но иногда его удобнее указывать для наглядности.
1. Hello world!;
2.
3. Делегаты и обобщенные классы;
4. Контрактное программирование и библиотека обобщенных контейнеров Gee
.
Строки
Все строки в Vala имеют формат UTF-8. Тип string задает строку произвольной длины, которая является неизменяемым (immutable) объектом. Строку можно объявить как стандартным образом, так и в стиле «строки в тройных кавычках», знакомому по языку Python:
string text = "Обычная строка";
string str = """Строка в тройных кавычках ("verbatim string").
string str = """Строка в тройных кавычках ("verbatim string").
В таких строках не обрабатываются специальные символы n, t, и т.д. Они могут содержать кавычки и занимать несколько строк.""";
Строки, предваряемые символом «@», являются «строковыми шаблонами». В них можно вставлять переменные и выражения с помощью префикса «$», как это делается во многих скриптовых языках. Значения встроенных в строку переменных и выражений автоматически преобразуются к строковому типу. Удобство такого способа форматирования строк трудно переоценить:
int a = 10, b = 20;
string str = @"$a * $b = $(a * b)"; J
// Результирующая строка: "10*20 = 200"
string str = @"$a * $b = $(a * b)"; J
// Результирующая строка: "10*20 = 200"
Такие шаблоны не нужно путать со строковыми подмешиваниями (интерпретацией строки как кода) - они являются всего лишь своеобразными макросами.
Получить подстроку или отдельный символ можно с помощью «срезов». Отрицательные значения индексов отсчитывают-ся от конца строки:
string greeting = "hello, world";
string s1 = greeting[7:12]; // => "world"
string s2 = greeting[-4:-2]; // => "or"
unichar c = greeting[7]; // => 'w'
string s1 = greeting[7:12]; // => "world"
string s2 = greeting[-4:-2]; // => "or"
unichar c = greeting[7]; // => 'w'
Поддерживаются также многие стандартные строковые функции библиотеки Glib.
Массивы
Массивы в Vala могут быть динамическими (созданными в куче) и статическими (созданными в стеке).
int[] a = new int[10]; // Динамический массив
int f[10]; // Статический массив
int f[10]; // Статический массив
Для динамических массивов (но не для статических) поддерживается добавление элементов «на лету»:
int[] e = {}
e += 12;
e += 5;
e += 37;
e += 12;
e += 5;
e += 37;
Нужно иметь в виду, что такая возможность рассматривается исключительно как еще один способ инициализации массива. Стандартные массивы не предназначены для использования в качестве контейнеров с переменным количеством элементов. Для этих целей лучше использовать классы-коллекции из библиотеки Gee (массивы, списки, хеши и т.п.).
Поддерживаются также многомерные массивы:
int[,] c = new int[3,4];
int[,] d = {
{2, 4, 6, 8},
{3, 5, 7, 9},
{1, 3, 5, 7}};
d[2,3] = 42;
int[,] d = {
{2, 4, 6, 8},
{3, 5, 7, 9},
{1, 3, 5, 7}};
d[2,3] = 42;
Встроенных ассоциативных массивов в Vala нет, но они доступны в библиотеке контейнеров Gee.
Управляющие конструкции
Синтаксис управляющих конструкций if, for, while, switch в Vala полностью аналогичен синтаксису C/C++. Отдельного внимания заслуживает только конструкция foreach, позволяющая легко перебирать элементы массивов и коллекций:
foreach (int a in int_array) { stdout.printf("%dn", a); }
Тип переменной цикла компилятор может определить автоматически, но иногда его удобнее указывать для наглядности.