Difference between revisions of "YOLOL:ua"
Line 102: | Line 102: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Оператор || Операції з числами || Операції з рядками | ! Оператор || Операції з числами || Операції з рядками || Доступність в чіпах | ||
|- | |- | ||
| A + B || Додавання || до рядка A додається рядок B. | | A + B || Додавання || до рядка A додається рядок B. || Всі | ||
|- | |- | ||
| A - B || Віднімання || Останній збіг рядка B в рядку A видаляється з рядка A. | | A - B || Віднімання || Останній збіг рядка B в рядку A видаляється з рядка A.|| Всі | ||
|- | |- | ||
| A * B || Множення || помилка виконання. Залишок коду на поточній лінії пропускається. | | A * B || Множення || помилка виконання. Залишок коду на поточній лінії пропускається.|| Всі | ||
|- | |- | ||
| A / B || Ділення || помилка виконання. Залишок коду на поточній лінії пропускається. | | A / B || Ділення || помилка виконання. Залишок коду на поточній лінії пропускається.|| Всі | ||
|- | |- | ||
| A ++ || Постінкрементація (A=A+1) || Додає пробіл до рядка А. Повертає вихідне значення (до додавання). | | A ++ || Постінкрементація (A=A+1) || Додає пробіл до рядка А. Повертає вихідне значення (до додавання).|| Всі | ||
|- | |- | ||
| A -- || Постдекрементация (A=A-1) || Видаляє останній символ рядка. Призводить до помилки при спробі видалити"". Повертає початкове значення (до видалення). | | A -- || Постдекрементация (A=A-1) || Видаляє останній символ рядка. | ||
Призводить до помилки при спробі видалити" ". | |||
Повертає початкове значення (до видалення). | |||
|| Всі | |||
|- | |- | ||
| ++ A || Преинкрементация (A=A+1) || Додає пробіл до рядка А. Повертає отримане значення. | | ++ A || Преинкрементация (A=A+1) || Додає пробіл до рядка А. Повертає отримане значення.|| Всі | ||
|- | |- | ||
| -- A || Предекрементация (A=A-1) || | | -- A || Предекрементация (A=A-1) || Видаляє останній символ рядка. | ||
Призводить до помилки при спробі видалити"". | |||
Повертає отримане значення. | |||
|| Всі | |||
|- | |- | ||
| A = B || присвоювання (змінній a присвоюється значення змінної B) || присвоєння | | A = B || присвоювання (змінній a присвоюється значення змінної B) || присвоєння|| Всі | ||
|- | |- | ||
| A += B || присвоювання додавання (A=A+B) || рядку A присвоюється значення операції A+B. | | A += B || присвоювання додавання (A=A+B) || рядку A присвоюється значення операції A+B.|| Всі | ||
|- | |- | ||
| A -= B || присвоювання віднімання (A=A-B) || рядку A присвоюється значення операції A-B. | | A -= B || присвоювання віднімання (A=A-B) || рядку A присвоюється значення операції A-B.|| Всі | ||
|- | |- | ||
| A *= B || присвоювання множення (A=A*B) || помилка виконання. Залишок коду на поточній лінії пропускається. | | A *= B || присвоювання множення (A=A*B) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Всі | ||
|- | |- | ||
| A /= B || присвоювання ділення (A=A | | A /= B || присвоювання ділення (A=A/B) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Всі | ||
|- | |- | ||
| A %= B || присвоювання залишку від ділення (A=A%B) || помилка виконання. Залишок коду на поточній лінії пропускається. | | A %= B || присвоювання залишку від ділення (A=A%B) || помилка виконання. Залишок коду на поточній лінії пропускається. || Продвинутий, професійний | ||
|- | |- | ||
| A ^ B || зведення в ступінь || помилка виконання. Залишок коду на поточній лінії пропускається. | | A ^ B || зведення в ступінь || помилка виконання. Залишок коду на поточній лінії пропускається.|| Продвинутий, професійний | ||
|- | |- | ||
| A % B || залишок від ділення || помилка виконання. Залишок коду на поточній лінії пропускається. | | A % B || залишок від ділення || помилка виконання. Залишок коду на поточній лінії пропускається.|| Продвинутий, професійний | ||
|- | |- | ||
| ABS A || залишок від ділення (абсолютне значення) (A=A if a>=0, else A=-A) || помилка виконання. Залишок коду на поточній лінії пропускається. | | ABS A || залишок від ділення (абсолютне значення) (A=A if a>=0, else A=-A) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Продвинутий, професійний | ||
|- | |- | ||
| A! ||Факторіал || помилка виконання. Залишок коду на поточній лінії пропускається. | | A! ||Факторіал || помилка виконання. Залишок коду на поточній лінії пропускається.|| Продвинутий, професійний | ||
|- | |- | ||
| SQRT A || корінь квадратний з A || помилка виконання. Залишок коду на поточній лінії пропускається. | | SQRT A || корінь квадратний з A || помилка виконання. Залишок коду на поточній лінії пропускається.|| Продвинутий, професійний | ||
|- | |- | ||
| SIN A || Синус A (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається. | | SIN A || Синус A (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Професійний | ||
|- | |- | ||
| COS A || Косинус A | в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається. | | COS A || Косинус A | в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Професійний | ||
|- | |- | ||
| TAN A || Тангенс a (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається. | | TAN A || Тангенс a (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Професійний | ||
|- | |- | ||
| ASIN A ||Арксинус A (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається. | | ASIN A ||Арксинус A (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Професійний | ||
|- | |- | ||
| ACOS A || Арккосинус A (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається. | | ACOS A || Арккосинус A (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Професійний | ||
|- | |- | ||
| ATAN A || Арктангенс a (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається. | | ATAN A || Арктангенс a (в градусах) || помилка виконання. Залишок коду на поточній лінії пропускається.|| Професійний | ||
|} | |} | ||
Line 161: | Line 173: | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
! Оператор || | ! Оператор || Операції з числами || Операції з рядками | ||
|- | |- | ||
| A < B | | | | A < B || Менше ніж || повертає 1, Якщо рядок A є першим в алфавітному порядку, повертає 0, якщо ні. | ||
|- | |- | ||
| A > B | | Більше ніж || повертає 0, якщо рядок A є першим в алфавітному порядку, повертає 1, якщо ні. | | A > B || Більше ніж || повертає 0, якщо рядок A є першим в алфавітному порядку, повертає 1, якщо ні. | ||
|- | |- | ||
| A <= B | | | | A <= B || Менше або дорівнює || повертає 1, Якщо рядок A є першим в алфавітному порядку або ідентично рядку B, повертає 0, якщо ні. | ||
|- | |- | ||
| A >= B | | Більше або дорівнює || повертає 0, Якщо рядок A є першим в алфавітному порядку або ідентично рядку B, повертає 1, якщо ні. | | A >= B || Більше або дорівнює || повертає 0, Якщо рядок A є першим в алфавітному порядку або ідентично рядку B, повертає 1, якщо ні. | ||
|- | |- | ||
| A != B | | Не дорівнює || повертає 1, Якщо рядок A Не дорівнює рядку B, 0, якщо вона є. | | A != B || Не дорівнює || повертає 1, Якщо рядок A Не дорівнює рядку B, 0, якщо вона є. | ||
|- | |- | ||
| A == B | | | | A == B || Дорівнює || повертає 1, Якщо рядок a дорівнює рядку B, 0, якщо ні. | ||
|} | |} | ||
=== Змішування типів змінних в операціях === | === Змішування типів змінних в операціях === |
Revision as of 12:30, 11 November 2020
Коротко
YOLOL-це мова програмування, яка використовується для контролю та управління електричні пристрої у грі.
Код пишеться на рядках yolol-чіпа, які згодом вставляються в модульні стійки для чіпів (або Сокет).
Роз'єм для чіпа читає і передає повідомлення з коду в мережу (систему) корабля.
Базова інформація
Як працює YOLOL?
Код пишеться і виконується на програмованому чіпі і може використовуватися, як для моніторингу, так і управління пристроями, з'єднаних в мережа передачі даних.
Рядки коду довжиною максимум в 70 символів виконуються в послідовності зверху вниз, повторюючи цикл чіпа після виконання останнього рядка, якщо тільки код не містить інструкцій для перенаправлення на конкретний рядок або повної зупинки виконання.
А якщо простими словами:
- Виконання коду починається з першого рядка
- Після прочитання першого рядка чіп переходить до наступного рядка на основі інтервалу часу чіпа(тобто затримки виконання кожного рядка, що становить на даний момент 0.2 секунди)
- Потім процес повторюється для 2й, 3й, 4й рядки і так далі
- Чіп знову почне виконувати 1 рядок після того, як була виконана останній рядок(якщо звичайно ж код не містить інструкцій для перенаправлення на конкретний рядок або повної зупинки)
Пов'язані сторінки
Посилання на команди
Без урахування регістра
Код YOLOL повністю нечутливий до регістру. Це означає, що наступні два приклади працюють ідентично один одному.
if ButtonState == 1 then DoorState = 1 end
IF buttonstate == 1 THEN doorstate = 1 END
- Обидва сценарії встановлюють doorStateв 1, якщо значення buttonState дорівнює 1.
- Символи на мові програмування можуть бути написані як малими, так і великими літерами.
- Вони аналізуються як нечутливі до регістру.
- Таким чином, код може виглядати більш організованим.
Змінна
- Змінні в YOLOL слабо типізовані (тобто не вимагають перевірки правильності типу) і підтримують два типи даних: десяткові числа з фіксованою комою (з точністю до 0.001), а також рядки.
- Простіше кажучи, змінні можуть бути введені у вигляді рядків або чисел, ігноруючи більш ранній тип змінної, якщо попередній тип не ідентичний, без виникнення помилки.
- Кожна змінна завжди має один тип, хоча вона буде неявно перетворена при необхідності.
- Значення за замовчуванням для неініціалізованої змінної дорівнює 0, а нульові значення не підтримуються.
- True і False ідентичні значенням "не нуль" і "нуль", відповідно.
- True != 0
- False == 0
Присвоєння значення змінної завжди перетворює змінну в тип присвоюється значення.
Приклад:
ultimateAutopilot = 128.643
- Це призводить до змінної "'ultimateAutopilot"', що містить Числове значення 128,643
ultimateAutopilot = "Error prone"
- Це призводить до того, що змінна "'ultimateAutopilot" 'є рядковою змінною схильність до помилок, і числове значення 128,643 видаляється.
Десяткові числа
Числові значення в мові програмування-це 64-розрядні десяткові числа з фіксованою комою.
Змінні містять десяткові числа з точністю до трьох знаків після коми.
В результаті максимальний діапазон значень (навіть під час операцій) становить [-9223372036854775.808, 9223372036854775.807]
pieVariable = 3.142
- Наведений вище скрипт присвоює Числове значення 3,142 змінної pieVariable.
- Надання більш точних значень, ніж змінні можуть зберігати роботи, але не впливає на кінцевий результат.
notPieVariable = 0.5772156649
- Наведений вище скрипт намагається присвоїти Числове значення 0,5772156649 змінної notPieVariable.
- Однак кінцевий результат notPieVariable = = 0,577
- Тут скорочуються більш точні значення, залишаючи тільки три знаки після коми.
Рядок
Щоб вказати строковий літерал на мові програмування, потрібне строкове значення має бути укладено в подвійні лапки.
badRobots = "saltberia"
- Цей сценарій присвоює Рядкове значення ""saltberia" "змінної" badRobots.
Поля пристроїв / зовнішні змінні
Зовнішні змінні і поля пристрою можуть використовуватися в мові програмування з наступним синтаксисом:
- : variableName
- variableName - налаштований Ідентифікатор поля пристрою.
Префікс двокрапки: використовується для ідентифікації змінної як зовнішньої, на відміну від змінної, яка може бути оголошена і використана в самому коді.
чіп, підключений до пристрою (стійці для чіпів), має доступ до всіх пристроїв в даної мережі, що надає доступ до зміни або отримання значень будь-яких даних для пристроїв в ній.
if :ButtonState == 1 then :DoorState = 1 end
- Цей код відправить значення 1 будь-якому пристрою, який прослуховує поле DoorState, якщо значення ButtonState дорівнює 1 в мережі передачі даних.
Оператори і команди
Доступні оператори обмежені типом (іншими словами - рівнем) програмованого чіпа.
Базові чіпи мають обмежений набір функцій, в той час, як більш просунуті можуть виконувати більш складні операції.
Основні арифметичні та оператори присвоювання
Оператор | Операції з числами | Операції з рядками | Доступність в чіпах |
---|---|---|---|
A + B | Додавання | до рядка A додається рядок B. | Всі |
A - B | Віднімання | Останній збіг рядка B в рядку A видаляється з рядка A. | Всі |
A * B | Множення | помилка виконання. Залишок коду на поточній лінії пропускається. | Всі |
A / B | Ділення | помилка виконання. Залишок коду на поточній лінії пропускається. | Всі |
A ++ | Постінкрементація (A=A+1) | Додає пробіл до рядка А. Повертає вихідне значення (до додавання). | Всі |
A -- | Постдекрементация (A=A-1) | Видаляє останній символ рядка.
Призводить до помилки при спробі видалити" ". Повертає початкове значення (до видалення). |
Всі |
++ A | Преинкрементация (A=A+1) | Додає пробіл до рядка А. Повертає отримане значення. | Всі |
-- A | Предекрементация (A=A-1) | Видаляє останній символ рядка.
Призводить до помилки при спробі видалити"". Повертає отримане значення. |
Всі |
A = B | присвоювання (змінній a присвоюється значення змінної B) | присвоєння | Всі |
A += B | присвоювання додавання (A=A+B) | рядку A присвоюється значення операції A+B. | Всі |
A -= B | присвоювання віднімання (A=A-B) | рядку A присвоюється значення операції A-B. | Всі |
A *= B | присвоювання множення (A=A*B) | помилка виконання. Залишок коду на поточній лінії пропускається. | Всі |
A /= B | присвоювання ділення (A=A/B) | помилка виконання. Залишок коду на поточній лінії пропускається. | Всі |
A %= B | присвоювання залишку від ділення (A=A%B) | помилка виконання. Залишок коду на поточній лінії пропускається. | Продвинутий, професійний |
A ^ B | зведення в ступінь | помилка виконання. Залишок коду на поточній лінії пропускається. | Продвинутий, професійний |
A % B | залишок від ділення | помилка виконання. Залишок коду на поточній лінії пропускається. | Продвинутий, професійний |
ABS A | залишок від ділення (абсолютне значення) (A=A if a>=0, else A=-A) | помилка виконання. Залишок коду на поточній лінії пропускається. | Продвинутий, професійний |
A! | Факторіал | помилка виконання. Залишок коду на поточній лінії пропускається. | Продвинутий, професійний |
SQRT A | корінь квадратний з A | помилка виконання. Залишок коду на поточній лінії пропускається. | Продвинутий, професійний |
SIN A | Синус A (в градусах) | помилка виконання. Залишок коду на поточній лінії пропускається. | Професійний |
COS A | в градусах) | помилка виконання. Залишок коду на поточній лінії пропускається. | Професійний |
TAN A | Тангенс a (в градусах) | помилка виконання. Залишок коду на поточній лінії пропускається. | Професійний |
ASIN A | Арксинус A (в градусах) | помилка виконання. Залишок коду на поточній лінії пропускається. | Професійний |
ACOS A | Арккосинус A (в градусах) | помилка виконання. Залишок коду на поточній лінії пропускається. | Професійний |
ATAN A | Арктангенс a (в градусах) | помилка виконання. Залишок коду на поточній лінії пропускається. | Професійний |
Логічні оператори
Логічні оператори перевіряють, чи є твердження істиною чи брехнею.
Всі логічні оператори повертають або "0 Як False", або "1 Як True"
Оператор | Операції з числами | Операції з рядками |
---|---|---|
A < B | Менше ніж | повертає 1, Якщо рядок A є першим в алфавітному порядку, повертає 0, якщо ні. |
A > B | Більше ніж | повертає 0, якщо рядок A є першим в алфавітному порядку, повертає 1, якщо ні. |
A <= B | Менше або дорівнює | повертає 1, Якщо рядок A є першим в алфавітному порядку або ідентично рядку B, повертає 0, якщо ні. |
A >= B | Більше або дорівнює | повертає 0, Якщо рядок A є першим в алфавітному порядку або ідентично рядку B, повертає 1, якщо ні. |
A != B | Не дорівнює | повертає 1, Якщо рядок A Не дорівнює рядку B, 0, якщо вона є. |
A == B | Дорівнює | повертає 1, Якщо рядок a дорівнює рядку B, 0, якщо ні. |
Змішування типів змінних в операціях
При використанні змішаних типів змінних, операція обробляється використовуючи всі параметри як тип "рядок".
previouslyNumber = "10" + 15
- Даний скрипт призводить до того, що змінна previouslyNumber отримує Рядкове значення «1015».
- Зверніть увагу, що самі використовувані параметри не змінюють типи, їх значення просто наводяться у вигляді рядків для виконання операції:
purelyNumber = 15 purelyString = "10" + purelyNumber
- Після того, як цей скрипт виконається, purelyString буде містити Рядкове значення 1015, однак значення змінної purelyNumber буде все ще дорівнює числовому значенню 15.
Goto
Команда використовується, коли в звичайному порядку читання скрипта з 1 по 20 рядок потрібно перехід на інший рядок.
Як використовувати goto:
- goto lineNumber
- lineNumber - номер лінії скрипта, на яку перейде виконання.
- У разі виконання команди goto, будь-який залишився на тій же лінії скрипт виконаний не буде.
- При використанніgoto всередині умови "if", в разі, якщо логічний вираз в умові буде False, то команда goto не виконається.
- Кілька команд goto можуть бути використані на одній лінії, якщо знаходяться в умовах "if".
if variable == 5 then goto 4 end goto 6
Скрипт, наведений вище, перейде на лінію 4, якщо значення variable дорівнює 5.
В іншому випадку він перейде на лінію номер 6.
Умовний оператор If-Else
Умовний оператор if-else використовується для перевірки логічного виразу і виконання скрипта в залежності від істинності цього виразу.
Умовний оператор використовується в наступному вигляді:
- if "умова" then "дія" else "дія" end
- Умова-це логічне твердження, результатом якого є чисельне значення (де 0 позначає False, а всі інші значення - True).
- Дія-скрипт, що виконується в залежності від істинності умови.
- Всі умови if-else повинні мати end в кінці.
If можна використовувати для поділу виконання скрипта на два можливих результату на основі значення змінноїvariable.
Приклад:
if variable != 2 then endResult = 3 else endResult = 4 end
- Цей скрипт встановлює значення 3 змінної endResult, якщо значення variable не дорівнює 2.
- Якщо значення змінної variable дорівнює 2, для змінної endResult встановлюється значення 4.
Зверніть увагу, що блок else можна пропустити, якщо він не потрібен.
Приклад:
if variable != 2 then endResult = 3 end
- Цей скрипт встановлює значення 3 для змінноїendResult, якщо variable не має значення 2 і більше нічого не робить.
Вкладення умов if
Можна помістити умовні оператори всередині результатів true / false іншого умовного оператора, щоб домогтися подальшого розгалуження виконання.
Приклад:
if variable == 0 then endResult = 1 else if variable == 1 then endResult = 2 end end
- Цей скрипт встановлює значення 1 змінної endResult, якщо" 'variable "' дорівнює 0.
- Якщо variable не дорівнює 0, але дорівнює 1, то endResult встановлюється значення 2.
Приклад:
if variable == 0 then if endResult == 1 then endResult = 2 end else endResult = 1 end
- Цей скрипт встановлює endResult значення 2, якщо variable має значення 0, а endResult дорівнює 1.
- В іншому випадку він встановлює endResult значення 1.
Зверніть увагу, що простіше спланувати і налагодити потік скрипта, відформатувавши сценарій, що містить вкладені оператори "'if"', в більш акуратну форму з відступами і переносами.
Однак написання подібного скрипта не буде працювати на чіпі, але це може бути корисно при налагодженні скриптів.
Форматований другий приклад вкладеного if:
if variable == 0 then if endResult == 1 then endResult = 2 end else endResult = 1 end
Коментар
Коментарі корисні при написанні скрипта, який використовується декількома програмістами.
Зверніть увагу, що Коментарі також займають простір із заздалегідь визначеної межі лінії скрипта в 70 символів і не виключаються з нього.
Коментування використовується з наступним синтаксисом:
- // Текст
- Текст може бути будь-яким однорядковим набором символів.
//Це коментар. Він пояснить, як працюють інші рядки скрипта.
- Приклад можливого синтаксису коментарів.
Помилки
Існує два типи помилок, які можуть виникнути з мовою програмування.
- Синтаксичні помилки
- Помилки під час виконання
- Синтаксичні помилки відбуваються через невірний і не розбирається скрипта і призводять до того, що весь рядок не виконується.
- Помилки під час виконання можна відстежити тільки під час виконання скрипта. Вони призводять до переривання виконання рядка, але впливають до тих пір, поки помилка не залишиться.