Читаем Язык программирования Euphoria. Справочное руководство полностью

-- так как длина второго ряда больше (истина, 1)


2.2.5 Индексирование рядов

Единственный элемент ряда может быть отобран путём задания номера элемента ряда (индекса элемента) в квадратных скобках. Номера элементов (индексы) начинаются с 1. Не-целые индексы также допускаются, но при этом округляются вниз до ближайшего целого (отбрасывается дробная часть).

Например, если x содержит {5, 7.2, 9, 0.5, 13}, то x[2] равно 7.2. Предположим, что мы присвоили какое-то другое значение x[2]:


x[2] = {11,22,33}


Тогда x становится равным: {5, {11,22,33}, 9, 0.5, 13}. Теперь, если мы повторим индексирование x[2], то получим {11,22,33}, а если сделаем запрос x[2][3], то результатом будет атом 33. Если вы попытаетесь индексировать ряд числом, которое выходит за пределы диапазона от 1 до числа элементов ряда, вы получите сообщение об ошибке индексирования. Например, x[0], x[-99] или x[6] все вызовут ошибку. То же самое произойдет и для x[1][3], так как x[1] не является рядом в нашем примере. Как такового, предела на число индексов (размерность ряда) не существует, но тогда ряд должен быть достаточно глубоко вложенным. Двумерный массив, так широко распространённый в других языках, может быть легко представлен рядом рядов:


x = {

{5, 6, 7, 8, 9}, -- x[1]

{1, 2, 3, 4, 5}, -- x[2]

{0, 1, 0, 1, 0} -- x[3]

}


где мы записали числа таким образом, чтобы структура ряда проявилась более отчётливо. Выражение в форме x[i][j] даёт доступ к любому элементу.

Но измерения в этом ряде рядов, тем не менее, не вполне симметричны, так как любая "строка" целиком может быть отобрана как x[i], а столь же простого выражения для отбора целой "колонки" не существует. Другие логические структуры, такие как n-мерные массивы, массивы строк, структуры, массивы структур и т.д., могут быть обработаны легко и гибко:


3-D массив:

y = {

{{1,1}, {3,3}, {5,5}},

{{0,0}, {0,1}, {9,1}},

{{-1,9},{1,1}, {2,2}}

}


y[2][3][1] равно 9

Массив строк:


s = {"Hello", "World", "Euphoria", "", "Last One"}


s[3] равно "Euphoria"

s[3][1] равно 'E'


Структура:


employee = {

{"Джон","Смит"},

45000,

27,

185.5

}


Чтобы обращаться к "полям" или элементам внутри структуры в хорошем стиле программирования, целесообразно создать набор констант для имён различных полей структуры. Тогда вашу программу будет легко читать. Для примера выше можно было бы иметь:


constant NAME = 1

constant FIRST_NAME = 1, LAST_NAME = 2


constant SALARY = 2

constant AGE = 3

constant WEIGHT = 4


Тогда имя служащего можно получить как employee[NAME], а фамилию - как employee[NAME][LAST_NAME].


Массив структур:


employees = {

{{"John","Smith"}, 45000, 27, 185.5}, -- a[1]

{{"Bill","Jones"}, 57000, 48, 177.2}, -- a[2]


-- .... и так далее.

}


employees[2][SALARY] будет 57000.

Встроенная функция length() выдаёт длину поданного в неё ряда. Следовательно, последний элемент ряда s равен:


s[length(s)]


Имеется короткая форма записи, сокращение, для подобных операций:


s[$]


Аналогично,


s[length(s)-1]


может быть упрощено до:


s[$-1]


Символ $ равен длине ряда. Сокращение $ можно использовать только внутри квадратных скобок. Если ряды вложенные, то есть:


s[$ - t[$-1] + 1]


первый $ относится к длине s, а второй - к длине t (как вы, возможно, и ожидали). Ниже приведён пример, в котором $ может избавить вас от лишней работы, делая ваш код более ясным и, вероятно, даже более быстрым:


longname[$][$] -- последний элемент последнего элемента


Сравните с обычной формой записи той же самой операции:


longname[length(longname)][length(longname[length(longname)])]


Индексирование и функциональные побочные эффекты. Рассмотрим команду присваивания, когда в её левой части выполняется индексирование:


lhs_var[lhs_expr1][lhs_expr2]... = rhs_expr


Перейти на страницу:

Все книги серии Euphoria

Язык программирования Euphoria. Справочное руководство
Язык программирования Euphoria. Справочное руководство

Euphoria (юфо'ри, также рус. эйфори'я, ра'дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software) в Канаде, Торонто. Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана» с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib и оберток для wxWidgets, GTK+ и IUP. Euphoria имеет встроенную простую систему баз данных и обертки для работы с другими типам баз данных.[Материал из Википедии]

Коллектив авторов

Программирование, программы, базы данных

Похожие книги

Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ
Эффективное использование C++. 55 верных способов улучшить структуру и код ваших программ

Эта книга представляет собой перевод третьего издания американского бестселлера Effective C++ и является руководством по грамотному использованию языка C++. Она поможет сделать ваши программы более понятными, простыми в сопровождении и эффективными. Помимо материала, описывающего общую стратегию проектирования, книга включает в себя главы по программированию с применением шаблонов и по управлению ресурсами, а также множество советов, которые позволят усовершенствовать ваши программы и сделать работу более интересной и творческой. Книга также включает новый материал по принципам обработки исключений, паттернам проектирования и библиотечным средствам.Издание ориентировано на программистов, знакомых с основами C++ и имеющих навыки его практического применения.

Скотт Майерс , Скотт Мейерс

Программирование, программы, базы данных / Программирование / Книги по IT