]]> ]]>
Править | Обсудить | История

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
Среда разработки Scratch

Примеры:

Hello, World!:

Пример для версий Scratch 1.4

Летучая мышь — спрайт, ассоциированный скрипт которого состоит из единственного блока — вывода “Hello, World!”. Приведены две версии примера — для англоязычного интерфейса и локализованная.

say Hello, World!

Hello, World! на Scratch
Hello, World! на Scratch

Hello, World! на Scratch (рус.)
Hello, World! на Scratch (рус.)

Факториал:

Пример для версий Scratch 1.4

strs — массив строк переменной длины. Блок 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

Числа Фибоначчи:

Пример для версий 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

Квадратное уравнение:

Пример для версий 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
Квадратное уравнение на Scratch

CamelCase:

Пример для версий Scratch 1.4

Эту задачу нельзя решить с использованием только стандартных блоков Scratch; придется воспользоваться скрытыми возможностями среды разработки. В этом руководстве детально описано, как добавить к стандартным блокам еще два, которые будут преобразовывать символ в его ASCII-код (блок “ascii code of _”) и наоборот (“ascii _ as letter”). После добавления этих блоков остаток программы вполне тривиален.

Отметим, что индекс массива начинается с 1, а в условиях циклов и условных переходов логические значения приходится сравнивать с true и false в явном виде.

CamelCase на Scratch
CamelCase на Scratch

Hello, World!:

Пример для версий Snap! 4.0

В отличие от Scratch, скрипты в Snap! должны начинаться с блока-“шляпы”, определяющего условие их запуска. В данном случае скрипт выполняется при запуске презентации.

Hello, World! на Snap!
Hello, World! на Snap!

Факториал:

Пример для версий Snap! 4.0

Для вывода результатов вычислений в нужной форме используется глобальная переменная — список, которая “показывается” в конце выполнения программы.

Факториал (итеративное вычисление) на Snap!
Факториал (итеративное вычисление) на Snap!

Факториал:

Пример для версий Snap! 4.0

В этом примере используется рекурсивный способ вычисления факториала. В Snap! существует возможность создания пользовательских блоков, в данном случае — блока factorial типа reporter (блок, возвращающий значение, т.е. функция). Созданный блок сразу появляется в палитре блоков, и его можно использовать при редактировании его определения, т.е. для рекурсивных вызовов.

Факториал (рекурсивное вычисление) на Snap!
Факториал (рекурсивное вычисление) на Snap!

Числа Фибоначчи:

Пример для версий Snap! 4.0

Этот пример реализует рекурсивное вычисление чисел Фибоначчи. Для ускорения работы программы ранее найденные числа записываются в “кэш” — глобальный список.

Числа Фибоначчи (рекурсивное вычисление) на Snap!
Числа Фибоначчи (рекурсивное вычисление) на Snap!

Квадратное уравнение:

Пример для версий Snap! 4.0

Одна из удобных возможностей Snap! — блок join позволяет конкатенировать произвольное количество аргументов в одном блоке.

Квадратное уравнение на Snap!
Квадратное уравнение на Snap!

CamelCase:

Пример для версий Snap! 4.0

Snap! предоставляет более богатый набор встроенных блоков, чем Scratch, например, в него входят блоки unicode of _ и unicode _ as letter. Для удобства эти блоки использованы для определения блоков isLetter, toLower и toUpper, аналогичным одноименным функциям в других языках.

CamelCase на Snap!
CamelCase на Snap!


Комментарии

]]>

blog comments powered by Disqus

]]>

Работа программистам