- •Лекция № 2
- •Введение
- •1. Основные синтаксические и семантические правила
- •1.1. Общая структура программы и данных
- •1.2. Типы данных, их организация в памяти и литералы
- •1.3. Ввод и вывод значений
- •1.4. Литералы значений
- •Литералы целых чисел
- •Литералы вещественных чисел
- •Перевод чисел в системы с другим основанием
- •Строковые литералы
- •Литералы массивов
- •Литералы объектов
- •1.5. Операции и выражения
- •Арифметические операции
- •Строковые операции
- •Операции сравнения
- •Компонентные операции
- •Операции присваивания
- •Другие операции
- •Синтаксис и семантика выражений
- •1.6. Дополнительные понятия и правила синтаксиса Ограничения на идентификаторы
- •Комментарии
- •Лексемы, пробельные символы и комментарии
- •2. Регулярные структуры данных
- •2.1. Многомерные массивы
- •2.2. Рекурсивные структуры объектов
- •Деревья
Компонентные операции
Компонентные операции открывают доступ к компоненте структурного значения – к элементу массива или свойству объекта – для присваивания или извлечения значения этой компоненты.
Операция |
Результат |
Примеры |
массив[индекс] |
Открывает доступ к элементу массива по его индексу. И массив, и индекс элемента могут задаваться произвольными выражениями. Если их значения не являются массивом или целым числом, соответственно, то выдаётся ошибка. |
[1,2,3][0] выдаст доступ к элементу, хранящему 1
[1,[2,3]][1][0] выдаст доступ к элементу, хранящему 2, т.к. [1,[2,3]][1] выдаст доступ к элементу, хранящему массив [2,3], а затем [2,3][0] выдаст доступ к элементу, хранящему 2 |
объект.свойство |
Открывает доступ к указанному свойству объекта. Объект задаётся выражением, а свойство – своим именем. Если значение выражения не является объектом, выдаётся ошибка. |
{d:1,b:{c:2,d:3}}.b.d выдаст доступ к свойству d, хранящему 3, т.к. {d:1,b:{c:2,d:3}}.b выдаст доступ к свойству b, хранящему {c:2,d:3}, а {c:2,d:3}.d выдаст доступ к свойству d, хранящему 3
{a:[1,2]}.a[1] выдаст доступ к 2 |
Операции присваивания
Операция присваивания со своими операндами может использоваться и как выражение, и как оператор присваивания. Любая операция присваиваниявычисляет значение некотороговыраженияи присваивает его либопеременной, либосвойствукакого-то объекта, либоэлементу какого-то массива.
Основной операцией присваивания является =. Её синтаксис и семантика определяются следующим образом:
Синтаксис операции |
Семантика операции |
Примеры применения |
имя = выражение |
Значение выражения становится значением переменной, указанной именем, и самой операции =. Если такой переменной ещё нет, то она создаётся. |
1) v=1+2; v=v+2 v сначала присваивается число 3, а потом 5. 2) x=(v=5)+2 сначала выполняется v=5, а затем x=7. |
массив[индекс]= выражение |
Сначала выполняется операция []. Если индекс больше или равен длины массива, добавляется необходимое количество элементов, вычисляется выражение и его результат присваивается последнему элементу (остальным добавленным элементам присваивается undefined). |
1) А=[1,2,3]; А[1]=5 Массив, на который ссылается переменная А, преобразуется в массив [1,5,3]. 2) А=[1,[2,3]]; В=А; А[1][0]=0 Массив, на который ссылаются переменные А и В, преобразуется в массив [1,[0,3]]. 2) А=[1,2]; А[4]=0 Массив, на который ссылается переменная А, преобразуется в массив [1,2,,,0]. |
объект.имя = выражение |
Сначала выполняется операция «.», которая выдаёт доступ к свойству объекта. Если у объекта нет свойства с указанным именем, оно создаётся. Затем вычисляется выражение и его результат присваивается свойству. Если значение выражения объект не является объектом, то присваивания не происходит и программа работает дальше. |
1) А={а:1,b:[2,3]}; A.b[1]="кот" В объекте, на который ссылается переменная А, изменяется меняется, но сам объект станет равным {а:1,b:[2,"кот"]}. |
Остальные операции присваивания определяются через операцию =, как показано в таблице, гдех– произвольныйполучатель, аy– произвольноевыражение:
Операция |
Смысл операции |
x += y |
x = x+y |
x -= y |
x = x-y |
x *= y |
x = x*y |
x /= y |
x = x/y |
x %= y |
x = x%y |
++x (префиксный инкремент) |
x = x+1 т.е., значение x увеличивается на 1, и выдаётся новое значение x |
x++ (постфиксный инкремент) |
x = x+1; x-1 т.е., значение x увеличивается на 1, а выдаётся старое значение x |
--x (префиксный декремент) |
x = x-1 т.е., значение x уменьшается на 1, и выдаётся новое значение x |
x-- (постфиксный декремент) |
x = x-1; x+1 т.е., значение x уменьшается на 1, а выдаётся старое значение x |