Difference between revisions of "YOLOL:ru"
(→Кратко: исправление ошибок) |
m (Исправил ссылки и форматирование.) |
||
Line 18: | Line 18: | ||
# Чип снова начнет выполнять 1 строку после того, как была выполнена последняя строка(Если конечно же код не содержит инструкций для перенаправления на конкретную строку или полной остановки) | # Чип снова начнет выполнять 1 строку после того, как была выполнена последняя строка(Если конечно же код не содержит инструкций для перенаправления на конкретную строку или полной остановки) | ||
=== Связанные страницы === | === Связанные страницы === | ||
* [[ | * [[Информационная сеть]] | ||
* [[Устройства и механизмы]] | * [[Устройства и механизмы]] | ||
* [[Универсальный инструмент | Универсальный инструмент]] | * [[Универсальный инструмент | Универсальный инструмент]] | ||
* [[ | * [[Чип_YOLOL | Чип YOLOL]] | ||
== Ссылки на команды == | == Ссылки на команды == | ||
Line 48: | Line 48: | ||
'''Пример:''' | '''Пример:''' | ||
ultimateAutopilot= 128.643 | ultimateAutopilot = 128.643 | ||
* Это приводит к переменной '''ultimateAutopilot''', содержащей числовое значение 128,643 | * Это приводит к переменной '''ultimateAutopilot''', содержащей числовое значение 128,643 | ||
ultimateAutopilot= "Error prone" | ultimateAutopilot = "Error prone" | ||
* Это приводит к тому, что переменная '''ultimateAutopilot''' является строковой переменной '''Склонность к ошибкам''', и числовое значение 128,643 удаляется. | * Это приводит к тому, что переменная '''ultimateAutopilot''' является строковой переменной '''Склонность к ошибкам''', и числовое значение 128,643 удаляется. | ||
Line 60: | Line 60: | ||
В результате максимальный диапазон значений (даже во время операций) составляет [-9223372036854775.808, 9223372036854775.807] | В результате максимальный диапазон значений (даже во время операций) составляет [-9223372036854775.808, 9223372036854775.807] | ||
pieVariable= 3.142 | pieVariable = 3.142 | ||
* Приведенный выше скрипт присваивает числовое значение 3,142 переменной '''pieVariable'''. | * Приведенный выше скрипт присваивает числовое значение 3,142 переменной '''pieVariable'''. | ||
** Предоставление более точных значений, чем переменные могут хранить работы, но не влияет на конечный результат. | ** Предоставление более точных значений, чем переменные могут хранить работы, но не влияет на конечный результат. | ||
Line 81: | Line 81: | ||
** '''variableName''' - настроенный идентификатор поля устройства. | ** '''variableName''' - настроенный идентификатор поля устройства. | ||
Префикс двоеточия ''':''' используется для идентификации переменной в качестве внешней, в отличие от переменной, которая может быть объявлена и использована в самом коде.<br> | Префикс двоеточия ''':''' используется для идентификации переменной в качестве внешней, в отличие от переменной, которая может быть объявлена и использована в самом коде.<br> | ||
[[ | [[Чип_YOLOL | Чип]], подключенный к [[Устройства и механизмы | устройству]] (модульной стойке), имеет доступ ко всем устройствам в [[Информационная сеть | данной сети]], что предоставляет доступ к изменению или получению значений любых данных для устройств в ней.<br> | ||
if :ButtonState == 1 then :DoorState = 1 end | if :ButtonState == 1 then :DoorState = 1 end | ||
Line 166: | Line 166: | ||
| A == B || Equal to || возвращает 1, если строка A равна строке B, 0, если нет. | | A == B || Equal to || возвращает 1, если строка A равна строке B, 0, если нет. | ||
|} | |} | ||
=== Смешивание типов переменных в операциях === | === Смешивание типов переменных в операциях === | ||
Смешивание типов переменных в операции обрабатывает операцию, используя все параметры как «строки». | Смешивание типов переменных в операции обрабатывает операцию, используя все параметры как «строки». | ||
previouslyNumber= "10" + 15 | previouslyNumber = "10" + 15 | ||
* Приведенный выше скрипт приводит к '' 'previousNumber' '', содержащему строковое значение «1015». | * Приведенный выше скрипт приводит к '' 'previousNumber' '', содержащему строковое значение «1015». | ||
** Обратите внимание, что сами используемые параметры не меняют типы, их значения просто приводятся в виде строк для цели операции: | ** Обратите внимание, что сами используемые параметры не меняют типы, их значения просто приводятся в виде строк для цели операции: | ||
Line 188: | Line 189: | ||
** Несколько команд goto могут быть добавлены в одну строку с помощью условных выражений, так как '''False''' команды goto пропускаются. | ** Несколько команд goto могут быть добавлены в одну строку с помощью условных выражений, так как '''False''' команды goto пропускаются. | ||
if variable == 5 then '''goto 4''' end '''goto 6''' | |||
Сценарий, приведенный выше, перейдет к строке 4, если значение '''переменной''' равно 5. <br> | Сценарий, приведенный выше, перейдет к строке 4, если значение '''переменной''' равно 5. <br> | ||
В противном случае он перейдет к строке № 6. | В противном случае он перейдет к строке № 6. | ||
Line 201: | Line 202: | ||
Можно использовать для временного разделения выполнения скрипта на два возможных результата на основе значений переменной. <br> | Можно использовать для временного разделения выполнения скрипта на два возможных результата на основе значений переменной. <br> | ||
'''Пример:'''<br> | '''Пример:'''<br> | ||
''' | '''if''' variable != 2 '''then''' endResult = 3 '''else''' endResult = 4 '''end''' | ||
* Этот скрипт устанавливает значение '''endResult''' в 3, если '''variable''' не имеет значения 2. | * Этот скрипт устанавливает значение '''endResult''' в 3, если '''variable''' не имеет значения 2. | ||
Line 208: | Line 209: | ||
Обратите внимание, что оператор else -part можно пропустить, если он не нужен. <br> | Обратите внимание, что оператор else -part можно пропустить, если он не нужен. <br> | ||
'''Пример:''' <br> | '''Пример:''' <br> | ||
''' | '''if''' variable! = 2 '''then''' endResult = 3 '''end''' | ||
* Этот скрипт устанавливает значение «3» только в «endResult», если «переменная» не имеет значения 2 и больше ничего не делает. | * Этот скрипт устанавливает значение «3» только в «endResult», если «переменная» не имеет значения 2 и больше ничего не делает. | ||
==== Вложение IF условий ==== | ==== Вложение IF условий ==== | ||
Можно поместить условные операторы внутри блоков операторов true / false, чтобы добиться дальнейшего ветвления выполнения. <br> | Можно поместить условные операторы внутри блоков операторов true / false, чтобы добиться дальнейшего ветвления выполнения. <br> | ||
Пример: <br> | '''Пример:''' <br> | ||
''' | '''if''' variable == 0 '''then''' endResult = 1 '''else''' '''if''' variable == 1 '''then''' endResult = 2 '''end end''' | ||
* Этот скрипт устанавливает '''endResult''' в 1, если ''' | * Этот скрипт устанавливает '''endResult''' в 1, если '''variable''' равно 0. | ||
* Если '''variable''' не равно 0, но равно 1, '''endResult''' устанавливается в 2. | * Если '''variable''' не равно 0, но равно 1, '''endResult''' устанавливается в 2. | ||
Пример: <br> | '''Пример:''' <br> | ||
''' | '''if''' variable == 0 '''then''' '''if''' endResult == 1 '''then''' endResult = 2 '''end''' '''else''' endResult = 1 '''end''' | ||
* Этот скрипт устанавливает '''endResult''' в 2, если ''' | * Этот скрипт устанавливает '''endResult''' в 2, если '''variable''' имеет значение 0, а '''endResult''' равно 1. | ||
* В противном случае он устанавливает '''endResult''' в 1. | * В противном случае он устанавливает '''endResult''' в 1. | ||
Обратите внимание, что проще спланировать и отладить поток сценариев, отформатировав сценарий, содержащий вложенные операторы if, в более аккуратную форму с отступами. <br> | Обратите внимание, что проще спланировать и отладить поток сценариев, отформатировав сценарий, содержащий вложенные операторы if, в более аккуратную форму с отступами. <br> | ||
Также обратите внимание, что написание подобного скрипта не будет работать на [[ | Также обратите внимание, что написание подобного скрипта не будет работать на [[Чип_YOLOL | чипе]], но это может быть полезно при отладке скриптов. | ||
Это второй вложенный пример в формате: | Это второй вложенный пример в формате: |
Revision as of 20:17, 19 November 2019
Кратко
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 | Addition | Строка A добавляется строкой B. |
A - B | Subtraction | Последнее появление строки B в строке A удаляется из строки A. |
A * B | Multiplication | Ошибка выполнения. Остальная часть линии пропущена. |
A / B | Division | Ошибка выполнения. Остальная часть линии пропущена. |
A ++ | PostIncrement (A=A+1) | Добавляет пробел в строку А. Оценивает исходное значение. |
A -- | PostDecrement (A=A-1) | Удаляет последний символ строки. Приводит к ошибке во время выполнения при попытке удалить "". Оценивает исходное значение. |
++ A | PreIncrement (A=A+1) | Добавляет пробел в строку А. Оценивает измененное значение. |
-- A | PreDecrement (A=A-1) | Удаляет последний символ строки. Приводит к ошибке во время выполнения при попытке удалить "". Оценивает измененное значение. |
A = B | Assignment (Variable A is set to the value of variable B) | Assignment |
A += B | Addition-assignment (A=A+B) | A присваивается значение строковой операции A+B |
A -= B | Subtraction-assignment (A=A-B) | A присваивается значение строковой операции A-B |
A *= B | Multiplication-assignment (A=A*B) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
A /= B | Division-assignment (A=A/B) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
A %= B | Modulo-assignment (A=A%B) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
A ^ B | Exponentiation | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
A % B | Modulo | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
ABS A | Modulus (absol value) (A=A if A>=0, else A=-A) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
A! | Factorial | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
SQRT A | Square root of A | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
SIN A | Sine of A (degrees) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
COS A | Cosine of A (degrees) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
TAN A | Tangent of A (degrees) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена.. |
ASIN A | Inverse sine of A (degrees) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
ACOS A | Inverse cosine of A (degrees) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
ATAN A | Inverse tangent of A (degrees) | Ошибка времени выполнения для строковых переменных. Остальная часть линии пропущена. |
Логические операторы
Логические операторы проверяют, является ли утверждение истиной или ложью.
Все логические операторы возвращают либо "0 для False", либо "1 для True"
Оператор | Нумерной оператор | Стройчный оператор | A < B | Less than | возвращает 1, если строка A является первой в алфавитном порядке, возвращает 0, если нет. |
---|---|---|---|---|---|
A > B | Greater than | возвращает 0, если строка A является первой в алфавитном порядке, возвращает 1, если нет. | |||
A <= B | Less than or equal to | возвращает 1, если строка A является первой в алфавитном порядке или идентична строке B, возвращает 0, если нет. | |||
A >= B | Greater than or equal to | возвращает 0, если строка A является первой в алфавитном порядке или идентична строке B, возвращает 1, если нет. | |||
A != B | Not equal to | возвращает 1, если строка A не равна строке B, 0, если она есть. | |||
A == B | Equal to | возвращает 1, если строка A равна строке B, 0, если нет. |
Смешивание типов переменных в операциях
Смешивание типов переменных в операции обрабатывает операцию, используя все параметры как «строки».
previouslyNumber = "10" + 15
- Приведенный выше скрипт приводит к 'previousNumber' , содержащему строковое значение «1015».
- Обратите внимание, что сами используемые параметры не меняют типы, их значения просто приводятся в виде строк для цели операции:
purelyNumber = 15 purelyString = "10" + purelyNumber
- Когда этот сценарий выполнен, purelyString содержит строковое значение "1015", в то время как purelyNumberвсе еще содержит числовое значение 15.
Goto
Команда используется, когда обычный порядок чтения кода с 1 по 20 строку не желателен или требует изменений на определенном этапе. Как использовать goto:
- goto lineNumber
- lineNumber - строка, которую команда выполнит при выполнении скрипта.
- Любой оставшийся скрипт, который находится в той же строке после команды goto, не будет выполнен.
- использование операторов if перед goto игнорирует синтаксис goto, предполагая, что оператор if равен false
- Несколько команд goto могут быть добавлены в одну строку с помощью условных выражений, так как False команды goto пропускаются.
- lineNumber - строка, которую команда выполнит при выполнении скрипта.
if variable == 5 then goto 4 end goto 6
Сценарий, приведенный выше, перейдет к строке 4, если значение переменной равно 5.
В противном случае он перейдет к строке № 6.
Операторы If-Else
Операторы if-else используются для разветвления кода по разным путям в зависимости от того, выполняются ли те или иные условия.
Они используют следующий синтаксис:
- If условие then действие else действие end
- Условие - это логическое утверждение, результатом которого является численное значение (где 0 обозначает False, а все остальные значения - True).
- Действия, выполняемые в результате проверки условия, являются фрагментами кода. Все операторы if-else должны иметь end в конце.
Можно использовать для временного разделения выполнения скрипта на два возможных результата на основе значений переменной.
Пример:
if variable != 2 then endResult = 3 else endResult = 4 end
- Этот скрипт устанавливает значение endResult в 3, если variable не имеет значения 2.
- Если значение variable' равно 2, для endResult установлено значение 4.
Обратите внимание, что оператор else -part можно пропустить, если он не нужен.
Пример:
if variable! = 2 then endResult = 3 end
- Этот скрипт устанавливает значение «3» только в «endResult», если «переменная» не имеет значения 2 и больше ничего не делает.
Вложение IF условий
Можно поместить условные операторы внутри блоков операторов true / false, чтобы добиться дальнейшего ветвления выполнения.
Пример:
if variable == 0 then endResult = 1 else if variable == 1 then endResult = 2 end end
- Этот скрипт устанавливает endResult в 1, если 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 variable == 0 then if otherVariable == 1 then otherVariable = 2 end else otherVariable = 1 end
Комментарии
Комментарии полезны при написании кода, который используется многими программистами.
Обратите внимание, что комментарии также занимают пространство из предопределенного предела строки в 70 символов и не исключаются из него.
Комментирование используется со следующим синтаксисом:
- // Текст
- Текст может быть любым однострочным набором символов.
// Это комментарий. Он объяснит, как работают другие строки скрипта.
- Пример возможного синтаксиса комментариев
Ошибки
Существует два типа ошибок, которые могут возникнуть с языком программирования.
- Синтаксические ошибки
- Ошибки во время выполнения
- Синтаксические ошибки происходят из-за неверного и не разбираемого скрипта и приводят к тому, что вся строка не выполняется.
- Ошибки во время выполнения можно отследить только во время выполнения скрипта. Они приводят к прерыванию выполнения строки, но влияют до тех пор, пока ошибка не останется.