Scratch
- Дата создания:
- 2007
- Создан под влиянием:
- Парадигма:
- Типизация:
- Принятые расширения файлов:
- .sb
- Реализации и версии (свернуть все | развернуть все):
Scratch — образовательный язык программирования с чисто графическим интерфейсом.
Этот язык был создан в качестве инструмента, который сделает программирование простым и интуитивно понятным. Целью было позволить детям, у которым нет опыта программирования, изучить основные принципы императивного, объектно-ориентированного и многопоточного программирования. Естественно, его применение ограничено образовательными и развлекательными целями.
Главное окно среды разработки Scratch разделено на несколько частей, сгруппированных в три колонки.
Левая колонка содержит палитру блоков. Блок — это минимальный фрагмент программы в Scratch: переменная, оператор, функция или управляющая структура. Блоки сгруппированы в следующие 8 категорий:
- Motion (управление движением спрайтов),
-
Looks (графические эффекты и функции вывода
think
иsay
), - Sound (звуковые эффекты),
- Pen (спрайтовый эквивалент черепашьей графики),
- Control (управляющие структуры),
- Sensing (обработка сигналов от мыши, клавиатуры и сенсора),
- Operators (математические, логические и строковые функции и операторы),
- Variables (скалярные и векторные переменные и операции над ними).
Центральная колонка содержит текущего спрайта и его скрипты. Спрайт — это объект в стиле Scratch, ассоциированный с изображением и набором переменных и скриптов, которые определяют его поведение. Скрипты создаются методом соединения отдельных блоков — либо последовательно, либо размещая блок в определенном месте другого блока (управляющей структуры, функции и т.д.). Один спрайт может обладать несколькими скриптами, которые запускаются независимо — действием пользователя (нажатием клавиши или кнопки мыши), таймером или получением сообщения от другого спрайта.
Правая колонка содержит сцену и список спрайтов. Сцена — область, в которой действуют спрайты при выполнении программы. Она содержит изображения видимых спрайтов, видимые переменные и любые сообщения и графические эффекты, созданные при выполнении программы.
Забавный и простой, язык Scratch иллюстрирует несколько важных парадигм:
- структурная (в низкоуровневом понимании): все программы конструируются из ограниченного набора элементов (блоков).
- объектно-ориентированная: каждый спрайт на самом деле является объектом со своими свойствами (переменными) и поведением (скриптами), и разные объекты могут взаимодействовать.
-
многопоточная: объекты взаимодействуют посредством обмена сообщениями через блоки
broadcast
иwhen I receive
.
Кроме того, Scratch предоставляет мощный набор мультимедийных инструментов: стандартные блоки предоставляют множество графических и звуковых функций, а также возможности обработки сигналов с клавиатуры, мыши и сенсора.
Элементы синтаксиса:
Присваивание значения переменной | set varname to value |
---|---|
Равенство | = |
Сравнение | < > |
Если - то | if (condition) trueBlock |
Если - то - иначе | if (condition) trueBlock else falseBlock |
Бесконечный цикл | forever loopBody |
Цикл с предусловием | forever if (condition) loopBody |
Цикл с постусловием | repeat until (condition) loopBody |
Среда разработки Scratch
Ссылки:
Примеры:
Hello, World!:
Пример для версий Scratch 1.4Летучая мышь — спрайт, ассоциированный скрипт которого состоит из единственного блока — вывода “Hello, World!”. Приведены две версии примера — для англоязычного интерфейса и локализованная.
say Hello, World!
Hello, World! на Scratch
Hello, World! на Scratch (рус.)
Факториал:
Пример для версий Scratch 1.4strs
— массив строк переменной длины. Блок delete all
необходим, чтобы очистить массив перед повторным запуском программы. repeat
— цикл, повторяющий свое тело заданное количество раз. join
— блок конкатенации аргументов. hide
скрывает аватар спрайта (чтобы освободить больше места).
Scratch не поддерживает ни стандартный поток вывода, ни возможность “сказать” сообщение из нескольких строк, поэтому для вывода примера в нужной форме использовался массив.
delete all of strs
set i to 0
set f to 1
repeat 17
add (join i (join (! = ) f)) to strs
set i to (i + 1)
set f to (f * i)
hide
Факториал на Scratch
Числа Фибоначчи:
Пример для версий Scratch 1.4В Scratch нет простого способа определить функцию, поэтому используется итеративное определение чисел Фибоначчи.
set f1 to 1
set f2 to 1
set str to f1
repeat 15
set f3 to (f1 + f2)
set f1 to f2
set f2 to f3
set str to join (str (join (,) f1))
say join (str (...))
Числа Фибоначчи на Scratch
Квадратное уравнение:
Пример для версий Scratch 1.4Этот пример демонстрирует использование ввода пользовательских данных в Scratch командой ask "..." and wait
. В результате этой команды спрайт “говорит” заданное сообщение (приглашение к вводу), и под спрайтом показывается окно ввода. Когда информация введена, ее можно получить через предопределенную переменную answer
. При вводе нескольких значений подряд каждое из них следует скопировать в локальную переменную, прежде чем переходить ко вводу следующего.
ask "A = ?" and wait
set A to answer
if A = 0
say "Not a quadratic equation"
else
ask "B = ?" and wait
set B to answer
ask "C = ?" and wait
set C to answer
set D to B*B + (-4)*A*C
set re to B/(-2*A)
if D = 0
say join ("x = " re)
else
set im to (sqrt of (abs of D)) / (2*A)
if D > 0
say join (join ("x1 = " (re+im)) join (", x2 = " (re-im)))
else
say join (join ("x1 = (" join (re join (", " im))) join ("), x2 = (" join (re join (", -" join (im ")")))))
Квадратное уравнение на Scratch
CamelCase:
Пример для версий Scratch 1.4Эту задачу нельзя решить с использованием только стандартных блоков Scratch; придется воспользоваться скрытыми возможностями среды разработки. В этом руководстве детально описано, как добавить к стандартным блокам еще два, которые будут преобразовывать символ в его ASCII-код (блок “ascii code of _”) и наоборот (“ascii _ as letter”). После добавления этих блоков остаток программы вполне тривиален.
Отметим, что индекс массива начинается с 1, а в условиях циклов и условных переходов логические значения приходится сравнивать с true
и false
в явном виде.
CamelCase на Scratch
Hello, World!:
Пример для версий Snap! 4.0В отличие от Scratch, скрипты в Snap! должны начинаться с блока-“шляпы”, определяющего условие их запуска. В данном случае скрипт выполняется при запуске презентации.
Hello, World! на Snap!
Факториал:
Пример для версий Snap! 4.0Для вывода результатов вычислений в нужной форме используется глобальная переменная — список, которая “показывается” в конце выполнения программы.
Факториал (итеративное вычисление) на Snap!
Факториал:
Пример для версий Snap! 4.0В этом примере используется рекурсивный способ вычисления факториала. В Snap! существует возможность создания пользовательских блоков, в данном случае — блока factorial
типа reporter
(блок, возвращающий значение, т.е. функция). Созданный блок сразу появляется в палитре блоков, и его можно использовать при редактировании его определения, т.е. для рекурсивных вызовов.
Факториал (рекурсивное вычисление) на Snap!
Числа Фибоначчи:
Пример для версий Snap! 4.0Этот пример реализует рекурсивное вычисление чисел Фибоначчи. Для ускорения работы программы ранее найденные числа записываются в “кэш” — глобальный список.
Числа Фибоначчи (рекурсивное вычисление) на Snap!
Квадратное уравнение:
Пример для версий Snap! 4.0Одна из удобных возможностей Snap! — блок join
позволяет конкатенировать произвольное количество аргументов в одном блоке.
Квадратное уравнение на Snap!
CamelCase:
Пример для версий Snap! 4.0Snap! предоставляет более богатый набор встроенных блоков, чем Scratch, например, в него входят блоки unicode of _
и unicode _ as letter
. Для удобства эти блоки использованы для определения блоков isLetter
, toLower
и toUpper
, аналогичным одноименным функциям в других языках.
CamelCase на Snap!
Комментарии
]]>blog comments powered by Disqus
]]>