Занятие №15 "Переменные"
Переменная — поименованная область компьютерной памяти. Ее можно представить себе как ящик для хранения данных, числовых и текстовых, к которому при необходимости обращается программа.
Переменную можно сравнить с ящиком, которому присвоено имя и который содержит некоторое значение
Когда вы создаете переменную, ваша программа резервирует определенный объем памяти, чтобы сохранить ее значение, и присваивает выделенной памяти имя переменной. Создав переменную, вы можете использовать ее имя в своей программе, чтобы обращаться к ее значению. Если у нас, допустим, имеется ящик (переменная) по имени сторона, который содержит величину 50, мы можем сконструировать команду идти (3 х сторона) шагов. Выполняя эту команду, Scratch найдет в памяти компьютера ящик сторона, присвоит его содержимое (в дан- ном случае 50) и использует это число вместо сторона в блоке идти (3 х сторона) шагов. В результате спрайт передвинется на 150 (50 умножить на 3) шагов.

Для игры «Стукни крота» мы должны найти способ запоминать количество очков, набранных пользователем. Чтобы сохранить его, надо зарезервировать место — ящик — в машинной памяти. Мы также должны присвоить этому ящику уникальный ярлык, например счет, с помощью которого мы всегда сможем найти его, если нам надо изменить его содержимое или узнать, что в нем хранится.

Когда начнется игра, мы скажем Scratch, чтобы он «установил счет на 0», и тогда Scratch, найдя ящик с ярлыком счет, поместит в него вели- чину 0. Также мы велим Scratch «увеличить счет на 1» всякий раз, когда пользователь кликнет по спрайту. Реагируя на первый удачный клик, Scratch снова заглянет в ящик счет, найдет там 0 и прибавит к нему 1 — а потом поместит полученный результат (1) обратно в ящик. В следующий раз, когда пользователь кликнет по спрайту, Scratch снова выполнит нашу команду, увеличит на 1 содержимое ящика и сохранит в нем полученную величину 2.

Вы скоро увидите, какие блоки использует Scratch для выполнения этих операций. Но пока обратите внимание на то, что величина счет меняется по мере работы программы. Вот почему мы называем переменную переменной: ее величина все время изменяется.

Переменные также полезны, когда нужно сохранить промежуточные результаты вычисления алгебраических выражений. Это похоже на счет в уме. Например, вас попросили посчитать, сколько будет 2 + 4 + 5 + 7: вы начнете с того, что сложите 2 и 4 и запомните результат (6). Затем прибавите к этому результату 5 и запомните новое число — 11. И наконец, прибавите к этому результату 8 и получите окончательный ответ — 18.

Чтобы проиллюстрировать, как можно использовать переменные для временного хранения, вообразим, что вы хотите написать программу, которая вычислила бы следующее алгебраическое выражение:
Вы можете провести расчет в одну команду, но, как видно ниже, если запихать всё в одну строку, то все выражение становится неудобочитаемым.
Другой способ написать программу — рассчитать числитель и знаменатель по отдельности, а затем использовать блок сказать, чтобы показать результаты деления одного на другой. Мы можем сделать это, создав две переменные числ (для числителя) и знам (для знаменателя) и задав их величины
Посмотрим, как наши переменные организованы в машинной памяти. В данном случае числ подобно ярлыку, который отсылает к ячейке памяти, где хранится результат расчетов (1/5 + 5/7). А знам — отсылка к месту хранения результата вычисления (7/8 – 2/3). Когда выполняется команда сказать, Scratch забирает содержимое памяти, помеченное числ и знам, делит одно на другое и передает результат команде сказать для показа.

Мы можем разбить это выражение на еще более мелкие составляющие, вычисляя каждую дробь, прежде чем показать результат
Мы используем четыре переменные (a, b, c, d) для вычисления четырех дробей в нашем математическом выражении. Рисунок также отображает выделение памяти; вы можете увидеть и переменные, и их содержимое.

Три эти программы дают один ответ, но исполнены они по-разному. В первой все «загнано» в одну строку, которую трудно прочесть. В третьей пример разбит на небольшие части, но его тоже нелегко прочесть. А во втором варианте выражение разбито разумно, а переменные использованы как для того, чтобы программу было легче понять, так и для того, чтобы выделить основные части выражения (числитель и знаменатель).

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

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

Наш симулятор содержит три спрайта: Игрок, Кубик1 и Кубик2 (Player, Die1 и Die2). Управляет процессом первый из них. При нажатии иконки с зеленым флажком этот спрайт генерирует два случайных числа в диапазоне от 1 до 6 и сохраняет эти значения в двух переменных, которые названы слч1 и слч2. Затем эта информация передается двум другим спрайтам (Кубик1 и Кубик2), чтобы они отобразили эти случайные величины. Кубик1 будет отражать величину слч1, а Кубик2 — величину слч2. После этого спрайт Игрок сложит слч1 и слч2 и отобразит полученную сумму, используя блок сказать.
Интерфейс пользователя для симулятора игральных кубиков
Сначала кликните по иконке спрайта Игрок, чтобы выбрать его. Зайдите в раздел Данные и нажмите Создать переменную, как показано на рис. 5.7 (слева). В появившемся диалоговом окне напечатайте (как показано справа на рис. 5.7) имя переменной и выберите область определения для нее. Область определения переменной показывает, какие спрайты могут переписывать ее (или менять ее значение). В нашем примере введите имя переменной слч1 и выберите Для всех спрайтов в качестве области определения. Когда закончите, нажмите ОК.
После того как вы создали переменную, в разделе Данные возникнет несколько новых блоков
Вы можете использовать эти блоки, чтобы задать значение переменной, изменить ее на некоторую величину либо показать (или спрятать) ее монитор на Сцене.
ИМЕНОВАНИЕ ПЕРЕМЕННЫХ

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

Scratch позволяет давать переменным имена, которые начинаются с цифр и содержат пробелы (например, 123Сторона и длина стороны).

Имена переменных в Scratch чувствительны к регистру. Имена типа сторона, СТОРОНА, сторОНА будут не вариантами для одной переменной, а именами разных переменных. Чтобы избежать путаницы, лучше не использовать в одном скрипте имена переменных, различающиеся только регистром.
Повторите описанную выше процедуру и создайте еще одну переменную с именем слч2. Теперь в разделе Данные должен появиться второй блок переменной (с именем слч2), и направленные вниз стрелочки на блоках помогут вам выбрать между слч1 и слч2. И теперь, когда мы создали две переменные, мы можем создать и скрипт для спрайта Игрок.
Первая команда присваивает переменной слч1 случайное значение в диапазоне от 1 до 6. Что это означает, если вернуться к сравнению с ящиком? Эта команда заставляет спрайт найти ящик с ярлком слч1 и поместить в него случайным образом сгенерированное число. Следующая команда делает то же самое для переменной слч2. Далее скрипт передает сообщение Катиться двум другим спрайтам (Кубик1 и Кубик2), чтобы уведомить их о том, что они должны сменить свои костюмы соответственно слч1 и слч2. Как только спрайты Кубик1 и Кубик2 сделали свое дело, скрипт продолжает работу и отображает сумму чисел, выпавших на кубиках, с помощью блока говорить. Посмотрим на рисунок, чтобы понять, как работает сообщение Катиться для спрайта Кубик1
Упражнение 15.1

Выберите спрайт Игрок и создайте новую переменную с именем сумма. Задайте область определения Только для этого спрайта. Модифицируйте последний блок скрипта Игрок, чтобы использовать эту новую переменную, вот так:

Теперь выберите спрайт Кубик1 (или Кубик2) и загляните в раздел Дан- ные. Сможете объяснить, почему вы не видите там переменной сумма?


Создав скрипт, который вы видите справа вверху, перетащите блок слч1 из раздела Данные в окошко параметра блока сменить костюм, чтобы получился законченный скрипт (справа внизу). В этом скрипте блок повторить 20 раз подряд случайным образом меняет костюм кубика, чтобы было похоже на то, что катится настоящий кубик (вы можете выбрать любое другое число). После этого кубик «надевает» костюм числа, определяемого переменной слч1. Вы не забыли, что у каждого кубика шесть костюмов, соответствующих цифрам с 1 по 6? Это означает, что если слч1 равна 5, последняя команда сменить костюм отобразит костюм с пятью точками.

Теперь мы можем создать скрипт для спрайта Кубик2, который будет практически таким же, как для Кубика1. Поскольку Кубик2 меняет костюм согласно переменной слч2, остается дублировать скрипт спрайта Кубик1 для спрайта Кубик2 и заменить в нем слч1 на слч2.

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

Еще один важный момент, связанный с переменной, — ее область определения. Она задает, какой спрайт может переписывать (или изменять) значение данной переменной.

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

На этом рисунке вы видите переменную подсчет спрайта Кот. Ее область определения — Только для этого спрайта. Спрайт Пингвин (Penguin) может считывать переменную подсчет с помощью блока х от Пингвин из раздела Сенсоры. Когда вы выбираете Кота в качестве второго параметра этого блока, первый параметр позволяет выбрать любой атрибут спрайта, включая одну из его переменных.
Конечно, в Scratch нет блока, который позволит спрайту Пингвин менять переменную подсчет. Получается, Пингвин ничего не может с ней сделать и испортить скрипты спрайта Кот. Так что стоит использовать область определения Только для этого спрайта, если вы хотите, чтобы переменную обновлял один-единственный спрайт.

Переменные с областью определения Только для этого спрайта имеют локальную область действия, потому их можно назвать локальными. Разные спрайты могут использовать свои локальные переменные, даже если у тех идентичные имена, и никакого конфликта не воз- никнет. Например, если у вас есть два спрайта-машины для игры в гонки, каждый из них может иметь локальную переменную по имени скорость, которая определяет скорость движения машины на Сцене. Оба спрайта могут менять свою переменную скорость независимо друг от друга. Это значит, что если вы задаете значение скорость равным 10 для первой машины и равным 20 для второй, вторая машина будет двигаться быстрее первой.

Scratch - Учись играя!
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website