Скретч (язык программирования)

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Скретч
Изображение логотипа
Семантика событийно-ориентированная
Класс языка графический, учебный
Тип исполнения интерпретатор
Появился в

Начало разработки: 2003 Начало бета-теста: 2005

Дата выпуска: 2007
Автор Митчелл Резник (англ. Mitchel Resnick)
Разработчик Соединённые Штаты Америки MIT Media Lab
Расширение файлов .sb , .sb2 , .sb3
Выпуск 3.29.1 (27 февраля 2022; 2 года назад (2022-02-27))
Система типов динамическая
Основные реализации Scratch
Диалекты Snap!
Испытал влияние Лого, Smalltalk, HyperCard, StarLogo, AgentSheets, Etoys, Tweak
Повлиял на Snap!, AppInventor, Catrobat
Лицензия модифицированная лицензия BSD[вд]
Сайт scratch.mit.edu
ОС Windows, macOS
Логотип Викисклада Медиафайлы на Викискладе
Интерфейс редактора Скретч 3.0

Скретч (англ. Scratch, МФА [skræʧ]) — визуально-блочная событийно-ориентированная среда программирования, созданная для детей и подростков. Название произошло от слова scratching — техники, используемой хип-хоп-диджеями, которые крутят виниловые пластинки вперёд-назад руками для того, чтобы смешивать музыкальные темы[1].

Пример программы в Скретч 1.4 (запущен под macOS)

Он создан как продолжение идей языка Лого и конструктора Лего. Скретч 1.4 был написан на языке Squeak, 2.0 и 3.0 ориентированы на работу онлайн. Scratch 2.0 был переписан на Flash и ActionScript. Скретч 3.0 (текущая версия) является улучшенной версией Скретч 2.0 и сделана на HTML5 с использованием движка WebGL, что даёт ему возможность работать на мобильных устройствах и планшетах. Скретч разрабатывается небольшой командой программистов для детей[2] в Массачусетском технологическом институте. Текущая версия — Скретч 3.0, выпущена в январе 2019 года. В 2008 году Скретч был транслирован для микроконтроллерного модуля Arduino. Проект носит название S4A[3].

Программы на Скретче состоят из графических блоков, подписи к которым зависят от выбранного для интерфейса языка. Может быть выбран один из 50 языков интерфейса, в том числе русский. Для подключения интерфейса на новом языке используются стандартные gettext-файлы.

Программирование

[править | править код]

Основными компонентами скретч программы являются объекты-спрайты. Спрайт состоит из графического представления — набора кадров-костюмов (англ. costume), набора звуков и сценария-скрипта. Для редактирования костюмов спрайтов в скретч встроен графический редактор (англ. Paint Editor). Действие Скретч-программы происходит на сцене (англ. stage) размером 480×360 (условных) пикселей с центром координат в середине сцены. Сцена обладает собственным набором фонов (англ. backdrop), звуков и может исполнять собственные скрипты.

Для программирования сценариев в Скретче используется drag-and-drop-подход: блоки из палитры блоков перетаскиваются в область скриптов.

По функциональному назначению блоки делятся на 8 групп, принадлежность блока к той или иной группе обозначается его цветом.

Категория Примечание
Движение (англ. Motion) Вкладка, которая управляет движением спрайта (недоступны для использования в скриптах сцены)
Внешний вид (англ. Looks) Вкладка, которая управляет внешностью спрайта
Звук (англ. Sound) Вкладка, которая управляет звуком спрайта/фона
События (англ. Events) Проверка наличия событий, отправка сигналов ко всем спрайтам/фону
Управление (англ. Control) Вкладка, которая отвечает за конструкции, заголовки обработчиков событий, циклы, создание клонов спрайтов
Сенсоры (англ. Sensing) Вкладка опроса устройств ввода, таймер и имя участника
Операторы (англ. Operators) Арифметико-логические операции
Переменные (англ. Variables) Раздел для управления переменными и списками
Другие блоки (англ. My Blocks) Могут быть созданы, как переменные и списки. Представляют собой функции, могут принять набор численных, текстовых и булевых аргументов. Также позволяют исполнять циклы за один кадр (исполнение циклов задерживается на кадр после каждой итерации в стандартном скрипте)
Расширения (англ. Extensions) Вкладка, которая добавляет новые расширения, такие, как: музыка, перо, видео распознавание, текст в речь, переводчик, Makey Makey, micro: bit, LEGO MINDSTORMS EV3 и LEGO Education WeDo 2.0

У многих блоков имеется редактируемое белое поле для вводимых скретч-программистом параметров.

Блоки бывают шести видов: блоки стека, блоки-шапки, закрывающие блоки, С-блоки (или обвивающие блоки), булевые блоки и блоки ссылок.

Блоки стека (большая часть блоков) (англ. Stack Blocks) сверху имеют выемку, а снизу — выступ, с их помощью они объединяются в группу блоков, называемую стеком. Стеки можно копировать и перемещать как единый блок. Особой разновидностью блоков стека являются управляющие конструкции, такие как циклы — они имеют С-образную форму, и могут охватывать собой вложенный стек скретч-блоков.

Блоки-шапки (англ. Hats) имеют выпуклый верхний край и выступ для объединения снизу — они образуют «заголовки». К блокам-заголовкам относятся блоки «когда …» (англ. when …) из группы «События», позволяющие организовать обработчики сообщений: внешних — от клавиатуры и мыши, и внутренних — передаваемых между спрайтами и позволяющих объектно-ориентированное программирование в smalltalk-стиле.

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

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

Булевые блоки или логические блоки представляют собой угловатые блоки с одним или несколькими вырезами под другой булевый блок или блок-ссылку. Его нельзя использовать как обычный блок, присоединив снизу к другому блоку. В зависимости от их наполнения они либо вернут значение «Правда» или «Ложь». С помощью них блоки «Если …, то» и «Повторять, пока не …» определяют ход программы.


Язык Scratch (как и Logo) оперирует числами, текстовыми строками, логическими значениями, а также списками, играющими роль динамических массивов.

Хотя архитектура скретч-программ в виде набора спрайтов Скретча, обменивающихся друг с другом событиями, напоминает объектно-ориентированную, Скретч не является объектно-ориентированным языком: в нём (ни в каком виде) нет механизмов наследования (в последних версиях расширенного диалекта скретча BYOB введено прототипное наследование).

Исходный код

[править | править код]

После выхода версии 0.18.1 исходный код Скретча был открыт на условиях Scratch Source Code License — представляющей собой простую копилефтную лицензию, с дополнительными ограничениями по неиспользованию оригинальных торговых марок (в более мягкой форме подобные ограничения включены, к примеру, в PHP License).

Код может быть загружен с официального сайта[4]. Условия его использования и распространения следующие:

  1. Вы не можете использовать слово «Scratch» для обозначения производных работ (за исключением фразы «на основе кода Scratch, созданного MIT Media Laboratory»),
  2. Вы не можете использовать в производных работах логотип Scratch или официального кота Scratch, защищённого авторским правом,
  3. Вы не можете реализовать возможность загружать проекты на любой другой веб-сайт кроме MIT Scratch (в настоящее время — на сайт http://scratch.mit.edu),
  4. копии или производные работы должны сохранять уведомления об авторских правах и лицензии Scratch, и
  5. исходный код производных работ должен оставаться доступным.

Распространяемый исходный код уже удовлетворяет данным условиям: в нём заменены логотип и спрайт с котом и удалён код сохранения Скретч-проекта на сайт.

Впрочем, поскольку Скретч (1.4) написан на Squeak, доступ к его исходным текстам существует и без предоставления их пользователю в явном виде — они хранятся вместе с результатом их компиляции в файле образа[англ.] Smalltalk-системы.

13 мая 2014 исходный код Скретч 2.0 был открыт под лицензией GPLv2[5].

Модификации и дальнейшее развитие

[править | править код]

На основе исходного кода Scratch 1.4 был создан ряд модификаций языка[6], таких как:

Разработан в Университете Беркли. Основным расширением языка, которое было введено в BYOB, стала возможность построения составных пользовательских блоков — аналога процедур обычных языков программирования. Поддерживаются рекурсия, замыкания и лямбда-выражения. Также добавлены отладчик и возможность компиляции в исполняемые файлы, вложенные спрайты, многомерные списки, улучшенная работа со скроллингом и компиляция исполняемых файлов. Начиная с версии 3.1 в BYOB добавлена поддержка ООП — спрайты BYOB теперь позволяют наследование на основе прототипов. Для этого в язык, в частности, введён механизм клонирования спрайтов.

Panther — расширяет Скретч поддержкой drag-n-drop управления спрайтами, возможностью клонирования спрайтов (объектов), и подсистемой CYOB (которая, как и BYOB, позволяет создавать собственные командные блоки, но требует для этого знания языка Squeak (современный диалект Smalltalk, на котором написан Скретч и его модификации).

Механизм Mesh

[править | править код]

И BYOB, и Panther включают поддержку механизма mesh[13], обеспечивающее взаимодействие скретч-программ через сеть посредством разделяемых переменных и посылки широковещательных сообщений.

Slash дополняет возможности BYOB 3.0 новыми возможностями Panther: клонированием и перетаскиванием спрайтов (объектов).

В 2008 году в Массачусетском технологическом институте также разработан образовательный язык программирования StarLogo TNG[14], который расширяет возможности системы StarLogo возможностями трёхмерной графики и скретчподобным языком визуального блочного программирования. В отличие от оригинального OpenStarLogo[15] и MIT Scratch — StarLogo TNG в настоящее время не является программным продуктом с открытым исходным кодом.

В феврале 2011 была выпущена первая онлайновая бета-версия Скретч 2.0[16], в который планируется включение некоторых из возможностей BYOB (таких, как создание пользовательских процедур), векторной графики, клонирование спрайтов, возможность групповой работы над проектами и т. д.. Официально бета-версия вышла в релиз 9 мая 2013.

Scratch 3.0 является третьей и текущей основной версией Scratch. Это полная переработка и повторная реализация Scratch, написанных на HTML5 и JavaScript . Он имеет новый, современный вид и дизайн. Он совместим со многими мобильными устройствами и не требует Flash. Выпущена 2 января 2019 года.

Ещё одной средой программирования, использующей стыковку визуальных логических блоков в стиле мозаики, стал App Inventor — экспериментальная система визуального программирования для платформы Android.

Более прямым аналогом языка Скретч на Android является язык Catroid, который разрабатывается в Институте Технологий Программного Обеспечения Технического Университета Граца в Австрии[17].

Примечания

[править | править код]
  1. Creating from Scratch: New software from the MIT Media Lab unleashes kids' creativity online. Дата обращения: 14 ноября 2010. Архивировано 25 марта 2014 года.
  2. Lifelong Kindergarten Group. Дата обращения: 25 июля 2008. Архивировано 8 февраля 2011 года.
  3. http://s4a.cat. — проект Скретч для Arduino. Дата обращения: 11 апреля 2014. Архивировано 13 апреля 2014 года.
  4. Scratch Source Code. Дата обращения: 25 июля 2008. Архивировано из оригинала 6 июля 2008 года.
  5. Scratch 2.0 Offline Open Source Code! — Discuss Scratch. Дата обращения: 26 августа 2014. Архивировано 12 октября 2014 года.
  6. Scratch Modifications. Дата обращения: 14 ноября 2010. Архивировано 12 марта 2016 года.
  7. Build Your Own Blocks (BYOB) Архивная копия от 23 августа 2010 на Wayback Machine home page
  8. Build Your Own Blocks (BYOB) (Scratch Modification) Архивная копия от 3 апреля 2016 на Wayback Machine in Scratch wiki
  9. Panther — based on Scratch Архивная копия от 19 апреля 2021 на Wayback Machine home page
  10. Panther (Scratch Modification) Архивная копия от 30 марта 2016 на Wayback Machine in Scratch wiki
  11. Slash Project. Дата обращения: 14 ноября 2010. Архивировано 11 августа 2019 года.
  12. Slash (Scratch Modification) Архивная копия от 15 ноября 2010 на Wayback Machine in Scratch wiki
  13. Mesh. Дата обращения: 26 апреля 2011. Архивировано 4 апреля 2016 года.
  14. StarLogo TNG. Дата обращения: 26 апреля 2011. Архивировано 19 апреля 2015 года.
  15. OpenStarLogo. Дата обращения: 26 апреля 2011. Архивировано из оригинала 17 мая 2011 года.
  16. Scratch 1.0. Дата обращения: 26 апреля 2011. Архивировано 16 августа 2016 года.
  17. Catroid Website. Дата обращения: 5 марта 2012. Архивировано 14 февраля 2022 года.

Литература

[править | править код]
  • Super Scratch Programming Adventure! Learn to Program. — No Starch Press, 2012. — 160 p. — ISBN 978-1-59327-409-2, 978-1-59327-531-0.
  • Jr. Jerry Lee Ford. Scratch Programming for Teens. — Cengage Learning PTR, 2008. — 336 p. — ISBN 978-1598635362.
  • Sam Patterson. Ch. 6. Scratch and Other Web-Based Progtamming Platforms // Programming in the Primary Grades: Beyond the Hour of Code. — Rowman & Littlefield, 2016-03-21. — 121 с. — P. 49—58. — 98 p. — ISBN 9781475825459.
  • Патаракин Е. Д. Учимся готовить в среде Скретч. Придумай — Запрограммируй — Поделись. Архивная копия от 22 февраля 2014 на Wayback Machine
  • Патаракин Е. Д. Педагогический дизайн социальной сети Scratch // Образовательные технологии и общество (Educational Technology & Society). 2013. № 2. P. 505—528. http://ifets.ieee.org/russian/depository/v16_i2/html/12.htm
  • Рындак В. Г., Дженжер В. О., Денисова Л. В. Проектная деятельность школьника в среде программирования Scratch. Учебно-методическое пособие / Оренбургский государственный институт менеджмента. — Оренбург, 2009. Архивная копия от 22 февраля 2014 на Wayback Machine
  • Голиков Д. В., Голиков А. Д. Книга юных программистов на Scratch. — SmashWords, 2013. — ISBN 978-1310227554.
  • Александр Казанцев. Школа. Исполнители и алгоритмы // Linux Format. — январь 2010. — № 126—127 (1).
  • Carolyn Y. Johnson (2007-05-15). "With simplified code, programming becomes child's play" (англ.). The Boston Globe. Дата обращения: 16 апреля 2012.
  • Валерий Рубанцев. Занимательные уроки со Скретчем. RVGames. 2016—260 с.