Что такое переменная
В программировании есть базовые вещи, на которых строится всё остальное. Мы решили рассказать о них, чтобы тем, кто только хочет начать разбираться в программировании, было проще. Если вы уже это знаете и хотите что-то посерьёзнее, почитайте, как установить облачный офис на свой сервер или что под капотом у ChatGPT и других языковых моделей.
Что такое переменная
Для начала формальное определение. Оно может показаться сложным, но знать его заранее полезно, по ходу рассказа определение будет обретать смысл:
Переменная — поименованная область памяти, в которую можно записать какое-то значение. Поименованная — значит, у неё есть определённое имя.
Представим ситуацию: в крупной компании, где много отделов и все не очень хорошо друг друга знают, проходит корпоратив. Чтобы сотрудникам было проще познакомиться, организаторы всем дают белые пластиковые бейджики, на которых нужно написать своё имя, потом их надо прикрепить на одежду. Бейджи готовились заранее в типографии, которая на обратной стороне каждой карточки проставила в углу номер от 1 до 999.
В нашей истории бейджик — это переменная. Точнее, у нас уже есть 999 переменных, которые мы получили от типографии. У каждого бейджа есть номер, поэтому мы легко отличим первый бейдж от сотого по его номеру на обратной стороне.
Присваивание значения
В самом начале корпоратива все карточки пустые — на них нет имён и можно там написать всё что угодно. С точки зрения переменной это означает, что у неё есть пока только имя (номер бейджика), но нет значения.
Когда приходит очередной сотрудник на корпоратив, он берёт очередной бейдж, например № 95, и пишет на нём маркером своё имя — Алексей, а организаторы помечают, что девяносто пятый бейдж у Алексея. В этот момент переменная № 95 получает значение «Алексей». С этого момента все — и организаторы, и коллеги — знают, что перед ними Алексей, потому что так написано в переменной (на бейджике).
«Алексей» — это значение переменной № 95. Это значение можно всегда посмотреть в табличке организаторов на 95-й строчке. В программировании это называется присваиванием, когда мы в переменную записываем какое-то значение и с этого момента оно там хранится.
Чтение переменной
Когда коллеги видят этого человека на корпоративе, они понимают, что перед ними — Алексей, потому что так написано на его бейдже. Это называется чтением значения переменной, когда другие узнают, что лежит внутри переменной (в нашем случае — бейджа № 95).
Если организаторам понадобится узнать, кто взял бейдж № 95, они посмотрят по своей таблице и тоже увидят, что это был Алексей.
Переменную можно считывать сколько угодно раз — внутри всегда будет одно и то же значение, которое в неё записано.
Запись нового значения
Главная ценность переменной в том, что в неё всегда можно записать другое значение. Например, Алексей увидел, что он единственный, кто написал на бейдже полное имя, а остальные написали попроще: Маша, Коля, Женя и Макс. Алексей подошёл к организаторам и попросил их стереть старую надпись и написать новую — «Лёша», и организаторы заменили имя и на бейдже, и в своей таблице.
В программировании это называется «записать в переменную новое значение». У нас осталась та же самая переменная — бейдж № 95, но вместо старого значения «Алексей» в ней уже хранится новое значение «Лёша». Новые значения в любую переменную можно записывать сколько угодно раз.
Зачем нужны переменные
Бейджи на корпоративе были нужны для того, чтобы каждый не запоминал, как зовут тысячу коллег, а мог сразу узнать имя, просто посмотрев на бейдж (посмотреть на бейдж = прочитать значение переменной :-)
В программировании переменные нужны для того же: хранить какие-то данные и делиться ими, когда это понадобится. Например, в переменных хранят результаты вычислений, промежуточные данные расчётов, имена пользователей, базы данных, адреса серверов, пароли и всё, что ещё понадобится программисту. А если в переменную нужно положить новое значение, её просто перезаписывают и отправляют туда новые данные.
А можно в переменную записать что-то совсем другое?
В нашем примере на бейджах все писали имена, но если бы кто-то захотел нарисовать там картину или написать ноты к простой мелодии, у них бы возникли сложности. Всё дело в размере и возможностях бейджа. Для картины нужен бейдж из холста на подрамнике большого размера, а для нот — бейдж в виде специально разлинованной тетради.
С переменными в коде всё то же самое: для разных значений (чисел, строк, букв, картинок или музыки) нужны разные переменные с разными внутренними свойствами. В программировании это называется типами данных. Про них — в следующий раз.
#7 – Переменные и типы данных в программировании
Одной из важнейших составляющих любого языка программирования являются переменные. При помощи них вы можете хранить данные в памяти компьютера и работать с ними. За урок мы познакомимся со структурами данных, узнаем про переменные и типы данных.
Відеоурок
Підписуйтесь на нашу групу в Телеграмі
Полезные ссылки:
- Курс по изучению языка C++
Структуры данных
Важным понятием при изучении любого языка программирования являются структуры данных. Структура данных — программная единица, позволяющая хранить и обрабатывать множество однотипных данных в вычислительной технике.
Вы хотите сказать компьютеру чтобы он сохранил для вас какое-то число? В таком случае вы создаете структуру данных под названием переменная и помещаете туда значение. Переменная может хранить одно значение с определенным типом данных.
Также есть и другие структуры. Можно хранить набор значений в массиве или же вовсе можно сохранить большой объект со множеством данных в классе. Получается, стукнуты данных представляются в разных конструкциях для хранения определенных значений.
Переменные
#include int main() < // byte - 1 byte short number = 32333; // 2 byte int num1 = 4; // 4 byte long num2 = 5; // 8 byte std::cout
Завдання до уроку
Создание переменной
Создайте переменную для хранения числа 28005. Подумайте какой тип будет подходит под эту переменную.
Переменная (программирование)
Переме́нная в императивном программировании — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.
В других парадигмах программирования, например, в функциональной и логической, понятие переменной оказывается несколько иным. В таких языках переменная определяется как имя, с которым может быть связано значение, или даже как место (location) для хранения значения.
Область видимости и/или время существования переменной в некоторых языках задаётся классом памяти.
Классификация
Статическая и динамическая типизация переменных
Основная статья: Типизация данных#Контроль типов и системы типизации
Если тип переменной определяется на этапе компиляции, имеет место статическая типизация, а если на этапе выполнения программы — динамическая. В последнем случае иногда говорят, что переменная не имеет типа, хотя данные, содержащиеся в ней, безусловно, относятся к определённому типу данных, но выясняется это уже во время выполнения программы.
В большинстве случаев статическая типизация позволяет уменьшить затраты ресурсов при выполнении программы, поскольку для динамической типизации требуются затраты ресурсов на выяснение типов данных их приведение в выражениях с смешанными типами. Статическая типизация позволяет перекладывать проверку типов на этапе компиляции программы. Это также упрощает обнаружение ошибок ещё на этапе разработки, когда их исправление обходится менее дорого. Тем не менее во многих случаях необходимо применение динамической типизации. Например, необходимость поддержания совместимости при переходе на новый формат представления данных (например, старая часть проекта посылает процедуре дату символьной строкой, а новые объекты используют более современный числовой тип).
Статические и динамические переменные
Адрес поименованной ячейки памяти также может определяться как на этапе компиляции, так и во время выполнения программы. По времени создания переменные бывают статическими и динамическими. Первые создаются в момент запуска программы или подпрограммы, а вторые создаются в процессе выполнения программы.
Динамическая адресация нужна только тогда, когда количество поступающих на хранение данных заранее точно не известно. Такие данные размещают в специальных динамических структурах, тип которой выбирается в соответствии со спецификой задачи и с возможностями выбранной системы программирования. Это может быть стек, куча, очередь и т. п. Даже файл, в том смысле, который заложил Н.Вирт в Паскаль, является динамической структурой.
Локальные и глобальные переменные. Области видимости
По зоне видимости различают локальные и глобальные переменные. Первые доступны только конкретной подпрограмме, вторые — всей программе. С распространением модульного и объектного программирования, появились ещё и общие переменные (доступные для определённых уровней иерархии подпрограмм). Область видимости иногда задаётся классом памяти. Ограничение видимости может производиться путём введения пространств имён.
Ограничение зоны видимости придумали как для возможности использовать одинаковые имена переменных (что разумно, когда в разных подпрограммах переменные выполняют похожую функцию), так и для защиты от ошибок, связанных с неправомерным использованием переменных (правда, для этого программист должен владеть и пользоваться соответствующей логикой при структуризации данных).
Простые и сложные переменные
По наличию внутренней структуры, переменные могут быть простыми или сложными (составными).
Простые переменные не имеют внутренней структуры, доступной для адресации. Последняя оговорка важна потому, что для компилятора или процессора переменная может быть сколь угодно сложной, но конкретная система (язык) программирования скрывает от программиста её внутреннюю структуру, позволяя адресоваться только «в целом».
Сложные переменные программист создаёт для хранения данных, имеющих внутреннюю структуру. Соответственно, есть возможность обратиться напрямую к любому элементу. Самыми характерными примерами сложных типов являются массив (все элементы однотипные) и запись (элементы могут иметь разный тип).
Следует подчеркнуть относительность такого деления: для разных программ одна и та же переменная может иметь разную структуру. Например, компилятор различает в переменной вещественного типа 4 поля: знаки мантиссы и порядка, плюс их значения, но для программиста, компилирующего свою программу, вещественная переменная — единая ячейка памяти, хранящая вещественное число.
Соглашения об именовании переменных
- Венгерская нотация
- CamelCase
См. также
- Метка (программирование)
- Язык программирования
О переменных в программировании
Если заглянуть в википедию, то можно увидеть, что переменная в программировании — это поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Слово, из этого определения, на которое я хотел бы обратить ваше внимание — это данные. Так ли на самом деле, что в языках программирования, на которых мы пишем, переменные используются только для доступа к данным. Я, например, пишу на PHP. И в нём, как и в других языках программирования, переменные, кроме доступа к данным, используются также для доступа к объектам(экземплярам классов) и массивам(ассоциативным и обычным) и ещё некоторым вещам. Данные(строки, целые числа, числа с плавающей точкой, булевы значения), объекты(экземпляры классов) и структуры( ассоциативные и обычные массивы, если брать PHP) для человека по-сути являются разными сущностями (абстракциями), и было бы разумным, в наших языках программирования, обращаться с ними, как с разными вещами, игнорируя факт того, что для машины они являются одним и тем же(именованными областями памяти). Для этого я предлагаю вместо переменных начать пользоваться такими сущностями как, например: объект, структура, данные.
//Если раньше, например, для хранения объектов мы использовали переменные, которые в нынешнем синтаксисе объявляются с использованием символа $ $objectVar = new SomeClass(); //То теперь для объектов у нас будет специальная сущность "объект", которая, к примеру, будет объявляться с использованием символа ^ ^objectEntity = new SomeClass(); //Сущности "структура", к примеру, будут объявляться с использованием символа * *simpleArray = ['one', 'two', 'three']; *associativeArray = ['key' => 'val', 'another_key' => 'another_val']; //А сущности "данные", с использованием символа % %string = 'abcde'; %integer = 123; %floating = 1.23; %boolean = true;
Такая замена даёт возможность ментального разделения таких разных и не имеющих ничего общего сущностей(абстракций) как объекты, структуры и данные.
RFC для PHP по этой теме уже в процессе создания.
PS
Вообщем создать RFC для PHP не вышло, тк разработчики PHP сказали, что не хотят тратить символы которые будут нужны для реализации этой задумки. Добавлю от себя что в PHP это всё равно не получилось бы реализовать потому, что у него динамическая типизация. Но! В языке со статической типизацией, где типы не меняются, это вполне можно реализовать. Поэтому надеюсь разработчики таких языков обратят своё внимание на предложенную идею.