Что такое переменная в программировании
Переменная (от англ. variable) — поименованная или адресуемая иным способом область памяти, которую можно использовать для доступа к данным. Звучит сложно и пугающе, не правда ли? Однако на практике такое определение вашему ребенку не потребуется. По крайней мере, на начальных этапах изучения программирования.
Переменная простыми словами — это хранилище данных. Сюда можно положить какое-то значение (например, число, строку или другой тип данных). Еще более простой вариант представить себе переменную — подумать о том, что нас окружает. Например, переменной может быть какой-то небольшой мешочек, куда можно положить, к примеру, яблоко. Оно будет там находиться до тех пор, пока мы не решим произвести с яблоком какие-то действия.
Переменную в любой программе необходимо объявлять. То есть достать этот мешочек перед тем, как положить в него яблоко. В современных приложениях переменных может быть сколько угодно много. Например, в одном мешочке хранится яблоко, в другом — конфета.
Зачем нужны переменные и как они работают
В переменных хранятся определенные данные, которые можно впоследствии использовать в программе. Для того, чтобы переменная появилась, необходимо ее объявить (зарезервировать ячейку памяти под определенные данные). В разных языках переменные объявляются по-разному в зависимости от синтаксиса. Где-то это может быть слово «var», где-то «let». Существуют также неизменяемые переменные, которые задаются только раз и объявляются словом «const».
Переменные в программе нужны не только для хранения данных, но и для различных операций с ними. Например, можно создать простой калькулятор, используя всего три переменные — a, b и c. Как это будет работать? Не углубляясь в тонкости синтаксиса каждого отдельно взятого языка программирования, покажем простой пример:
То есть у нас есть три переменные. Первые две используются для вычисления, а третья служит для того, чтобы в нее записывалось значение суммы. Причем первые две переменные могут быть с заданными исходными значениями, а могут быть и пустыми (то есть переменная объявляется, но ей не присваивается никакое значение). Во втором случае, можно самим подставлять значения и на их основе будут производиться расчеты.
Кстати, данные можно записывать сразу в программе. Если взять наш пример выше, вместо латинских букв мы можем сразу же использоваться цифры. Например, 1+2 = 3. Однако в этом случае программа, которую вы напишете, не будет обладать должной гибкостью. То есть можно посчитать в ней только заданные значения и для того, чтобы что-то изменить, каждый раз придется в коде писать новые числа и только тогда мы получим другой результат.
Переменные позволяют добавить гибкости приложению. То есть мы сами можем менять их значения и каждый раз получать необходимые результаты без вмешательства в код программы.
Переменные в Scratch
При работе с средой разработки Scratch также используются переменные. Здесь есть отдельный раздел, где может их создавать. При нажатии на специальную кнопку, у нас появится окно, где можно задавать имя и значение переменной. Также, в Scratch есть возможность определения области видимости, то есть будет ли переменная доступна только одному спрайту или всем.
Важно помнить о том, что если переменная доступна всем спрайтам, она должна иметь уникальное имя. Две переменные с одним из тем же именем в одной и той же области видимости существовать не могут.
А если планируется использование переменных в разных областях видимости (спрайтах), здесь допустимо использование одинаковых имен.
Как называть переменные? Можно просто латинскими буквами. Однако наиболее популярный и эффективный вариант — описательное именование, чтобы мы, работая с кодом в будущем, могли знать, какое именно значение в переменной и что туда «положить» в случае, если планируются такие действия. При обучении через скретч лучше сразу пользоваться английскими названиями переменных. Дело в том, что во взрослом программировании весь код пишется исключительно на английском и в будущем, если ребенок в будущем будет работать с иностранными компаниями, ему придется изучить этот язык.
Например, у нас есть переменная, в которую заносятся какие-то животные. Ее можно назвать «Zhivotnye», но лучше сразу писать «Animals».
Для чего можно использовать переменные в Scratch? В целом, для любой программы, которую мы здесь пишем. Например, у нас есть два персонажа, и они должны двигаться по экрану. Мы можем задать им скорость вручную, а можем внести эти данные в переменную и затем менять скорость одновременно для обоих персонажей. Это будет более эффективно.
Помимо скорости, в качестве переменных могут выступать и другие динамические параметры, например, количество шагов. И это далеко не все возможности.
Выводы
Переменная — это основа для любого языка программирования. Она необходима для оперативного доступа к данным и манипулирования с ними. На уроках в ProgKids ваш ребенок более глубоко познакомится с переменными и узнает о том, как они применяются на практике.
Хранится ли в памяти переменная ссылочного типа?
Не могу понять хранится ли ссылка в принципе в памяти? Смущает тот момент, что мы ее объявляем — а это значит, что технически мы резервируем под нее место в памяти. С другой стороны не инициализированных ссылок не бывает.
Отслеживать
задан 10 сен 2021 в 9:56
Evgeny Rozhnowsky Evgeny Rozhnowsky
Пожалуйста, уточните вашу конкретную проблему или приведите более подробную информацию о том, что именно вам нужно. В текущем виде сложно понять, что именно вы спрашиваете.
10 сен 2021 в 10:10
И что вас здесь смущает? В любом случае для данных нужна память, в которой они будут храниться, будь то stack, heap или где-то еще.
10 сен 2021 в 10:20
«а это значит, что технически мы резервируем под нее место в памяти» — ничего подобного, ссылки не являются объектами, соответственно под них не обязательно выделяется место для хранения. А если оно и выделяется, то не обязательно доступное для пользователя. В данном случае взятие адреса берет адрес объекта, а не ссылки. Также не следует приводить текст картинкой.
10 сен 2021 в 10:25
2 ответа 2
Сортировка: Сброс на вариант по умолчанию
Если сократить ответы на аналогичный вопрос на en-SO, дела обстоят так:
- Стандарт языка только описывает, как ссылка должна себя вести.
- Из п. 0 следует, что конкретная реализация ссылки полностью лежит на плечах разработчика компилятора, он может разворачивать ссылки на этапе компиляции (то есть, заменять их на то, куда они ссылаются), если у него это получится, а может и хранить их явно в памяти
- Если компилятор избрал явное хранение ссылки в памяти, она займет столько же места, сколько указатель. Но это не точно — см. п. 1.
Отслеживать
ответ дан 10 сен 2021 в 10:25
22.2k 2 2 золотых знака 32 32 серебряных знака 52 52 бронзовых знака
Переменная int a ; с автоматическим местом хранения. Это значит, что если берётся адрес переменной и передаётся другой функции, то компилятор выделит место в памяти под своё усмотрение и передаст адрес. Если компилятору нет необходимости для выделения памяти этой переменной, то вполне без выделения памяти он этот код сделает.
У переменной типа ссылка программист не имеет права взять его адрес. А если попытается, то получит адрес куда указывает эта ссылка. То-есть расположение ссылки в памяти полностью зависит от компилятора. Он может хранить в стеке, в глобальной константной переменной (адреса ссылки), или вшитыми адресами в коде.
int a = 5; int & aref = a ;
Если вы попытаетесь вывести на экран адрес переменной a , то этой переменной выделиться место в стеке. А если выводите адрес ссылки, то выведится адрес этой-же переменной a . Место куда хранить ссылку не понадобиться. И скорее всего эта ссылка будет служить просто синонимом переменной a .
Особенности хранения значений в переменных модулей объектов и форм
В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты — reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки — значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.
Особенностью подсчета ссылок на объекты является возможность организации » циклической ссылки «. Циклическая ссылка возникает, когда объекты начинают ссылаться друг на друга. Это приводит к ситуации, при которой ни один из объектов, участвующих в циклической ссылке, не будет уничтожен. В свою очередь это является причиной возникновения утечек памяти (memory leaks).
Необходимо, по возможности, избегать появления циклических ссылок. Соблюдение достаточно простых правил при разработке конфигураций позволит избежать проблем связанных с циклическими ссылками. В случае появления подобной ссылки необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом.
Полный перечень случаев возникновения циклической ссылки привести невозможно, приведем лишь некоторые примеры:
- хранение в переменной модуля объекта (набора записей, формы) ссылки на данный объект (набор записей, форму) — ситуация приводит к появлению циклической ссылки — объект (набор записей, форма) никогда не будет уничтожен;
- хранение ссылки на владеемый объект в объекте-владельце и ссылки на объект-владелец во владеемом объекте — оба объекта никогда не будут уничтожены.
Следует обратить внимание, что, помимо переменных модулей, ссылки на объекты могут образовываться при передаче их в методы встроенного языка. Например, добавление в список значений нового значения — этого же списка значений, приведет к появлению циклической ссылки.
Переменная в программировании
При изучении большинства языков программирования мы часто встречаемся с таким понятием, как переменная. Однако на начальных этапах не всегда может быть ясно, о чем же идет речь. В этой статье мы объясним простыми словами, что такое переменные в программировании и для чего они нужны.
· Обновлено 25 октября 2022
Формальное определение переменной звучит так: «поименованная либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным».
Такое объяснение может показаться достаточно сложным. Но попробуем разобраться на примере и увидим, что на самом деле переменная — это просто!
Представим себе задачу: нам нужно написать программу, которая будет посылать по электронной почте друзьям и родственникам письмо с приглашением в гости. Хорошо, если это письмо будет начинаться с приветствия. Например: «Привет, Саша!» или «Привет, мама!».
Но ведь в таком случае мы не сможем использовать один и тот же шаблон для всех адресатов? Как вы уже могли догадаться — сможем, и здесь нам на помощь как раз придут переменные. Нам нужно всего лишь завести для имени адреса переменную (назовем ее name) и задавать ей нужное значение перед отправкой письма (подробнее об объявлении переменных мы поговорим ниже):
String name = «Иван»
И теперь шаблон приветствия нашего письма будет выглядеть так:
Представим, что переменная — это коробочка, в которую мы можем что-то положить. То, что лежит в коробочке, будет называться значением переменной.
Также в ходе выполнения программы мы можем, например, это значение достать и положить другое. Это будет значить, что переменная изменилась.
Такое объяснение достаточно близко к тому, как на самом деле устроено хранение в памяти компьютера: переменная — это выделенная область памяти, в которой хранятся наши данные.
Давайте рассмотрим еще один пример использования переменных.
Мы написали программу для рассылки приглашений, и нам хочется узнать, сколько всего писем мы отправили. Введем для хранения количества переменную-счетчик и сразу зададим ей значение 0, так как в самом начале мы еще не отправили ни одного письма:
Int counter = 0
При отправке очередного письма мы будем увеличивать счетчик:
sendMail() // здесь функция, которая занимается отправкой письма
counter = counter + 1 // увеличиваем значение счетчика
После того как мы разослали письма всем нашим адресатам, мы можем узнать их количество:
log(counter) // на экран будет выведено число, равное количеству писем, например 5
Мы увидели, что переменные в языках программирования практически незаменимы в таких задачах, для которых нужно хранить какие-либо данные, изменять их или удалять.
Научим детей и подростков программировать
Поможем создать свой первый проект, который можно добавить в портфолио и показать друзьям
Объявление переменных
В примерах выше вы уже могли увидеть, как обозначаются переменные в программировании. Хорошим тоном считается называть переменные английскими словами так, чтобы при взгляде на название стало сразу понятно, что хранится в этой переменной и для чего она нужна.
Как правило, чтобы использовать переменную в программе, сначала эту переменную нужно объявить. В разных языках программирования объявление переменных несколько различается, но встречаются похожие шаблоны. Например, часто при объявлении используется специальное ключевое слово, которое говорит компьютеру, что это новая переменная. Порой в качестве такого слова используют var — сокращение от английского variable (переменная). Обычно далее идет название переменной.
Также при объявлении часто сразу указывается и тип переменной, например строка, число или список. Впрочем, про типы переменных мы еще поговорим подробнее чуть ниже.
Во многих языках вместе с объявлением переменной мы можем сразу задать ей начальное значение через оператор присваивания. В программировании это называется «инициализировать».
Несмотря на то что такой порядок объявления переменных встречается во многих языках, это не единственно возможный вариант.
Создатели языка программирования могут применять самые разные подходы: например, некоторые не используют ключевое слово; где-то объявление и инициализация происходят всегда вместе, а где-то — всегда отдельно; где-то может не указываться тип.
Посмотрим на примеры объявления переменных в разных языках.
String name = «Том»
var name: string;
name := «Том»
Стартуй в программировании прямо сейчас
Реши свою первую настоящую задачу на JavaScript и поделись крутым результатом с друзьями
Типы переменных
Как мы отметили выше, у переменной есть такое свойство, как тип.
Типизация — это прием, широко используемый в языках программирования для распознавания введенных нами переменных и определения того, как мы можем их далее использовать.
Типизация может быть как статическая — когда типы переменных задаются на этапе компиляции, так и динамическая — когда тип определяется и присваивается в ходе выполнения программы.
Как правило, сам язык программирования задает вид типизации, которая в нем применяется. Но в общем случае считается, что статическая типизация позволяет экономить ресурсы при выполнении программы, так как все типы переменных известны заранее и нет необходимости вычислять их в ходе выполнения. А также она может предотвратить многие ошибки на этапе компиляции программы.
Выберите идеального наставника по программированию
15 000+ проверенных преподавателей со средним рейтингом 4,8. Учтём ваш график и цель обучения
Области видимости
Теперь стоит поговорить о таком понятии, как область видимости переменных, или просто область видимости.
Объявляя переменные в нашей программе, мы можем столкнуться с ситуацией, когда доступ к какой-либо конкретной переменной требуется только в определенной функции или внутри определенного блока кода. «Мы можем просто объявить переменную внутри этой функции или блока», — скажете вы и будете правы. Функция, в свою очередь, может содержать внутри себя вызов других функций или же сама быть вызвана в какой-либо функции. Что в таких случаях будет происходить с доступом к нашей переменной? Разные языки программирования по-разному решают этот вопрос — и именно здесь мы подходим к понятию области видимости. Дадим более техническое определение этого термина.
Область видимости переменных — это область программы, в пределах которой имя переменной остается связанным с ее значением, то есть позволяет посредством себя обратиться к переменной. За пределами области видимости то же самое имя может быть связано с другой переменной или функцией либо быть свободным (не связанным ни с какой из них).
Виды переменных
Переменные могут быть простыми (иногда их еще называют скалярными) и сложными. Простые переменные содержат только одно значение в данный момент времени. Например, это может быть число, строка или логическое значение (true/false). Сложные же содержат в себе список значений. В разных языках программирования такими переменными являются, например, список, массив, объект, кортеж и т. д.
Пример простой переменной:
var names = [«Том», «Джерри»]
Переменные в функциональных языках
Стоит сказать, что, хотя переменные — это важная концепция в программировании, существует целый класс языков, который обходится вообще без переменных в их традиционном понимании. Такие языки называются функциональными. В них для хранения данных используются функции, и, хотя может показаться, что это похоже на переменные из других языков, это не совсем так.
Важным свойством функциональных языков является иммутабельность (неизменность). Это означает, что если мы положили данные в какое-то хранилище, то уже не можем их изменить. А для изменения мы должны написать функцию, которая будет возвращать измененные данные. Таким образом, все «переменные» в такой программе окажутся на самом деле «постоянными» (константами). У такого подхода есть свои плюсы и минусы. В программировании он встречается реже, но знать об этом полезно!
Теперь, когда мы разобрались с тем, что значит переменная, можно переходить к другим интересным темам из основ программирования. А может быть, даже начинать писать свои программы! Сделать это можно на курсах программирования в Skysmart Pro — школе будущих профессий.