Из чего всё состоит

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

Для этого потребуется программа. А любая программа хранит и обрабатывает какие-нибудь данные.

Данные

Например, робот шахтёр запоминает координаты, по которым он находится. Проверяет уровень заряда аккумулятора и заполненность инвентаря. Хранит координаты зоны, которую он должен выкопать.

Все данные, с которыми работает запущеная программа, хранятся в оперативной памяти компьютера. И эта память не бесконечна. Она зависит от количества планок памяти. Чем больше памяти, тем больше данных можно обрабатывать в программе. И наоборот.

Данные в оперативной памяти делятся по типам.

Числа

Числа имеют тип number. Каждое число занимает в оперативной памяти ровно 8 байт.

Вы же помните табличку единиц измерения памяти? 1 байт = 8 бит, 1 килобайт = 1024 байта, 1 мегабайт = 1024 килобайта и так далее.

Числа могут быть целыми (1, -10, 2017) или дробными (0.1, -7.43, 20.17). Есть только одно ограничение. Число не может быть больше, чем 9223372036854775807, или меньше, чем -9223372036854775808. Потому что если оно вылезет за эти пределы, оно уже не поместится в «ячейке» размером в 8 байт.

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

Строки

Все строки имеют тип string. Тут всё просто. Строка — это любой текст, окружённый двойными кавычками: "I'm batman!".

Сколько места займёт строка в памяти, зависит от её длины. Тут всё логично. Один символ занимает в памяти один байт. Но есть две хитрости. Во-первых, некоторые символы Юникода (это почти все символы, кроме английских букв, цифр и простых знаков) могут занимать не один байт, а два, три и даже четыре. А во-вторых, компьютер — штука хитрая, и если у вас в программе много одинаковых строк, он сохранит в памяти только одну копию в целях экономии. Это называется оптимизацией.

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

Логика

Кроме чисел и строк, компьютер имеет ещё один интересный тип данных. Он называется булевый ("boolean").

Он «весит» всего один байт (хотя может вместиться в 1 бит, но в оперативной памяти нет таких маленьких «ячеек»). Булевый типа может хранить либо «истину» (true) либо «ложь» (false).

Его очень удобно использовать как флаг, который можно «поднимать» — включать, — и «опускать» — выключать. Например, вам надо где-то в коде запомнить, куда едет робот: налево или направо. Вы делаете флаг едуНалево. Если он будет равен «истине», значит, робот едет налево. Если он будет равен «лжи» — робот едет направо.

Вот, в общем-то, и все основные типы данных в компьютере. Кроме базовых типов, есть несколько более хитрых, и мы вскоре с ними тоже познакомимся.

А пока — едем дальше. Мы знаем, какими данными можем располагать для программы, но не знаем, как это сделать.

Как компьютер выполняет программы

Сама по себе программа — просто текст. Каждая строчка этого текста — какая-нибудь команда компьютеру. Компьютер читает программу, строчку за строчкой, и сразу выполняет то, что там написано.

Например, если у робота есть такая программа (это, конечно, не настоящий код):

вперёд
вправо
копать

то робот сначала двинется вперёд, потом повернёт направо, а затем выкопает один блок. После этого выполнение программы закончится: ведь больше нет команд.

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

Переменные

Итак, самая простая команда для компьютера — это создать переменную. Переменная как раз и есть та самая ячейка в оперативной памяти, где будут лежать какие-нибудь полезные данные.

Для того, чтобы объявить переменную, надо использовать слово local.

Допустим, мы пишем чатик. Нам надо хранить ник юзера, который сидит в чате. Ник — это строка (например "Fingercomp" или "Totoro"). Пишем команду:

local nick = "Vasya"

Всё! Когда компьютер дойдёт до этой команды, он поймёт, что мы хотим сохранить строку в оперативную память. Он выделит где-нибудь в свободном месте ячейку в 5 байт и запишет туда Vasya. А в программе у нас будет указатель-переменная nick, чтобы мы потом могли эту строчку в оперативной памяти найти.

Теперь, где бы мы не написали nick, компьютер подставит в это место строчку "Vasya".

Почему же она называется переменная? Потому что мы всегда можем поменять данные, на которые она показывает.

Например, если дальше в тексте программы будет такая команда:

nick = "Nikita"

То компьютер выделит новое место в памяти (на этот раз в 6 байт, где будет храниться слово Nikita) и переадресует метку nick на него.

И когда мы будем писать nick, компьютер будет подставлять строку "Nikita", а строка "Vasya" вообще будет почищена из оперативной памяти за ненадобностью.

Обратите внимание, что слово local второй раз можно уже не использовать. Компьютер помнит, что у нас была такая переменная и не будет создавать новую.

Мы можем создавать сразу кучу переменных за раз:

local name, age, fat = "Anton", 20, false

Таким образом, мы сохранили три переменных: имя Антона, возраст и флаг, который означает, что он не толстый.

Nil

А что если переменная никуда не указывает? Например, мы её создали, а чему она равна, не сказали:

local x

Компьютер увидит, что мы хотим создать переменную, но не знает, какие данные мы хотим в неё «положить». Всё сломается? Компьютер зависнет и наступит конец света?

А вот и нет. Все переменные, которые никуда не ведут, считаются равными nil. Это такой хитрый четвёртый тип данных, который, на самом деле, нигде не хранится.

Просто считается, что если переменная никуда не ведёт, она равна nil. И всё.

С этим связан один хитрый фокус. Если вы хотите выкинуть какие-нибудь данные из оперативной памяти (например, они вам больше не нужны, и вы хотите освободить место для чего-нибудь более полезного), вы можете приравнять переменную к nil:

nick = nil

Прочитав такую команду, компьютер «отвяжет» переменную nick от всех ячеек в оперативной памяти. Данные которые там хранились будут потом затёрты, когда компьютер станет чистить оперативную память. А переменная nick станет считаться равной nil.

Правила именования

Представьте, что вы написали такую команду:

local 1 = 2
local nil = "сhewbacca"

Тут компьютер встанет в тупик и начнёт материться на своём языке. Потому, что это полная бессмыслица. Если вы назовёте переменную 1, то что будет означать, например, такая команда:

local x = 1

Надо ли будет компьютеру подставлять вместо 1 двойку, или вы имели ввиду именно число 1?

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

Название должно состоять из цифр, английских букв или знаков подчеркивания (_). При этом название не может начинаться с цифры.

Иными словами, такие названия будут правильными:

local file1, test, _my_nickname, catchTheMouse, _

А вот такие вызовут ошибки:

local 2big, координата, 98, +=ThE_KiNg=+

Кроме того, в качестве названий нельзя использовать слова-команды (они называются ключевыми словами), например local или nil.

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

Вот и всё. Теперь вы знаете основы программирования. Вы умеете сохранять данные в оперативную память и удалять их оттуда.

В следующих главах мы научимся каким-нибудь более зрелищным вещам.

results matching ""

    No results matching ""