Ukr:Довідка:Scratchblocks/Синтаксис

Псевдокод для графічного відображення оточується тегами:
 * на форумах Скретч:
 * у Скретч вікі:

Спрощене пояснення можна знайти на форумі (англ.)

Текст кожного блоку починається з нового рядку і має бути написаний саме так, як він виглядає у Скретч. Приміром:

Аргументи
Аргументи, тобто вхідні дані для блоку, представляються у псевдокоді за допомогою певної розмітки.

Числовий ввод
Поле для суто числового вводу, кругле, задається звичайними дужками:.

перемістити на (10) кроків

перемістити на (10) кроків

Текстовий ввод
Поле для текстового вводу задається квадратними дужками:

говорити [Привіт]

говорити [Привіт]

подумати [бувай]

подумати [бувай]

Блоковий ввод
Булеві блоки та блоки-репортери задаються такою розміткою:  та   відповідно.

якщо <<мишку натиснуто?> і <(образ #) = [1]>> то штамп end

якщо <<мишку натиснуто?> і <(образ #) = [1]>> то штамп end

Свого часу булеві блоки відображувалися круглими, наче репортери. Це було виправлено у scratchblocks3.

Ввод кольору
Поле для вводу кольору задається розміткою. Тут #hexcode – 16-річний RGB код кольору.

задати колір олівця [#00ff00]

задати колір олівця [#00ff00]

Сайт colorpicker.com може допомогти записати правильний код для обраного кольору.

Випадаючий список
Позначка випадаючого меню зі списком задається символом "v":. Звісно, відображення не призначене для змінювання читачем, тож насправді розкрити цей список на веб-сторінці неможливо. У псевдокоді наводиться єдине, обране автором програми, значення.

зупинити [все v]

зупинити [все v]

Можна задати кругле відображення цього поля в такий спосіб:.

оповістити (старт v)

оповістити (старт v)

Спеціальні блоки
Певні блоки задаються особливою розміткою, зокрема ті, які всередині містять зображення-піктограми.

Блоки-шляпи
Блок Коли зелений прапорець натиснуто задається особливим синтаксисом (внаслідок можливості багатомовної локалізації):

коли @greenFlag натиснуто

коли @greenFlag натиснуто

Для блоку Коли спрайт натиснуто попередня версія блокового розширення вимагала, аби назву спрайту було вказано у квадратних дужках. Тепер це вже не потрібно, оскільки назва спрайта більше не є параметром, блок діє на той спрайт, у скрипті якого він знаходиться:

коли спрайт натиснуто

коли спрайт натиснуто

Блок Коли клавішу натиснуто використовує випадаючий список:

коли клавішу [пропуск v] натиснуто

коли клавішу [пропуск v] натиснуто

Зчіплюючі блоки
Блок Поворот на градусів потребує вказівки напрямку поворота. У псевдокоді напрямок позначається спеціальними словами: @turnRight (за годинниковою стрілкою, англ. clockwise); @turnLeft (проти годинникової стрілки, англ. counterclockwise).

поворот @turnRight на градусів

поворот @turnRight на градусів

поворот @turnLeft на градусів

поворот @turnLeft на градусів

Охоплюючі блоки
Охоплюючий блок має бути закритий псевдокодом "end" після останнього блоку, який має бути охоплений цип блоком. Виняток – охоплюючий блок наприкінці псевдокоду скрипта, там він буде закритий автоматично. Приміром:

повторити (10) перемістити на (5) кроків штамп end повторити (10) перемістити на (10) кроків штамп

відображується як:

повторити (10) перемістити на (5) кроків штамп end повторити (10) перемістити на (10) кроків штамп

Коментарі
Коментарі додаються до псевдокоду після повного вмісту блоку за двома косими рисками:. Вони увійдуть у графічне відображення.

перемістити на (10) кроків // чи не занадто далеко?

перемістити на (10) кроків // чи не занадто далеко?

Користувацькі блоки
Якщо спробувати створити відображення власного блоку (нерозпізнаваного ані Скретч, ані блоковим розширенням), від відобразиться червоним (і за замовчуванням буде зчіплюючого типу).

стрибнути

стрибнути

Можна створити визначення блоку (користувацький блок) за допомогою псевдокоду "визначити", за яким іде назва нового блоку:

визначити стрибнути повторити (10) змінити y на (4) end

визначити стрибнути повторити (10) змінити y на (4) end

Можна додати перелік аргументів – числових, булевих, текстових:

визначити стрибнути (висота) <тяжіння ввімкнене?> [повідомлення]

визначити стрибнути (висота) <тяжіння ввімкнене?> [повідомлення]

Таке визначення можна застосовувати всередині того самого тегу &lt;scratchblocks&gt;, де воно зроблене, і новий блок виглядатиме як розпізнаваний Скретч та Scratchblocks.

стрибнути

визначити стрибнути повторити (10) змінити y на (4) end

стрибнути

визначити стрибнути повторити (10) змінити y на (4) end

Користувацькі блоки вводу
Якщо спробувати написати блок-репортер без попереднього його визначення, він відобразиться як звичайна змінна.

говорити (висота)

говорити (висота)

Але якщо подібний запис зробити всередині визначення користувацького блоку, отримаємо відображення блока-репортера:

визначити стрибнути (висота) говорити (висота)

визначити стрибнути (висота) говорити (висота)

Спискові блоки-репортери
Якщо спробувати записати списковий блок-репортер, він відобразиться як репортер із простою змінною, бо розширення не аналізує код програми й тому не може розрізнити просту й спискову змінну.

говорити (список команди Скретч)

говорити (список команди Скретч)

Але якщо всередині того самого тега &lt;scratchblocks&gt; застосувати до змінної дії як до списка, тобто використати її у блоці списка, отримаємо коректне відображення:

додати [mres] до [список команди Скретч v] додати [paddle2see] до [список команди Скретч v] додати [harakou] до [список команди Скретч v] говорити (список команди Скретч)

додати [mres] до [список команди Скретч v] додати [paddle2see] до [список команди Скретч v] додати [harakou] до [список команди Скретч v] говорити (список команди Скретч)

Якщо таке використання змінної видається зайвим, можна для неї безпосередньо вказати тип :

говорити (список команди Скретч :: list)

говорити (список команди Скретч :: list)

Скорочення запису псевдокоду
Можна скоротити псевдокод ScratchBlocks, прибравши необов'язкові символи. Це закінчення охоплюючих блоків наприкінці скрипта, дужки та лапки для закривання виразів наприкінці рядку, пропуски між полями вводу та текстом блоку. Отже, ці два фрагменти псевдокоду дають одне й те саме відображення:

коли @greenFlag натиснуто запитати[n=]і чекати надати[n v]значення(відповідь надати[i v]значення[0 повторити до<(n)=[1 якщо<(остача(n)на(2))=[0]>то надати[n v]значення((n)/(2 інакше надати[n v]значення(((3)*(n))+(1 end змінити[i v]на(1 end говорити(i

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

Ручна розмітка
Блокове розширення надає можливість детальної ручної розмітки (це називають хаком), аби відображувати блоки й скрипті із модифікацій Скретч та застарілих і невипущених версій Скретч.

Повне роз'яснення застосування хаків наведено на форумі.

Зміна кольору та форми
Ти можеш змінити колір та форму відображення блоку. Це буває необхідним, коли слід відобразити блоки, що не належать до Скретч, правильним чином.

Snap!
Поточна версія розширення також підтримує можливості, специфічні для Snap!, як-от "кільцевання". Інші блоки Snap! можна створити за допомогою описаних вище хаків кольору та форми.

run ({create clone :: control} @addInput :: grey ring) :: control

< @addInput :: grey ring>

say (http:// [snap.berkeley.edu] :: sensing)

((6) × (7) :: operators)

(join [hello ] [world] @delInput @addInput :: operators)

script variables ((foo) :: grey) ((bar) :: grey) @delInput @addInput :: grey

(all but first of (list) :: list)

warp { перемістити на (10) кроків } :: grey

report [Все!] :: control cap

(<> @addInput) // навіть без :: grey ring Таким псевдокодом створюється наступне відображення: run ({create clone :: control} @addInput :: grey ring) :: control

< @addInput :: grey ring>

say (http:// [snap.berkeley.edu] :: sensing)

((6) × (7) :: operators)

(join [hello ] [world] @delInput @addInput :: operators)

script variables ((foo) :: grey) ((bar) :: grey) @delInput @addInput :: grey

(all but first of (list) :: list)

warp { перемістити на (10) кроків } :: grey

report [Все!] :: control cap

(<> @addInput) // навіть без :: grey ring

GP
Поточна версія розширення включає також хаки, специфічні для GP. when tracking (mouse x :: variables) (mouse y :: variables) :: hat control

((1) != (0) :: operators)

define(функція :: motion) :: custom hat return (1) :: control

говорити (pi :: operators) :: motion

коли я отримую [go] :: control

чекати @addInput :: control

(isNil [obj v] :: operators)

(торкається вказівника миші :: sensing)

((--( :: #ffffff) :: operators) :: operators)

if (--( :: #ffffff) :: operators) { } @addInput :: control