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

SandCastleIcon.png Эта статья содержит ссылки на веб-сайты или программы. Которым не доверяет Scratch или которые размещены в Википедии. Не забывайте оставаться в безопасности при использовании Интернета. Так как мы не можем гарантировать безопасность других веб-сайтов.
Щелк! (Постройте Свои Собственные Блоки)
Snap-logo.png
Версия 6.7.4
Операционные системы Любой HTML5-совместимый веб-браузер (включая планшеты iOS и Android)
Цель создания Строительство собственных блоков; все первоклассно
Разработчик(ы) Йенс Мениг, Брайан Харви, Майкл Болл. Бернат Ромагоса, другие
С открытым исходным кодом? Да (AGPLv3)
Язык программирования JavaScript (и HTML как язык разметки)

Отпустили? ДА
Совместим с Scratch 1.3, 1.4, 2.0 и 3.0
Официальный Сайт https://snap.berkeley.edu
Архивная Тема Форума ar-тема:34284
2.0 Тема Форума http://scratch.mit.edu/discuss/topic/4455

Щелк!, также известный как Build Your Own Blocks или BYOB, представляет собой расширенную реимплементацию Scratch, включающую первоклассные процедуры. Первоклассные списки и первоклассные спрайты с наследованием. Более ранняя версия, BYOB. Была модификацией исходного кода Scratch 1.4, но текущая версия представляет собой совершенно отдельную программу. Хотя ее пользовательский интерфейс выглядит как Scratch 1.4 и включает в себя почти все ее примитивные блоки.

BYOB был первоначально разработан компанией Scratcher Йенс; начиная с версии BYOB 3.0, Скретчер Бхарви присоединился к нам в качестве со-разработчика. (Код по-прежнему почти полностью написан Jens; bharvey внес свой вклад в разработку. Библиотеки и документацию. А также онлайн-наставничество Snap! пользователи.)

Примечание Примечание: Scratch был феноменально успешным в введении молодых людей в компьютерное программирование; частью этого успеха был подробный. Продуманный дизайн каждого маленького фрагмента языка. В частности. Они решили опустить некоторые функции. Чтобы не сбивать с толку юных пользователей. Tl;dr объяснение Snap! это то. Что он добавил эти отсутствующие функции. Когда в статье говорится ! был разработан. Чтобы преподавать компьютерные курсы для подростков. Решение может быть хорошо для целевой аудитории Scratch. Но не для Snap! целевая аудитория. В каждом случае команда Scratch знала о возможностях. Которые они решили опустить. Ничто в этой статье не должно их оскорблять.

Щелчок! интерфейс

Характеристики

Основные функции. Добавленные в Snap! это пользовательские блоки (создание пользовательских блоков). Первоклассные процедуры. Первоклассные списки. Первоклассные спрайты с наследованием объектов. Первоклассные костюмы и звуки. А также улучшенный пользовательский интерфейс.

В этой статье рассматриваются только самые важные функции; обратитесь к оснастке! Справочное руководство для более канонического руководства.

Создайте Свои Собственные Блоки 1.0 Особенности

BYOB 1.0 был выпущен 21 октября 2008. Он был основан на Scratch 1.3. Вот рисунок из его документации. Показывающий. Как блок может быть сделан рекурсивным.

BYOB1.png

Пользовательские Блоки

Способность создавать пользовательские блоки была первой целью BYOB. Что отражено в его названии. Ограниченная версия этой возможности. Допускающая только командные блоки. Позже стала частью Scratch 2.0. То, что описано здесь. — это текущая форма этой функции. Которая резко изменилась в BYOB3.

Чтобы начать создавать блок. Используйте кнопку в конце каждой палитры. Полупрозрачный знак

Make-button.pngЗнак плюса.pngКонтекстное меню.png

Блок-диалог.png

В появившемся диалоговом окне. Помимо присвоения блоку имени. Пользователь может выбрать категорию палитры (цвет). Форму (команда. Репортер или предикат) и выбрать. Будет ли она предназначена для всех спрайтов или только для одного.

При нажатии кнопки ОК открывается редактор блоков окно, по сути. Отдельная область сценариев только для этого определения блока. В редакторе блоков пользователь может добавлять входные данные в блок и при необходимости задавать тип входных данных. А также добавлять скрипт. Определяющий действия блока. Использование отдельного окна редактора сильно отличается от дизайна пользовательских блоков Scratch 2.0, в котором все пользовательские блоки являются фиолетовыми. Локальными для спрайта и видимыми в области сценариев спрайта. Цвет не так важен, но идея. Лежащая в его основе, такова: Скретч-дизайн рассматривает пользовательский блок как нечто очень отличное от примитивного блока. Щелчок! дизайн пытается сделать пользовательские блоки такими же хорошими. Как и примитивные; в идеале. Как только блок написан. Он также может быть примитивным. Тот факт. Что пользовательские блоки Scratch являются спрайт-локальными. Является результатом того. Что их определения должны появляться в области сценариев некоторого конкретного спрайта. Сохранение определений блоков видимыми в области сценариев подчеркивает. Что пользовательский блок-это, по сути. Аббревиатура сценария. И гарантирует. Что весь код пользователя будет виден пользователю. Но сохранение определений видимыми частично разрушает цель написания процедур. А именно. Скрыть детали и программу на более высоком уровне абстракции.

Еще одним отличием является обработка входов в пользовательский блок. Внутри определения скретч-блока вход представлен фиолетовым овалом. Содержащим имя входа. Эти входные данные являются переменными. Но Scratch рассматривает вход процедуры как нечто очень отличное от (глобальной) переменной. В Щелчке!, входы являются оранжевыми овалами. Как и другие переменные. И их значения могут быть изменены с помощью установленных блоков. Кроме того, процедуры могут иметь локальные переменные. Которые не являются входными данными. Используя scriptvariablesa  блок для их создания. Как и входные данные. Эти переменные скрипта существуют только внутри скрипта. Каждый вызов блока создает отдельный набор переменных скрипта; это особенно важно при использовании рекурсии, избегая необходимости создания пользователем явного стека.

Создайте Свои Собственные Блоки 2.0 Функции

BYOB 2.0 был выпущен 30 августа 2009 года. Он обновил базовый скретч-код до версии 1.4 и добавил несколько улучшений пользовательского интерфейса. Включая отмену.

Вложенные Спрайты

Основной особенностью, добавленной в BYOB 2.0, была возможность создавать коллекцию спрайтов. Которые движутся вместе. Канонический пример-скелет. В котором каждая кость прикреплена к одной ближе к позвоночнику; весь скелет может вращаться вместе. Или конкретная кость может вращаться относительно целого.

Пловец.png

Создайте Свои Собственные Блоки 3.0 Особенности

BYOB3 был выпущен 25 апреля 2010года . Он ввел первоклассные процедуры и списки.

Процедуры первого класса

Command-ring.png Репортерское кольцо.png Кольцо предикатов.png

Тип данных является первым классом в языке. Если он может использоваться таким же образом. Как и любой другой тип данных. Например, в Scratch легко составить список номеров. Но список списков невозможен; номера-первый класс. Но списки-нет. Один из лозунгов Snap! это Самое большое. Самое важное различие между BYOB2 и BYOB3 заключалось в том. Что последние вводили процедуры первого класса. Серые кольца выше используются для разрешения процедур (блоков и скриптов) в качестве данных. Картинка стоит 1000 слов здесь:

2plus3.png 2plus3ring.png

Слева щелчок без кольца 2+3 дает 5. Справа. Помещая 2+3 в кольцо. Вы получаете сам 2+3 блок.

Звоните.png Call2+3.png

Единственная причина создания кольцевой процедуры заключается в том. Что позже она будет вызвана.

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

Хотя создание процедур первого класса было самым важным изменением в BYOB3, Йенсу и Бхарви потребовалось три попытки. Чтобы получить правильную нотацию. Одна из лучших вещей в Scratch-это тщательное проектирование каждого синтаксического элемента (например. С-образных блоков). Чтобы лежащая в основе идея информатики (например. Циклирование) была очевидна для ученика Scratch. Просто увидев визуальное представление (например, стрелку в нижней части циклического блока).

В BYOB3 представление инкапсулированного блока. Который теперь называется серым кольцом. Было неуклюжим theblock как для репортеров. Так и Сценарий.pngдля команд. Текущее представление. Серое кольцо. Было усовершенствовано путем предоставления серого кольца в качестве входного слота в блоках. Которые ожидают процедуру в качестве входных данных. Таких как вызов и карта выше. В результате пользователям редко приходится иметь дело непосредственно с кольцами. Если он нужен. Он уже есть. Перетаскивание кольцевого блока во входной слот с кольцом переменной во входной слот с кольцом удаляет кольцо. Так как смысл почти всегда заключается в том. Что значение переменной является желаемым выражением для запуска.

Читая приведенный выше пример карты. Было ли сразу очевидно. Что каждый элемент списка вставлен в пустой слот +3блока? Учителям начальной школы все знают. Что если восьмилетним с х+3=7Х? скорее всего. Они ответят: Щелк! использует эти знания при разработке нотации для функций. При вызове функции с серым кольцом и входными данными вызовите ищет пустой входной слот внутри кольца. И именно туда вставляется входное значение. Эта нотация делает очевидным простой вызов функции в духе Scratch-попытки использовать визуальное представление. Чтобы сделать идеи очевидными. Механизм пустого входного слота недостаточно хорош для сложных случаев. Таких как вложение вызова карты внутри ввода функции в другой вызов карты. В этих случаях серым кольцам можно дать явные входные имена. Точно так же. Как пользовательскому блоку: x+3inputnames:x .

В литературе по информатике эквивалентом серого кольца является лямбда-выражение: λx. x+3. В Lisp, языке программирования. Который привлек внимание более широкого круга программистов к лямбда-выражениям. Они написаны следующим образом: (lambda (x) (+ x 3)).

Списки первого класса

Добавление лямбды в Scratch позволило изобрести любую структуру управления; другая большая проблема с Scratch заключается в том. Что списки не могут быть элементами других списков. Поэтому невозможно просто построить сложные данные сооружения. В Scratch список-это своего рода переменная: у него есть имя и значение. Как и у переменной. Но у значения есть подценности (элементы). Scratch предоставляет красный овал для списка. Как и оранжевый для переменной. Но значение. Которое он сообщает. Не является фактическим списком; это конкатенация всех элементов. Разделенных пробелами. Это работает. Потому что только строки и числа могут быть элементами в списке.

Скретч — списки объединяют в себе две логически разделенные возможности. Основная возможность списка состоит в том. Что он может добавлять, изменять. Удалять и сообщать элементы. Вторая возможность-связать имя со списком. И это должно быть задание переменной. Если пользователь хочет список с элементами setAnimaniacstolistYakkoWakkoDot.

Блок списка-это единственная совершенно новая возможность. Необходимая для поддержки списков в качестве первоклассных данных. Существующие блоки временного списка делают все остальное. Что необходимо. Но так как имена больше не обязательно связаны со списками. Выпадающие входы имен списков в блоках временного списка заменяются входными слотами типа списка: Listblock.png. Белый прямоугольник с толстыми оранжевыми линиями внутри должен выглядеть как наблюдатель списка с оранжевыми элементами.

Когда BYOB3 был выпущен в 2010 году. Его разработчики все еще надеялись. Что скретч-команда будет убеждена добавить свои функции. Чтобы поцарапать себя. Поэтому дизайн свел к минимуму количество добавленных новых блоков. Создав новые функции пользовательского интерфейса. Такие как блоки переменной арности. Которые в противном случае могли бы быть несколькими блоками: call versus call withinputs:versus call inputlist:listinput1input2... .
В итоге понадобилось всего семь блоков и одна кнопка:

Just8.jpg

(Run и launch эквивалентны вызову сценариев командных блоков; run-это как трансляция и ожидание , в то время как launch-это как трансляция, а не ожидание завершения запущенного сценария. Отчет-это то. Что пользовательский репортер или предикат использует для сообщения значения своему вызывающему объекту.)

BYOB 3.0 на самом деле имел еще несколько блоков. Просто для удобства. Не связанных с этими основными функциями. Например, truefalseбыли добавлены репортеры логических значений and. Чтобы избежать некоторых специальных идиом в программах Scratch. Которые нуждались в булевых константах.

Создание Собственных Блоков 3.1 Особенности

Первоклассные спрайты и наследование прототипного стиля были основными изменениями в BYOB 3.1, официально выпущенном 18 мая 2011 года. Но с версиями разработки. Доступными в Интернете за несколько месяцев до официального релиза.

Спрайты первого класса с наследованием

Объектно-ориентированное программирование-это стиль. Основанный на абстракции объекта: совокупности данных и методов (процедур. Которые в Snap! просто больше данных). С которым взаимодействуют. Посылая ему сообщение (просто имя, возможно. В виде текстовой строки. А возможно. И дополнительные входные данные). Объект отвечает на сообщение. Выполняя метод. Который может сообщить или не сообщить значение обратно спрашивающему. Некоторые люди подчеркивают скрытие данных аспект ООП (поскольку каждый объект имеет локальные переменные. К которым другие объекты могут получить доступ только путем отправки сообщений запроса объекту-владельцу). В то время как другие подчеркивают аспект моделирования (в котором каждый объект абстрактно представляет что-то в мире и взаимодействия объектов в программе моделируют реальные взаимодействия реальных людей или вещей). Сокрытие данных важно для крупных мультипрограммных промышленных проектов. Но для Snap! пользователи это аспект моделирования. Который важен. Щелчок! таким образом. Подход является менее ограничительным. Чем у некоторых других языков ООП; объекты получают легкий доступ к данным и методам друг друга.

Scratch предоставляет очень естественный набор объектов. А именно спрайты. Объектно-ориентированное программирование опирается на три опоры:

  1. Постоянное местное государство. Объект должен иметь возможность запоминать свою историю от одного действия к другому в переменных. Имена которых являются частными для этого объекта. Скретч-спрайты имеют это в виде переменных
  2. Передача сообщений. Один объект должен уметь просить другой объект что-то сделать. Посылая ему сообщение. Scratch точно не обладает такой способностью. Но спрайт может транслировать сообщение всем спрайтам. Щелк! добавляет истинную передачу сообщений. При которой сообщения принимают форму блоков или скриптов. Которые выполняются с использованием локальных блоков и переменных получателя.
  3. Наследование. Очень часто два или более объекта совместно используют некоторые методы (локальные процедуры). Объектно-ориентированное программирование было бы безнадежно сложным. Если бы методы должны были дублироваться вручную в каждом объекте. Таким образом. Объектно-ориентированные языки предоставляют возможность одному объекту наследовать методы и данные от другого. Начиная с Scratch 2.0, существует ограниченная форма наследования: можно клонировать спрайт; полученный спрайт является копией оригинала. И является временным; когда программа перестает работать. Временные клоны удаляются. Временные клоны хороши для таких вещей. Как кирпичи в игре Прорыва; все они имеют одинаковое поведение. Просто разные позиции. И могут быть воссозданы в начале каждой новой игры. Но иногда проект нуждается в постоянных клонах; одним из примеров может быть четыре призрака в игре Pacman. Каждый из которых имеет немного различное поведение. Щелк! обеспечивает оба вида клонирования: клоны. Созданные в программе. Используя createacloneofблок или. Так как спрайты являются первоклассными данными в Snap!, новый anewcloneofmyself репортер. Это временно. Клоны. Созданные из пользовательского интерфейса, например. Щелчком правой кнопкой мыши по значку спрайта в sprite corral и выбором опции

Клон не является копией своего родителя; он разделяет атрибуты родителя. Так, например. Если костюм родителя удален. То он исчез и в ребенке. Тем не менее. Если что-то изменилось в ребенке, то связь этого атрибута с родителем нарушается. И у ребенка есть отдельный атрибут. Чем бы он ни был. Если ребенок импортирует новый костюм. Весь его гардероб (список всех его костюмов) копируется у родителя. Затем добавляется новый костюм. И после этого два спрайта являются независимыми относительно костюмов.

Это может сбить с толку. Если ребенок разделяет некоторые атрибуты своего родителя. Но не другие. Чтобы избежать путаницы, атрибуты. Представленные блоками палитры. Являются призраками в дочерней палитре и наблюдателях переменных:

Ребенок нарушает наследование атрибута от своего родителя. Изменяя его значение. Если позиция ребенка наследуется, movestepsто нарушится наследование как позиции x. Так и позиции y. Но setxtoнарушит наследование позиции x. Оставив нетронутым наследование позиции y.

Что делать, если ребенок нарушил наследование некоторого атрибута и теперь хочет восстановить наследование этого атрибута от своего родителя? Новый блок inheritx positionпозволяет это. Выпадающее меню включает стандартные атрибуты спрайта. Но переменные и другие блоки атрибутов могут быть удалены из входного слота меню. Если они заключены в кольцо: inheritvar  inheritxposition .

Прототипирование против ООП класса/экземпляра

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

Если классы необходимы. Сделайте спрайт. Дайте ему потомков. Затем hideродителя. Родитель тогда фактически является классом.

Другой способ. Которым эта конструкция ООП является нетрадиционной. Заключается в том. Что она использует блоки (процедуры) в качестве сообщений, и любой блок может быть использован. А не только те. Которые получатель объявил как открытые методы. Как объяснялось ранее. В оснастке! дизайн. Сокрытие данных менее важны. Чем моделирование. Использование объектов в качестве метафор для некоторой реальной системы агентов.

Примечание: ООП не требует специального языка ООП. Если язык имеет первоклассные процедуры и лексическую область. То в нем можно построить объектную систему. Смотри, какой щелчок! Справочное руководство для получения более подробной информации.
Подробности в BYOB 3.1 Наследование против Щелк! 4.1

Версия 3.1 предшествовала Scratch 2.0, поэтому она не включала временные клоны в стиле Scratch; все клоны. Сделанные в графическом интерфейсе или программе. Были постоянными (до тех пор. Пока явно не были удалены). Кроме того, разработчики подумали. Что пользователи. Скорее всего. Захотят унаследовать определенные атрибуты спрайта. А не другие. И попытались угадать. Какие именно. Опыт позже показал. Что пользователям было легче понять. Были ли все атрибуты изначально унаследованы. Тем более что присвоение нового значения дочернему атрибуту нарушает наследование. Вероятно, именно то. Что хочет пользователь.

Щелк! 4.0 Особенности

Щелк! 4.0, выпущенный 1 мая 2015 года. Был полностью переписан на JavaScript. Чтобы работать в браузере. Потому что учителя жаловались. Что их школы не разрешают им загружать программное обеспечение. Разработка началась в 2011 году. Примерно в то же время. Когда команда Scratch начала работать над Scratch 2.0. Они тоже хотели работать в браузере. Одним из отличий между этими двумя проектами было то. Что Scratch предпочел использовать Adobe Flash. В то время как Snap! он был построен вокруг HTML5 Canvas. Обе команды знали. Что Flash-это умирающая технология. А Canvas только начинается. Но команда Scratch чувствовала. Что они не могут позволить себе потерять доступ к камере и микрофону пользователя и возможность использовать тембры MIDI-музыкального инструмента. Ни один из них не был доступен в HTML5 в 2011 году. Напротив, Щелчок! команда, без бюджета и одного разработчика, нуждалась в 4.0, чтобы быть на платформе. Которая будет длиться долго. BYOB3 был основан на исходном коде Scratch 1.4, но Snap! полностью отделен от Scratch 2.0 и более поздних версий.

С самого начала использования BYOB в средних школах было несколько жалоб на неуместность этого названия. Опыт показывает. Что люди за пределами США не понимают. Почему этот каламбур можно считать неуместным. И даже в США вряд ли кто-то видел в нем проблему. Но те немногие. Кто жаловался. Были очень настойчивы, говоря. Что их школы никогда не позволят им использовать программное обеспечение с таким названием.

Поэтому, неохотно. Команда искала какое-то подходящее название. Которое уже не было названием языка программирования. Никто на самом деле не любил Бхарви настоял на том. Чтобы добавить восклицательный знак. Для легкого намека на индивидуальность. И он стал выделен курсивом после того. Как Scratcher nXIII разработал логотип. В котором он выделен курсивом.

По большей части-Щелк! 4.0 воспроизводит функциональность BYOB 3.0. В версии 4.0 появились первоклассные продолжения, веб-доступ. Связанные списки и возможность написания пользовательских блоков на JavaScript.

Продолжение первого класса

Прежде чем присоединиться к Snap! проект. Бхарви провел 20 лет обучения информатике. Используя то. Что многие считают лучшим вводным учебником CS, структуру и интерпретацию компьютерных программ (SICP). Курс использует язык программирования Scheme. Хотя речь не идет о Scheme. Потому что это язык. Который обеспечивает наибольшую универсальность в поддержке различных стилей программирования с наименьшим количеством синтаксиса. Чтобы получить в пути. Схема была моделью для BYOB/Snap! языковой дизайн с BYOB 3.0. Одним из лозунгов команды является ! является схемой. Замаскированной под царапину.

BYOB 3.0 был, возможно. На 90% реализацией схемы. Достаточной для преподавания курса наоснове SICP. Но не хватало двух основных продвинутых возможностей. Один из них, макросы, наполовину реализован начиная с BYOB 3.0, а именно возможность для пользовательского блока иметь недооцененные входные данные. (Другая половина. Возможность вводить код в вызывающий блок. Еще впереди.) Вторая большая продвинутая возможность-это первоклассные продолжения.

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

Продолжения не являются особенностью Схемы. Любая часть вычисления на любом языке имеет продолжение—все. Что остается сделать после его завершения. Но в большинстве языков программист не обязан думать о продолжении как о чем-то, хотя разработчик языка программирования действительно думает о продолжениях. Особенность Scheme заключается в том. Что она рассматривает продолжения как первоклассные данные. Предоставление программисту доступа к продолжениям позволяет пользователям писать любую управляющую структуру; наиболее распространенными примерами являются нелокальный выход (catch and throw in the Snap! библиотека инструментов) и планировщик потоков.

Даже SICP не учит первоклассным продолжениям в качестве вводной темы. Хотя он учит соответствующей идее стиль передачи продолжения.Добавление первоклассных продолжений в Snap! Это было больше посадкой флага. Чем удовлетворением практической потребности.

Функция воплощена в двух блоках, run w/continuationа call w/continuation.

Веб-доступ

Щелк! 4.0 ввел http://snap.berkeley.eduблок (позже переименованный URL, чтобы разрешить https-соединения). Который считывает веб-страницу и сообщает содержимое страницы (обычно HTML-код). Это оказалось менее полезным. Чем ожидалось. Потому что браузеры ограничивают Иногда для решения этой проблемы можно использовать сайт

Связанные списки

Структура данных. Которая Scratch (и. Следовательно. BYOB) вызывает динамический массив, т. Е. Непрерывный блок памяти. Который расширяется по мере необходимости. Связанный список-это другая структура данных. Состоящая из пар; каждая пара содержит один элемент списка плюс указатель на другую пару. Так что весь список содержит столько же пар. Сколько и элементов. И они не обязательно должны быть смежными в памяти. Как оказалось. Динамические массивы наиболее эффективны в последовательном императивном программировании. В то время как связанные списки более эффективны для рекурсивного функционального программирования.

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

Set-to-double.png

Двойная итерация.png

Двойная рекурсивность.png

В итеративной версии блок команд add расширяет размер списка на один элемент каждый раз. Когда он вызывается. Этот вид доступа к спискам наиболее быстр с динамическими массивами.

В рекурсивной версии перед блоком создается новая пара. Левая половина которой является новым элементом. А правая — (указателем на) результатом рекурсивного вызова. А именно подлистом результата. Это самый быстрый вариант со связанными списками.

Это цель Snap! что пользователи не должны ничего знать о структурах данных. Но все равно должны иметь свой проект как можно быстрее. Поэтому, Щелк! автоматически создает связанные списки . Когда используются репортеры (элемент, все, кроме первого, перед), но создает динамические массивы . Когда команды (добавить, вставить, заменить, удалить) используются. Единственный случай. Когда результирующие программы не настолько эффективны. Насколько это возможно. — это если пользователь использует оба стиля программирования с одним и тем же списком. Который затем должен быть преобразован из одной формы в другую. (Следует отметить. Что все это не имеет значения для небольших списков. Это становится важным в проектах

JavaScript в пользовательских блоках

Наверное. Это самая важная новинка в Snap! 4.0 оказался JavaScriptfunction(){}блоком. В этом примере неважно. Что он на самом деле делает; вместо этого обратите внимание. Как входные данные передаются из оснастки! окружающая среда для мира JavaScript.

Speak-block.png

Этот пример взят из библиотеки преобразования текста в речь. Многие библиотеки были написаны продвинутыми пользователями; написание библиотек-это способ пользователей. Которые думают. Что они узнали все ! должен научить может исследовать программирование JavaScript. Оставаясь в оснастке и вносясвой вклад в нее ! сообщество.

Щелк! 4.1 Особенности

Щелк! 4.1, выпущенный 22 октября 2017 года. Добавил первоклассные спрайты с наследованием, как в BYOB 3.1, за исключением того. Что было добавлено различие между постоянными и временными клонами. И все атрибуты родителя изначально совместно используются с дочерним. Кроме того, костюмы и звуки-это первый класс.

Щелк! 4.2 Особенности

Щелк! 4.2, выпущенный 22 июня 2018 года. В частности. Добавил автоматическое резервное копирование проектов. Хранящихся в облаке. Чтобы пользователи могли восстанавливаться после катастроф. Таких как сохранение пустого проекта с тем же именем. Что и важный. Он также имеет начало векторного редактора костюмов.

Щелк! 5.0 Особенности

Щелк! 5.0, выпущенный 27 июня 2019 года. В частности. Добавил автоматическое преобразование текстовых. Электронных таблиц (CSV) или JSON-файлов. Которые перетаскиваются на Snap! окно в списки. В переменной. Названной в честь имени файла. Опция в наблюдателе переменных позволяет выполнять преобразование в другом направлении. Из структурированного списка в текст.

Многие новые примитивы были добавлены для медиа-вычислений. Позволяя манипулировать костюмами и звуками. С доступом к отдельным пикселям или образцам. Соответственно.

Еще одним очень заметным изменением стало то. Что многие блоки. Ранее включенные в библиотеку Инструментов. Стали примитивами. Это изменение тесно связано с особенностями вычислений носителей. Которые сделали важной возможность быстрой обработки списков с сотнями тысяч элементов. Недостатком этого изменения является то. Что оно лишает учащихся опыта написания таких блоков. Как map или for in Snap! сам по себе, с очень короткими. Простыми сценариями. (То есть учащиеся все еще могут это делать. Но они менее склонны видеть в этом необходимость. Когда эти инструменты предоставляются автоматически.)

В то же время прежняя статическая домашняя страница по адресу https://snap.berkeley.edu был заменен динамическим сайтом сообщества с избранными проектами. Недавними проектами. Отображением опубликованных проектов для каждого пользователя и так далее. Похожим на сайт Scratch. Но менее функциональным. Позже был добавлен отдельный. Но связанный дискурсивный форум.

Щелк! 5.1 Особенности

Щелк! 5.1, выпущенный 8 августа 2019 года. Имел улучшения в примитивах вычислений носителей. Новый блок вставки. Который штампует спрайт на другой спрайт. А не на сцену. И важную возможность изменять временный/постоянный статус клона программно (в скрипте).

Щелк! 5.2 Особенности

Щелк! 5.2, выпущенный 24 октября 2019 года. Добавил дополнительные улучшения в вычисление медиа. В первую очередь конструкторы нового костюма и нового звука для создания анонимных медиа-объектов из их компонентов (пикселей или сэмплов).

Щелк! 6.0 Особенности

Щелк! 6.0, выпущенный 8 июля 2020 года. Имел два очень существенных изменения. Во-первых, лежащая в основе morphic.js графический движок был полностью переписан. Чтобы использовать отдельный холст для визуализации каждого морфа. Вместо редактирования пикселей в одном большом холсте. Это изменение было ответом на несоответствие Хрома. Которое вызывало Snap! окна становятся белыми и замерзают. Но это имеет дополнительные преимущества в уменьшении объема памяти проектов и. Во многих случаях. Ускорении их работы.

Во-вторых, скалярные операторы (функции одного или двух отдельных чисел или строк. Таких как + и присоединиться, а не те. Которые требуют списки в качестве входных данных) были превращены в hyperblocks, что означает. Что они ведут себя так. Как всегда для атомной (числовой или текстовый) входы. А также принимает список в качестве входных данных. Вызываются соответствующие скалярные функции для каждого атома (или каждую пару атомов. Для диадных операторов):

Matrix-add.png Вектор-длина.png

Гиперблоки обеспечивают чрезвычайно быструю обработку медиаданных. Они не совсем делают все. Что вы хотели бы сделать с векторами и матрицами; например. Гипер-умножение двух матриц просто умножает соответствующие ячейки на пары; реальное умножение матрицы очень отличается от этого. Библиотека APL реализует примитивы массива языка APL. Который строится вокруг векторов и матриц как типы данных. См.Приложение В к Справочному руководству.

Щелк! 6.1 Особенности

Щелк! 6.1, выпущенный 30 июля 2020 года. Исправлено несколько ошибок. Добавлена документация по процессу миграции для Snap! расширения. Основанные на старом морфическом. Чтобы иметь возможность работать с новым. И добавили одну популярную функцию, возможно. Более полезную в качестве пропаганды. Чем на практике, опция

Fade-solid.png Fade-medium.png Увядание-мерцание.png Fade-elegant.png

Многие Другие Функции

Каждый выпуск добавлял десятки функций. Не обсуждаемых здесь. Потому что они не поднимались до уровня важности пользовательских блоков. Первоклассных процедур. Первоклассных списков. Первоклассных спрайтов и первоклассных продолжений. Вот репрезентативная выборка:

Универсальный Шляпный блок

when 

Пользовательские шляпные блоки были частым запросом пользователей с первых дней появления пользовательских блоков. Универсальный блок when, введенный в версии 4.0, отвечает на эту потребность. Эта функция требовала особенно тщательного проектирования . Потому что сценарий в некотором смысле всегда работает неявноforeverif, поэтому он может замедлить работу проектов. Использующих его. Даже если пользователь попытается остановить все сценарии. Чтобы избежать этой проблемы. Универсальные шляпные блоки. В отличие от всех других шляпных блоков. Отключаются красной кнопкой остановки или stopall блок. Некоторые другие сценарии должны выполняться либо потому. Что событие запускает свой блок hat. Либо потому. Что пользователь нажимает на него. Чтобы снова включить общие блоки hat.

Окраска Зебры

Zebra.png

Эта функция, введенная в BYOB 3.0, представляет собой проявление пристального внимания к пользовательскому интерфейсу в BYOB/Snap!. Когда одноцветные блоки вложены. Трудно увидеть границы между ними. Зебра окраска назначает два цвета для каждой категории палитры. Нормальный цвет и более светлый цвет. Когда одноцветные блоки вложены. Самый внешний имеет нормальный цвет. А внутренний блок принимает противоположный цвет от того. Который находится снаружи. Текст внутри светлых цветных блоков черный, а не белый. Как обычно.

Подробный Блок Шляпы Событий Мыши

Мышь-блок.png

Начиная с 4.1, пользователи могут обнаруживать все события мыши. А не только щелчки. (Опция Чтобы предотвратить запуск сценариев, сценарий

Пауза и визуальный шаг

Управление-кнопки.png

Начиная с 3.0, в строке меню появилась кнопка паузы между зеленым флагом и знаком стоп. Нажатие кнопки приостанавливает планировщик потоков и заменяет значок Щелчок снова продолжает запуск проекта. Существует также pauseall❚❚ блок. Который можно вставить в сценарий. Чтобы установить точку останова во время отладки.

Начиная с версии 4.0, функция визуального шага с нуля версии 1.4 (в которой она ошибочно называется Single Stepping) управляется кнопкой строки меню (со значком ноги) и ползунком. Появляющимся при нажатии кнопки. Управляющей скоростью. Если ползунок полностью влево. Используется true single-steping: кнопка паузы должна быть нажата для каждого шага. Если пользовательский блок редактируется после включения визуального шага. Шаг включает блоки внутри этого окна редактирования. (Можно открыть несколько редакторов.)

Костюмы первого класса и Следы Пера

Начиная с 4.1 существует pentrailsблок. Который сообщает обо всем. Что в данный момент нарисовано или отпечатано на сцене. Как о костюме. Поскольку костюмы являются данными первого класса. Этот блок можно использовать в качестве входных данных для любого блока. Например,,addpentrailstomycostumes,switchtocostumepentrails, или saypentrailsfor2secs.

Интеллектуальные предшественники

Пользовательские Блоки

Способность писать и вызывать процедуры. Которая является основной идеей построения собственных блоков. Была частью почти каждого языка программирования (с аппаратной поддержкой в каждой конструкции процессора. По крайней мере. В объеме инструкции для сохранения обратного адреса где-то перед переходом к процедуре) в истории вычислений. (В оригинальном Fortran. Первом универсальном языке программирования высокого уровня. Процедуры не были реентерабельными. Как скрипты Scratch. Которые обрываются на середине. Если событие. Которое запустило сценарий. Происходит снова.)

Mapwithexample.png

Glide BYOB.png

Среди языков. Предназначенных в первую очередь для детей. Были жаркие дебаты между сторонниками BASIC и Logo, потому что последний включал поддержку рекурсивных процедур. А первый-нет. Ограничившись вместо этого чем-то очень похожим на Scratch Broadcast () и Wait block. Сеймур Паперт, один из изобретателей логотипа и основатель Лаборатории логотипа Массачусетского технологического института, утверждал. Что рекурсия является одной из математических больших идей. Которые дети должны изучать на компьютерах программирования.

Первоклассные Данные

Фраза первоклассные данныеКристофером Стрейчи, который утверждал в 1960-х годах. Что любой тип данных. Который вообще существует в языке. Должен быть первоклассным. Это означает. Что данные такого типа:

  • может быть значением переменной.
  • может быть входом в процедуру (Scratch: block).
  • об этом можно сообщить с помощью процедуры.
  • может быть членом агрегата (Scratch: list).
  • может существовать. Не имея имени.

Легко понять. Зачем нужны списки списков; любая структура данных (деревья, кучи. Хэш-таблицы и т. Д.) Может быть построена из списков. Но не прямолинейно. Используя только списки текстовых строк. Но почему процедуры должны быть первоклассными? Исторически это противоречило здравому смыслу. Особенно потому. Что процедура не может быть рекурсивной. Если у нее нет имени. Которым она себя называет.

Идея первоклассных процедур исходит в конечном счете из изобретения математиком Алонсо Черчем в 1936 году лямбда-исчисления, которое представляет собой формальное исследование поведения функций. В 1936 году было всего несколько экспериментальных компьютеров и не было символических языков программирования. Поэтому тот факт. Что лямбда-исчисление оказалось практически полезным (оно является основой для большей части теории языков программирования сегодня). Был большим подтверждением силы этой идеи.

Черч продемонстрировал. Что способность создавать и вызывать функции универсальна — это все. Что нужно для выполнения любых вычислений. Которые вообще могут быть выполнены. (Он также доказал. Что существуют неразрешимые проблемы. Что является причиной приведенной выше квалификационной оговорки.) В терминах BYOB это означает. Что язык программирования. В котором нет ничего. Кроме БЛОКА и ВЫЗОВА. Может существовать и все еще быть в состоянии вычислить любую функцию. (См.Это описание проекта BYOB для объяснения того. Как изобрести арифметику с этой отправной точки.) Греческая буква лямбда (λ) — это название серого кольца.

Compose.png

(Конечно, лямбда не решает проблему ввода/вывода: захват кликов мыши. Рисование картинок на экране и так далее. Хотя очевидно. Что такая деятельность по вводу/выводу имеет решающее практическое значение. Она не является центральной для понимания того. Что такое программа или язык программирования.)

Работа Черча повлияла на фактическое проектирование языка программирования посредством изобретения Джоном Маккартив 1958 году языка программирования Lisp для исследований искусственного интеллекта. Лисп оказывает прямое влияние на Логотип и. Следовательно. Косвенное-на Скретч. Детальный дизайн первоклассных процедур в Build Your Own Blocks сильно повлиял на Scheme, диалект лиспа . Изобретенный в конце 1970-х годов Джеральдом Джеем Сассманом и Гаем Стилом, которые приблизили Лисп к его корням в лямбда-исчислении. Введя правила лексической области видимости.

Прототипирование

Блок clone сообщает о новом объекте. Который наследует свойства родительского объекта. Это позволяет пользователям создавать иерархию объектов. Как и в других языках ООП. Таких как Smalltalk. Но в отличие от Smalltalk. Build Your Own Blocks не различает классы и экземпляры; каждый объект можно рассматривать как экземпляр своего родителя или как класс своих потомков. Эта форма наследования называется пример категории спрайта. А не создает категорию в виде абстрактного описания. Наиболее известными языками прототипирования являются JavaScript и Self Особая форма прототипирования. Используемая в BYOB. Была вдохновлена работой Генри Либермана .

История

Свидетельство.

Первой модификацией Йенса был Chirp, программа. В которой были улучшения. Чтобы Скретч. Затем он начал работать над созданием собственных блоков (гораздо более крупный проект), который имеет три версии: 1.0 (на основе Scratch 1.3), 2.0 (на основе Scratch 1.4) и версию 3.1.1, которую можно скачать здесь. Бхарви разместил

В 2009 году Калифорнийский университет в Беркли решил создать новый курс информатики для непрофильных специальностей и хотел использовать Scratch в качестве языка программирования. Но также хотел преподавать рекурсию и функции более высокого порядка. Так Бхарви, один из разработчиков нового курса. Присоединился к проекту BYOB. Работая с Jens над дизайном пользовательского интерфейса для первоклассных списков и первоклассных процедур.

Щелк! 4 написан на JavaScript, используя элемент HTML5 canvas. Он использует морфическую библиотеку Йенса под названием Morphic.js…

По состоянию на апрель 2021 года. Щелчок! 6.7.4 можно найти здесь, чтобы попробовать.

Построить свой собственный блок на основе красоты и радости вычислительной программы был преобразован в оснастку!.

Использование в Scratch

Основная статья: Мои блоки

Команда Scratch включила в Scratch 2.0 функцию. Основанную на построении собственных блоков . Пользовательские блоки-это процедуры (также известные как функции или методы). В которых сценарий можно легко изменить или запустить. Не дублируя его полностью. Ниже приведен пример пользовательского блока Scratch:

definejumprepeat10changeyby6repeat10changeyby-6jump

Скретч Мод Дизайн Эстетика

Традиционно мощность скретч-модификации измеряют частично по количеству блоков. Которые она добавляет к языку. BYOB/Snap! заняла противоположный подход. Пытаясь получить много выразительной силы из очень небольшого количества новых блоков.

Одна из причин этого заключается в том. Что явная цель создания собственных блоков состояла в том. Чтобы повлиять на дизайн Scratch 2.0, и была надежда. Что команда Scratch может быть более восприимчива к изменениям с

Альтернативный запуск

Альтернативная пусковая установка в действии

Еще один способ. Который используется для запуска Snap! в автономном редакторе BirdBrain Robot Server можно использовать для запуска Snap! И дальше пользовался своей славой. Он действительно требует загрузки. И при открытии приложения выдается приглашение запустить Snap!.

смотрите также

Внешние Ссылки