#3. Перечисляемые типы данных, циклы. ## Изменяемые и неизменяемые типы данных Как мы уже обсуждали, существуют изменяемые (**mutable**) и неизменяемые (**immutable**) типы данных. Ранее рассматривался целочисленный тип данных, который, зачастую, является неизменяемым. Так же неизменяемыми могут являться типы данных **tuple** (кортеж) и **string** (строка). Что значит неизменяемыми? Значит, что изначально созданную строку мы изменить не можем. Если же кажется, что объект одного из перечисленных данных изменился - значит теперь имя объекта просто указывает на новую область в памяти с новым объектом. ## Строки ###Создание строк, кавычки В некоторых языках есть разница между одинарными и двойными кавычками, в некоторых есть, а случаются еще и тройные кавычки двух видов, и все это - для создания строк. ![](https://study.com/cimages/multimages/16/java_string_object.png) Простейшие арифметические операции сложения и умножения часто доступны и со строками. Сложение двух строк называется **конкатенацией**. В некоторых языках существует умножение строки на число и взятие конкретного элемента строки по его индексу. Индексы во всех последовательностях в программировании считаются от нуля. Некоторые ЯП позволяют работать по отрицательному индексу - отсчитываем от конца последовательности назад. ## Массивы, списки, кортежи В различных ЯП существуют различные типы последовательностей. Те типы, в которых у каждого элемента есть порядковый номер, называются **массивами**. Массив может быть **гомогенным**, т.е. содержащим данные только одного типа, и **гетерогенным**, т.е. содержащим разнотиповые данные. Встречаются языки, содержащие оба типа, встречаются и те, в которых возможен только один тип массива. В зависимости от размерности массива различают **одномерные и многомерные** массивы. ![](http://images.myshared.ru/4/222475/slide_4.jpg) ![](http://study-java.ru/wp-content/uploads/2014/03/array.png) Также массивы могут быть изменяемыми, т.е. **мутабельными**, и неизменяемыми, т.е. **иммутабельными**. ### Операции с массивами Создаются массивы при помощи: - перечисления элементов сразу при создании - добавления элементов в цикле после обработки какого-то источника или вычислений - из других типов данных, например, из строк - специальными генерирующими функцями. Помимо создания массивов, классическими операцими с массивами являются: - добавление элементов в начало, конец или любое место массива (если он мутабелен) - взятие элемента по индексу - взятие подмассива - удаление элемента или подмассива - сортировки различных видов Чаще всего с массивами работают при помощи различных циклов, либо по количеству элементов в массиве, либо перебирая их поэлментно. ![](https://o7planning.org/en/11437/cache/images/i/7722025.png) ### Циклы Важнейшим элементов многих ЯП являются циклы. Для их понимания важны следующие термины: **Тело цикла** - действия, которые выполняются в рамках цикла. Обычно заключены в фигурные скобки или их аналоги и расположены ниже и со сдвигом, в случае цикла с постусловием - выше и со сдвигом. **Итерация** - один проход тела цикла. Распространены следующие варианты циклов: 1. Цикл с предусловием. Чаще всего это **while**. Как правило, такой цикл проверяет условие, и если оно истинно, выполняет ряд действий, находящихся в теле цикла. Затем снова проверяет условие, выполняет те же действия, и так до тех пор, пока условие не станет ложно. 2. Цикл с постусловием - встречается и используется несколько реже. Чаще всего называется **do while** Очень похож на первый вариант, но всегда выполняет одн итерацию цикла до проверки условия. Проще говоря, сначала делает все действия один раз, потом проверяет условие, и выполняет эти действия снова и снова, пока условие истинно. Если эе условие изначально ложно, цикл с постусловием сработает один раз, тогда как цикл с предусловием - ни разу. 3. Цикл со счетчиком. Чаще всего это **for**. Исользуется для того, чтобы повторить некоторый набор действий - тело цикла - определенное количество раз. Как правило, в самом заголовке цикла определяется переменная, условия ее изменения и условие проверки, не достигла ли эта переменная граничного значения, когда цил должен прекратить выполняться. 4. Цикл перебора. Dfhbfyns названий: **for, foreach, each**. Служит для того, чтобы поэлементно работать с массивами или другими перечисляемыми типами данных. ## Домашка [Домашнее задание](hw3.md)