Переменная в программировании считается полностью заданной если известны ее тип имя имя значение

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

исходном коде компьютера может быть привязан к значению во время выполнения, и значение переменной. Таким образом. Может изменяться в ходе выполнения программы.[1][2][3][4]

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

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

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

Действия с переменной

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

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

Переменные-это контейнеры для хранения значений.

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

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

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

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

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

Например, на переменную может ссылаться идентификатор

total_countЕсли на ту же переменную ссылается и идентификаторrrtotal_count

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

Область применения и экстент

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

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

Область имени переменной влияет на ее экстент.

Область видимости является важной частью разрешения имен переменной. Большинство языков определяют определенную

область действия для каждой переменной (а также любой другой именованной сущности). Которая может отличаться в рамках данной программы. Область действия переменной-это часть программного кода. Для которой имя переменной имеет значение и для которой переменная называется Вход в эту область обычно начинает время жизни переменной (когда она входит в контекст). А выход из этой области обычно заканчивается ее временем жизни (когда она выходит из контекста). Например, переменная с лексической областью действияподпрограммыили , точнее. В пределах блока выражений/операторов (соответственно с

областью действия функции или областью действия блока); это статическое разрешение. Выполняемое во время синтаксического анализа или во время компиляции. В качестве альтернативы переменная с динамической областью действия разрешается во время выполнения на основе глобального стека привязки. Который зависит от конкретного потока управления. Переменные, доступные только в пределах определенных функций. Называются локальными переменнымиНа глобальную переменную

Экстент, с другой стороны. Является аспектом времени выполнения (динамическим) переменной. Каждая привязка переменной к значению может иметь свой собственный

экстент во время выполнения. Экстент привязки-это часть времени выполнения программы. В течение которого переменная продолжает ссылаться на одно и то же значение или ячейку памяти. Запущенная программа может входить и выходить из заданного экстента много раз. Как в случае закрытия.

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

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

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

Для экономии пространства пространство памяти. Необходимое для переменной. Может быть выделено только тогда. Когда переменная впервые используется. И освобождено. Когда она больше не нужна.

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

Считается хорошей практикой программирования сделать область переменных настолько узкой. Насколько это возможно. Чтобы различные части программы случайно не взаимодействовали друг с другом. Изменяя переменные друг друга.

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

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

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

Например, переменной типа integer

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

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

виртуальными функциями в C++), который разрешает вызов на основе типа значения. А не супертипов. Которые разрешены переменной.

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

Формальные параметры (или формальные аргументы) функций также называются переменными. Например, в этом сегменте кода Python,

> > > > > > > > def addtwo(x): ...  return x + 2 ... >>>>>> >>> addtwo(5) 7 

переменная с именем xявляется параметром, так как она получает значение при вызове функции. Целое число 5 является аргументом, который дает xего значение. В большинстве языков параметры функции имеют локальную область. Эта конкретная переменная xможет быть названа только внутри addtwoфункции (хотя, конечно. Другие функции также могут иметь переменные x).

Выделение памяти

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

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

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

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

Соглашения об именовании

В отличие от своих математических аналогов. Программные переменные и константы обычно имеют многосимвольные имена. Например COSTили total. Односимвольные имена чаще всего используются только для вспомогательных переменных; например, i, j, kдля индексных переменных массива.

Некоторые соглашения об именовании применяются на уровне языка как часть синтаксиса языка. Который включает формат допустимых идентификаторов. Почти во всех языках имена переменных не могут начинаться с цифры (0-9) и не могут содержать пробелов. Разрешены ли знаки препинания в именах переменных. Зависит от языка; многие языки разрешают только подчеркивание (В некоторых языках программирования сигилы (символы или знаки препинания) прикрепляются к идентификаторам переменных. Чтобы указать тип данных или область действия переменной.

Чувствительность к регистру переменных имен также варьируется между языками. И некоторые языки требуют использования определенного падежа при именовании определенных сущностей;[примечание 1] Большинство современных языков чувствительны к регистру; некоторые более старые языки-нет. Некоторые языки резервируют определенные формы имен переменных для собственного внутреннего использования; во многих языках имена. Начинающиеся с двух знаков подчеркивания (

Однако, помимо основных ограничений. Налагаемых языком. Именование переменных в значительной степени зависит от стиля. На уровне машинного кода имена переменных не используются. Поэтому точные выбранные имена не имеют значения для компьютера. Таким образом. Имена переменных идентифицируют их. В остальном они просто инструмент для программистов. Чтобы сделать программы легче писать и понимать. Использование плохо подобранных имен переменных может сделать код более трудным для просмотра. Чем не описательные имена. Поэтому часто поощряются понятные имена.[5][6]

Программисты часто создают и придерживаются руководящих принципов стиля кода. Которые предлагают рекомендации по именованию переменных или навязывают точную схему именования. Более короткие имена быстрее вводятся. Но менее описательны; более длинные имена часто облегчают чтение программ и облегчают понимание назначения переменных. Однако чрезмерная многословность в именах переменных также может привести к менее понятному коду.

Типы переменных (на основе времени жизни)

С точки зрения классификации переменных. Мы можем классифицировать переменные на основе времени их существования. Различные типы переменных являются статическими. Динамическими для стека. Явными динамическими для кучи и неявными динамическими для кучи. Статическая переменная также известна как глобальная переменная. Она привязывается к ячейке памяти до начала выполнения и остается в той же ячейке памяти до завершения. Типичным примером являются статические переменные в C и C++. Динамическая переменная стека известна как локальная переменная. Которая привязывается при выполнении оператора объявления и освобождается при возврате процедуры. Основными примерами являются локальные переменные в подпрограммах C и методах Java. Явные динамические переменные кучи-это безымянные (абстрактные) ячейки памяти. Которые выделяются и освобождаются явными инструкциями времени выполнения. Заданными программистом. Основными примерами являются динамические объекты в C++ (через new и delete) и все объекты в Java. Неявные динамические переменные кучи привязываются к хранилищу кучи только тогда. Когда им присваиваются значения. Выделение и освобождение происходят. Когда значения переназначаются переменным. В результате неявные динамические переменные кучи обладают самой высокой степенью гибкости. Основными примерами являются некоторые переменные в JavaScript. PHP и все переменные в APL.

См. также