Демистификация переменных (Часть I)

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

Обычно вы можете представить себе переменную как ячейку в памяти. А сама переменная является абстракцией этой ячейки. По словам Себесты, у него шесть основных характеристик:

  1. Имя
  2. Адрес
  3. Ценность
  4. Тип
  5. Продолжительность жизни
  6. Сфера

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

Имя

В некоторых языках имена переменных чувствительны к регистру, некоторые имеют ограничения по длине, в то время как другие могут вообще не иметь имени. Давайте погрузимся в мир имён.

Первый пример — PHP. Те, кто видел это, могут знать, что все имена переменных начинаются со знака доллара ($). Это делает программу более читаемой, так как вы можете легко понять, является ли что-то переменной. Код выглядит так:

$cats_count = 10;
$dogs_count = 50;

Следующий пример — C99. В этом языке, несмотря на отсутствие ограничений на внутренние имена, фактически учитываются только 63 символа. Для внешних имен существует ограничение в 31 символ. В C ++ нет никаких ограничений.

C и его потомки являются языками с учетом регистра в том смысле, что переменные с именами manyDays и manydays — это разные переменные, каждая из которых относится к разным ячейкам памяти. В большинстве языков на основе C обычно используется верблюжий регистр. Это выглядит так:

int sheepCount = 11;
double incomeRatio = 0.5;

Обычно у каждого языка есть свои предпочтительные соглашения об именах. Например, имена классов начинаются с большой буквы, а имена функций и переменных — в нижнем регистре. Например, в Python есть PEP 8 — Style Guide, в котором есть раздел, посвященный именам. Например, к именам глобальных и локальных переменных применяются разные стандарты. Для получения дополнительной информации обратитесь к PEP 8 — Stylee Guide for Python.

См. также:  Добро пожаловать в R

Адрес

Адрес — это расположение переменной в памяти. Связь памяти с адресом отличается от языка к языку. Обычно адрес называется l-значением. Значение называется r-адрес.

Если несколько переменных ссылаются на один и тот же адрес памяти, они называются псевдонимами. Однако это может стать проблематичным и снизить как возможность записи, так и читаемость программы. Представьте себе такую ​​программу на Python:

students = ['Alice', 'John', 'Lena']
people = students
people[0] = 'Tom'
print(students)

Как вы думаете, что будет напечатано? Сначала вы можете подумать, что в массиве студентов ничего не изменится, однако people — это всего лишь псевдоним для студентов. Следовательно, изменение одного элемента в массиве people также изменит его в массиве student. Основная причина в том, что это всего лишь две ссылки на один и тот же адрес памяти. Неважно, какой из них вы измените, это повлияет на оба.

Способ привязки к памяти зависит от категории переменной по времени жизни. Всего их четыре: статический, динамический в стеке, явный динамический в куче и неявный динамический в динамике.

Эти категории будут описаны более подробно во второй части, однако мы можем отметить их основные характеристики.

Статические переменные привязываются к ячейке памяти до начала выполнения и остаются привязанными к тому же месту до завершения программы. У них одно место в памяти, и оно никогда не меняется.

Динамические переменные стека привязываются к памяти при оценке их объявления. Следовательно, в отличие от статических переменных, они не связаны до момента объявления. Эти переменные выделяются из стека времени выполнения.

Явные динамические переменные кучи не имеют имен, а выделяются и освобождаются с помощью явных инструкций времени выполнения. Они считаются абстрактными ячейками памяти, так как не имеют названия. Они выделяются и освобождаются из кучи, и к ним можно получить доступ только с помощью указателей или ссылочных переменных. Пример из C ++:

int *ptr;
ptr = new int[100]; //this is allocation
delete[] ptr; //this is deallocation

Как видно из приведенного выше примера, мы используем указатель для выделения и освобождения нового массива в куче. Это известно как динамическое размещение.

См. также:  Прошел уже месяц?

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

Тип

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

Например, Go имеет 19 примитивных типов данных, которые разделены на четыре большие группы: String, Bool, Error и Numeric.

Тема будет продолжена во второй части. Если вам нужна дополнительная информация, обратитесь к «Концепции языков программирования» Роберта В. Себесты.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: