Формальное определение переменной звучит так: «поименованная либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным».
Такое объяснение может показаться достаточно сложным. Но попробуем разобраться на примере и увидим, что на самом деле переменная — это просто!
Представим себе задачу: нам нужно написать программу, которая будет посылать по электронной почте друзьям и родственникам письмо с приглашением в гости. Хорошо, если это письмо будет начинаться с приветствия. Например: «Привет, Саша!» или «Привет, мама!».
Но ведь в таком случае мы не сможем использовать один и тот же шаблон для всех адресатов? Как вы уже могли догадаться — сможем, и здесь нам на помощь как раз придут переменные. Нам нужно всего лишь завести для имени адреса переменную (назовем ее name) и задавать ей нужное значение перед отправкой письма (подробнее об объявлении переменных мы поговорим ниже):
String name = "Иван"
И теперь шаблон приветствия нашего письма будет выглядеть так:
"Привет, {{ name }}!"
Представим, что переменная — это коробочка, в которую мы можем что-то положить. То, что лежит в коробочке, будет называться значением переменной.
Также в ходе выполнения программы мы можем, например, это значение достать и положить другое. Это будет значить, что переменная изменилась.
Такое объяснение достаточно близко к тому, как на самом деле устроено хранение в памяти компьютера: переменная — это выделенная область памяти, в которой хранятся наши данные.
Давайте рассмотрим еще один пример использования переменных.
Мы написали программу для рассылки приглашений, и нам хочется узнать, сколько всего писем мы отправили. Введем для хранения количества переменную-счетчик и сразу зададим ей значение 0, так как в самом начале мы еще не отправили ни одного письма:
Int counter = 0
При отправке очередного письма мы будем увеличивать счетчик:
sendMail() // здесь функция, которая занимается отправкой письма
counter = counter + 1 // увеличиваем значение счетчика
После того как мы разослали письма всем нашим адресатам, мы можем узнать их количество:
log(counter) // на экран будет выведено число, равное количеству писем, например 5
Мы увидели, что переменные в языках программирования практически незаменимы в таких задачах, для которых нужно хранить какие-либо данные, изменять их или удалять.
Объявление переменных
В примерах выше вы уже могли увидеть, как обозначаются переменные в программировании. Хорошим тоном считается называть переменные английскими словами так, чтобы при взгляде на название стало сразу понятно, что хранится в этой переменной и для чего она нужна.
Как правило, чтобы использовать переменную в программе, сначала эту переменную нужно объявить. В разных языках программирования объявление переменных несколько различается, но встречаются похожие шаблоны. Например, часто при объявлении используется специальное ключевое слово, которое говорит компьютеру, что это новая переменная. Порой в качестве такого слова используют var — сокращение от английского variable (переменная). Обычно далее идет название переменной.
Также при объявлении часто сразу указывается и тип переменной, например строка, число или список. Впрочем, про типы переменных мы еще поговорим подробнее чуть ниже.
Во многих языках вместе с объявлением переменной мы можем сразу задать ей начальное значение через оператор присваивания. В программировании это называется «инициализировать».
Несмотря на то что такой порядок объявления переменных встречается во многих языках, это не единственно возможный вариант.
Создатели языка программирования могут применять самые разные подходы: например, некоторые не используют ключевое слово; где-то объявление и инициализация происходят всегда вместе, а где-то — всегда отдельно; где-то может не указываться тип.
Посмотрим на примеры объявления переменных в разных языках.
В Javascript:
let name = "Том"
В Java:
String name = "Том"
В PHP:
$name = 'Том'
В Pascal:
var name: string;
name := "Том"
Типы переменных
Как мы отметили выше, у переменной есть такое свойство, как тип.
Типизация — это прием, широко используемый в языках программирования для распознавания введенных нами переменных и определения того, как мы можем их далее использовать.
Типизация может быть как статическая — когда типы переменных задаются на этапе компиляции, так и динамическая — когда тип определяется и присваивается в ходе выполнения программы.
Как правило, сам язык программирования задает вид типизации, которая в нем применяется. Но в общем случае считается, что статическая типизация позволяет экономить ресурсы при выполнении программы, так как все типы переменных известны заранее и нет необходимости вычислять их в ходе выполнения. А также она может предотвратить многие ошибки на этапе компиляции программы.
Получи больше пользы от Skysmart:
-
Научись программировать на курсах разработки.
-
Выбирай из 130+ наставников по программированию.
Записывайся на бесплатные курсы для детей.
Области видимости
Теперь стоит поговорить о таком понятии, как область видимости переменных, или просто область видимости.
Объявляя переменные в нашей программе, мы можем столкнуться с ситуацией, когда доступ к какой-либо конкретной переменной требуется только в определенной функции или внутри определенного блока кода. «Мы можем просто объявить переменную внутри этой функции или блока», — скажете вы и будете правы. Функция, в свою очередь, может содержать внутри себя вызов других функций или же сама быть вызвана в какой-либо функции. Что в таких случаях будет происходить с доступом к нашей переменной? Разные языки программирования по-разному решают этот вопрос — и именно здесь мы подходим к понятию области видимости. Дадим более техническое определение этого термина.
Область видимости переменных — это область программы, в пределах которой имя переменной остается связанным с ее значением, то есть позволяет посредством себя обратиться к переменной. За пределами области видимости то же самое имя может быть связано с другой переменной или функцией либо быть свободным (не связанным ни с какой из них).
Виды переменных
Переменные могут быть простыми (иногда их еще называют скалярными) и сложными. Простые переменные содержат только одно значение в данный момент времени. Например, это может быть число, строка или логическое значение (true/false). Сложные же содержат в себе список значений. В разных языках программирования такими переменными являются, например, список, массив, объект, кортеж и т. д.
Пример простой переменной:
var name = "Том"
И сложной:
var names = ["Том", "Джерри"]
Переменные в функциональных языках
Стоит сказать, что, хотя переменные — это важная концепция в программировании, существует целый класс языков, который обходится вообще без переменных в их традиционном понимании. Такие языки называются функциональными. В них для хранения данных используются функции, и, хотя может показаться, что это похоже на переменные из других языков, это не совсем так.
Важным свойством функциональных языков является иммутабельность (неизменность). Это означает, что если мы положили данные в какое-то хранилище, то уже не можем их изменить. А для изменения мы должны написать функцию, которая будет возвращать измененные данные. Таким образом, все «переменные» в такой программе окажутся на самом деле «постоянными» (константами). У такого подхода есть свои плюсы и минусы. В программировании он встречается реже, но знать об этом полезно!
Теперь, когда мы разобрались с тем, что значит переменная, можно переходить к другим интересным темам из основ программирования. А может быть, даже начинать писать свои программы! Сделать это можно на курсах программирования в Skysmart Pro — школе будущих профессий.