#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 это всё равно не получилось бы реализовать потому, что у него динамическая типизация. Но! В языке со статической типизацией, где типы не меняются, это вполне можно реализовать. Поэтому надеюсь разработчики таких языков обратят своё внимание на предложенную идею.
Что такое переменная в программировании
В программировании переменная (variable) это своего рода емкость для хранения данных. Когда информация записана в переменной (или по-другому, когда переменной присвоено значение), тогда эту информацию можно изменять, выводить в окне Web-броузера, посылать по электронной почте и т.д.
- в ней можно хранить информацию;
- можно из неё извлекать информацию, что не повлияет на значение самой переменной;
- в неё можно записать новые данные.
Причем, эти действия можно выполнять практически сколько угодно раз. Из названия ясно, что переменная – вещь непостоянная. Например, в языке программирования PHP переменные существуют или содержат в себе значение исключительно во время работы скрипта. Как только завершается исполнение скрипта, так и существование переменных прекращается. То есть при переходе с одной страницы web-сайта на другую, переменных и их значений прежней страницы уже нет. Это кроме случаев, когда нужные значения специально передаются другой странице.
Переменные появились с первыми языками программирования. Результат работы любой программы сводится к выполнению действий над какими-либо данными. Напомним, что память (memory) – это последовательность байтов (byte), каждый из которых принимает значения от 0 до 255. Так как байтов неимоверно много, единственный способ различать их - это присвоение каждому из них порядкового номера. Так и есть. Каждый байт оперативной памяти доступен процессору через его порядковый номер. Этот порядковый номер называется адресом байта.
Во времена, когда программы писались на машинном коде, программист должен был запоминать в какой участок памяти он записал нужное значение. Представьте, как усложнялся процесс написания программы, когда возникала необходимость работы с несколькими значениями. Адрес байта памяти есть число, которое мало о чем говорит. Большой объем памяти создает трудности программисту.
С первыми языками программирования появилась полезная возможность связывания определенного участка оперативной памяти с символьным названием (набором символов). По сравнению с адресом название переменной может отражать содержимое этого участка памяти. Но имя переменной не единственная вещь, которая определяет переменную. Процессор может обрабатывать три вида данных: байт, слово и двойное слово. (?) (Термины «слово» и «двойное слово» здесь используются в узкоспециальном смысле, отражая собой размер участка памяти, выделенного под переменную.) Поэтому определение вида переменной в языках нижнего и среднего уровней происходит обычно указанием типа переменной. Эти два свойства переменной (название и тип) определяют нужный участок памяти и способ его использования. В большинстве случаев именно тип переменной определяет сколько байтов памяти захватит переменная. Например, переменной типа BYTE присвоено имя A. Процессор по названию переменной (А) определяет её место в памяти и при извлечении значения этой переменной воспользуется командой, предназначенной для извлечения байта (не слова и не двойного слова).
В общем случае, переменная – это поименованный участок оперативной памяти, используемый для временного хранения данных. В зависимости от языка программирования, объявление переменной может сопровождаться указанием его типа. Обычно в языках высокого уровня тип не указывается. Синтаксические различия между языками проявляются как раз в объявлении переменных. В C и C++ необходимо указывать тип, в PHP используется префикс $.
В современном мире программирования программист должен знать не только имя и тип переменной. Также существуют понятия пространства имен и область действия переменной. Представьте, что создается программа, в которой используются несколько переменных. Имена этих переменных составляют список, который определяет пространство имен. Представим, что в ходе создания программы мы, по ошибке, объявили две переменные с одинаковыми названиями. При попытке запуска программы его компилятор сообщит об этой ошибке. Это было бы невозможно, если бы компилятор не контролировал переменные. То есть контроль безупречности пространства имен возлагается от программиста на компилятор; что облегчает процесс создания и отладки программы. На практике, приведенный пример не во всех языках приводит к ошибке. Каждый компилятор (или интерпретатор) имеют собственные требования к пространству имен. То, что является ошибкой в одном языке (в данном случае C или C++), в других языках ошибкой может не быть.
Если раньше программы были небольшие и их исходный код располагался в одном файле, то сейчас текст кода может состоять из нескольких файлов. И запомнить уникальное имя каждой переменной, использующейся в программе, становится практически невозможным. Поэтому (и не только) было введено понятие области действия (или области существования) переменных. Область действия – понятие абстрактное. Это понятие применяется только в языках среднего и высокого уровней. Целью применения области действия является разделение пространства имен на несколько независимых частей. Так в программе могут существовать несколько переменных с одинаковыми именами и типами, не мешаю друг другу. Начинающему идея разделения области действия в пределах отдельных файлов исходного кода программы должна быть более понятна. Например, этот подход используется в PHP. Это означает, что переменная, объявленная в одном файле, может быть абсолютно недоступна в других файлах. Например, мы можем объявить переменную с именем MyVar в нескольких файлах проекта, и это не будет ошибкой.
Таким образом, переменная в программировании обладает следующими характеристиками:
- имя
- адрес
- тип
- размер, который обычно определятся типом
- принадлежность какому-либо пространству имен
- область действия