Файл: Понятие переменной в программировании. Виды и типы переменных (Общее понятие переменной в программирование).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 264

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

Актуальность данной курсовой работы обусловлена большой значимостью в понимании того, что из себя представляет переменная, а также какие существуют виды и типы переменных

Следует иметь в виду, что при решении задач ЭВМ оперирует не со значениями, а с их обозначениями, которыми являются конфигурации битов, байтов или слов. Чтобы ЭВМ могла при выполнении операций распознавать принадлежность этих конфигураций к тому или иному типу данных, необходимо при разработке алгоритмов, и особенно программ, прямо указывать эту принадлежность. Достигается это путем явного описания типов используемых данных. В зависимости от типа, заданного в описании переменной, она может принимать текущие значения только указанного типа. Например, если тип переменной A указан как «целый», то она в данный момент времен может иметь любое значение из допустимого множества целых чисел {...–3, –2, –1, 0, 1, 2, 3, ...}; если тип переменной B указан как «логический», то текущее значение может быть одним из двух {истина, ложь}.

Каждый тип данных характеризуется так называемым кардинальным числом – количеством различных значений, принадлежащих типу. Для каждого типа данных должен быть строго определен набор операций, которые можно применять при обработке данных этого типа.

В данной курсовой работе описаны общие типы и виды данных переменных в программировании, а также подробно раскрывается сама сущность переменной. Также, на основании актуальности, я разобрал на пример двух языков программирования особенности и различия использования переменных:

  • Python – как один из самых популярынх языков программирования на текущий момент.
  • Kotlin – среда программирования, которая только набирает популярность, но показывает уверенную положительную динамику, в контексте частоты использования со стороны разработчиков программного обеспечения.

1 ПОНЯТИЕ ПЕРЕМЕННОЙ В ПРОГРАММИРОВАНИИ. ВИДЫ И ТИПЫ ПЕРЕМЕННЫХ

1.1 Общее понятие переменной в программирование.

В компьютерном программировании переменная или скалярная величина - это адрес хранения (идентифицируемый адресом памяти) в паре со связанным символическим именем, который содержит некоторое известное или заранее неизвестное значение. Имя переменной - это обычный способ ссылки на сохраненное значение, помимо ссылки на саму переменную, в зависимости от контекста. Такое разделение имени и содержания позволяет использовать имя независимо от точного значения, которое оно представляет. Идентификатор в исходном коде компьютера может быть связан со значением во время выполнения, и, таким образом, значение переменной может изменяться в ходе выполнения программы.


Переменные в программировании могут не соответствовать напрямую понятию переменных в математике. Последнее является абстрактным и не имеет ссылки на физический объект, такой, как адрес хранилища. Значение вычислительной переменной не обязательно является частью уравнения или формулы, как в математике. Переменным в компьютерном программировании часто дают длинные имена, чтобы сделать их относительно понятными для использования, в то время как переменные в математике часто имеют, как правило, одно- или двухсимвольные имена для краткости в транскрипции и манипуляции.

На адрес хранения переменной могут ссылаться несколько различных идентификаторов - псевдоним. Присвоение значения переменной с использованием одного из идентификаторов изменит значение, к которому можно получить доступ через другие идентификаторы.

Компиляторы должны заменить символические имена переменных фактическими адресами данных. Хотя - имя, тип и адрес переменной часто остаются неизменными, данные, хранящиеся в адресе, могут быть изменены во время выполнения программы.

1.2 Действия с переменными.

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

В зависимости от системы типов языка программирования, переменные могут хранить только определенный тип данных (например, целое число или строку). Альтернативно, тип данных может быть связан только с текущим значением, позволяя одной переменной хранить все, что поддерживается языком программирования.

Переменные и область действия:

  • Автоматические переменные: каждая локальная переменная в функции возникает только при вызове самой функции и исчезает при выходе из неё. Такие переменные известны как автоматические переменные.
  • Внешние переменные - это переменные, которые являются внешними по отношению к функции и могут быть доступны из любой функции. Эти переменные существуют постоянно.

1.3 Идентификаторы, ссылающиеся на переменную.

Идентификатор, ссылающийся на переменную, может использоваться для доступа к переменной, чтобы считывать значение, или изменять значение, или редактировать другие атрибуты переменной, такие как разрешение доступа, блокировки, семафоры и т. д.

Например, на переменную может ссылаться идентификатор «total_count», а переменная может содержать число 1956. Если на эту же переменную ссылается и идентификатор «r», и он же и используется, то значение переменной изменяется, тогда как чтение значения с использованием идентификатора total_count даст результат иной результат, отличный от 1956.

Если на переменную ссылается только один идентификатор, то его можно просто назвать именем переменной. В противном случае мы можем говорить об одном из имен переменной.

1.4 Область применения.

Область действия переменной описывает, где в тексте программы может использоваться переменная, в то время как экстент (или время жизни) описывает, когда в ходе выполнения программы переменная имеет (значимое) значение. Область действия переменной на самом деле является свойством имени переменной, а экстент является свойством самой переменной. Их не следует путать с контекстом (также называемым окружением), который является свойством программы и зависит от точки в исходном коде или исполнении. Кроме того, время жизни объекта может совпадать с временем жизни переменной, но во многих случаях они не связаны.

Область действия - важная часть разрешения имени переменной. Большинство языков программирования определяют конкретную область видимости для каждой переменной (а также для любой другой именованной сущности), которая может отличаться в рамках данной программы. Область действия переменной - это часть программного кода, для которой имя переменной имеет значение и для которой переменная называется «видимой». Вход в эту область, как правило, начинает время жизни переменной (когда она входит в контекст), а выход из этой области, как правило, заканчивает ее время жизни (когда она выходит из контекста). Например, переменная с «лексической областью действия» имеет смысл только в пределах определенной функции / подпрограммы или, более точно, в пределах блока выражений / операторов (соответственно с областью действия функции или областью блока); это статическое разрешение, выполняемое во время разбора или во время компиляции. Переменные, доступные только внутри определенных функций, называются «локальными переменными». «Глобальная переменная» или переменная с неопределенной областью действия может указываться в любом месте программы.


С другой стороны, экстент является динамическим аспектом переменной. У каждой привязки переменной к значению может быть свой экстент во время выполнения. Степень привязки - это часть времени выполнения программы, в течение которой переменная продолжает ссылаться на то же значение или место в памяти. Работающая программа может входить и выходить из заданного экстента много раз.

Если в языке программирования отсутствует сборка кэша, переменная, экстент которой постоянно превышает его область действия, может привести к утечке памяти, в результате чего память, выделенная для переменной, никогда не может быть освобождена, поскольку переменная, которая будет использоваться для ссылки на нее в целях освобождения, больше не будет доступна. Однако может быть допустимо, что привязка переменной выходит за пределы ее области действия, как это происходит в Lisp и статических локальных переменных C; когда выполнение возвращает обратно в область действия переменной, переменная может быть снова использована. Переменная, область которой начинается раньше, чем ее экстент, называется неинициализированной и часто имеет неопределенное произвольное значение, если к ней обращаются , поскольку ей еще предстоит явно указать конкретное значение. Переменная, экстент которой заканчивается до ее области видимости, может стать висящим указателем и снова считаться неинициализированной, поскольку ее значение было уничтожено. Можно сказать, что переменные, описанные в предыдущих двух случаях, вышли за пределы или не связаны. Во многих языках ошибочно пытаются использовать значение переменной, когда оно выходит за пределы. На других языках это может привести к непредсказуемым результатам. Однако такой переменной может быть присвоено новое значение, что придает ей новый экстент.

Переменная нужна только тогда, когда она находится в области видимости, поэтому начало времени жизни каждой переменной - когда она входит в область действия. Чтобы не тратить впустую такое пространство, компиляторы часто предупреждают программистов, если переменная объявлена, но не используется.

Хорошей практикой программирования считается та, при который область переменных настолько делается настолько узкой, насколько это возможно, чтобы различные части программы случайно не взаимодействовали друг с другом, изменяя переменные друг друга. Обычные методы этого состоят в том, чтобы в разных разделах программы использовались разные пространства имен, или чтобы отдельные переменные были «приватными» через динамическую область видимости или область видимости лексической переменной.


Многие языки программирования используют зарезервированное значение (часто называемое нулевым или NULL) для указания недопустимой или неинициализированной переменной.

1.5 Тип данных

В статически типизированных языках, таких как Java или ML, переменная также имеет тип, что означает, что в ней могут храниться только определенные виды значений. Например, переменной типа «целое» запрещено хранить текстовые значения.

В динамически типизированных языках, таких как Python, это значения, а не переменные, которые несут тип. В Common Lisp обе ситуации существуют одновременно: переменной присваивается тип (если он не объявлен, предполагается, что это T, универсальный супертип), который существует во время компиляции. Значения также имеют типы, которые можно проверять и запрашивать во время выполнения.

Типизирование переменных также позволяет разрешать полиморфизмы во время компиляции. Однако это отличается от полиморфизма, используемого в вызовах объектно-ориентированных функций (называемых в C ++ виртуальными функциями), которые разрешают вызов на основе типа значения, а не супертипов, которые может иметь переменная.

Переменные часто хранят простые данные, такие как целые числа и буквенные строки, но некоторые языки программирования позволяют переменной также хранить значения других типов данных. Такие языки могут также позволить функциям быть параметрически полиморфными. Эти функции работают как переменные для представления данных нескольких типов. Например, функция с именем length может определять длину списка. Такая функция длины может быть параметрической полиморфной, если включить переменную типа в сигнатуру, поскольку число элементов в списке не зависит от типов элементов.

1.6 Память, которая используется переменными.


Особенности распределения переменных и их значений сильно различаются как среди языков программирования, так и среди реализаций данного языка. Многие реализации языка выделяют пространство для локальных переменных, степень которых длится один вызов функции в стеке вызовов и чья память автоматически восстанавливается при возврате функции. В более общем смысле в привязке имя переменной связано с адресом некоторого конкретного блока (непрерывной последовательности) байтов в памяти, и операции над этой переменной управляют этим блоком. Ссылка чаще встречается для переменных, чьи значения имеют большие или неизвестные размеры при компиляции кода. Такие переменные ссылаются на местоположение значения вместо хранения самого значения, которое выделяется из пула памяти, называемого кэшом.
Связанные переменные имеют значения. Однако ценность - это абстракция, идея; в реализации – это значение представлено некоторым объектом данных, который хранится в памяти компьютера. Программа или среда выполнения должна выделять память для каждого объекта данных и, поскольку память ограничена, обеспечить выделение этой памяти для повторного использования, когда объект больше не нужен для представления значения некоторых переменных.

Объекты, выделенные из кэша, должны быть возвращены, особенно когда объекты больше не нужны. В таких языках, как C #, Java, Python, Golang и Lisp среда выполнения автоматически восстанавливает объекты, когда существующие переменные больше не могут ссылаться на них. В языках без сбора кэша, таких как C, программа (и программист) должны явно выделить память, а затем освободить ее, чтобы освободить свою память. Невыполнение этого требования приводит к утечкам памяти, при которых кэш уменьшается во время работы программы, что может привести к возможному отказу из-за исчерпания доступной памяти.
Когда переменная ссылается на структуру данных, созданную динамически, доступ к некоторым ее компонентам возможен только косвенно через переменную. В таких обстоятельствах сборщики «garbage collection» (или аналогичные программные функции в языках, где garbage collection отсутствуют) иметют дело со случаем, когда требуется извлечь только часть памяти, доступную для переменной.
Соглашения об именах