Else Heart.Break()

Else Heart.Break()

Not enough ratings
Язык SPRAK - руководство пользователя
By Atomniy
Перевод на русский язык всех глав руководства по языку SPRAK.
В руководство вошли все главы с 0 по 9, плюс руководство по использованию модификатора (ЭВМ). Также, добавлены некоторые полезные комментарии от Автора.
   
Award
Favorite
Favorited
Unfavorite
Уроки Гуру
В игре можно получить начальные уроки по программированию и пару забавных задач от 2х Персонажей. Для этого нужно в начале порасспрашивать всех, кого увидите с модификатором, про модификатор и где его достать.

Когда Вы получите модификатор (см. руководство по расположению всех модификаторов в игре), Вам следует найти садовника Фибс, который чаще всего сидит в саду, и техника из отеля Хэнка (Он часто сидит в отеле, но может ходить и по городу). Заговорив с обоими, Вы получите начальные уроки по программированию в игре и пару полезных предметов.

Фибс учит Вас условному оператору ЕСЛИ (if) и рассказывает про копирование кода и создание нового на основе другого кода. Он даст Вам модификатор, булочку с кодом и музыкальный цветочек с программой.

Хэнк научит компилировать код, очищать старый код и писать новый. Он даст Игроку сияющий мистический куб и поажет дискеты с руководствами по языку программирования. Дискеты с советами по использованию модификатора находятся уже в логове Хакеров.
Модификатор - руководство новичка
*** Комментарии ***
Комментарии игнорируются компилятором кода. Чтобы создать комментарий необходимо напечатать значек #. Любой текст на строке, справа от этого значка компилятор проигнорирует, воспринимая его как текст!

#Комментарий не считается кодом.

Комментарии окажутся очень полезными для Тебя в будущем и для других.

Также, можно закомментировать часть кода, чтобы выключить его из программы, без удаления.

*** Компилятор ***
Компилятор – это программа-переводчик, которая берет исходный текстовый код и превращает его в бинарный цифровой код, понятный для ЭВМ.

Если во время компиляции обнаружатся ошибки, то модификатор сообщит о них программисту в своей «области помощи».

*** ОШИБКИ ***
Когда обнаруживаются ошибки компиляции (см. дискету 4) или когда программа уже запущена, выполнение программы остановится и сообщение об ошибке возникнет в области помощи вашего модификатора.

В случае ошибки выполнения можно запустить программу заново, либо активировав объект, либо заново скомпилировав код.

*** Автозаполнение ***
Секция снизу вашего модификатора («область помощи») показывает список функций, доступный Вам в конкретной ситуации во время программирования.

Начните писать имя функции, чтобы сократить число доступных вариантов и получить список подходящих предложений.

Если Вы нажмете кнопку TAB, то выделенный вариант вставиться в код с начальной кавычкой: (

Когда введете аргументы функций область помощи покажет информацию по каждому аргументу.
Глава 0 - Вступление
# SPRAK PROGRAMMING LANGUAGE MANUAL #

Программирование – чудесная вещь! Ах… удовольствие контроля надо всем, посредством магических заклинаний кода! Это руководство научит Вас всему тому, что нужно чтобы стать заклинателем битов, мастером логики и владыкой информации.

Читайте все 10 глав по порядку, поскольку последующие главы основаны на материале из предыдущих. Содержание:

------------------------
1+ Решение задач
2+ Переменные
3+ Матан и логика
4+ Функции f(x)
5+ Условия if
6+ Массивы
7. Циклы
8+ Handling text
9+ Обьекты и методы
------------------------
Глава 1 – Основы решения задач
Как Вы решите задачу? Каждая проблема или задача – уникальна и требует своего индивидуального решения. Или нет?

Множество подобных задач возникают в программировании снова и снова. Опытный программист может вообще не задумываться о их решении. Правильный ответ просто появляется в его голове и может быть напечатан на ЭВМ.

Но, как кому-либо другому научиться такой фишке? «Читай код!» - часто повторяемая мантра любого начинающего программиста. Это хороший совет, который сложно соблюдать. Большинство реальных решений одновременно непонятны и запутаны, с множеством странных деталей, которые делают чтение и понимание кода сложным.

Без руководства сверху страницу кода бывает невозможно понять кому-либо (бывает даже самому автору этого кода). Тем не менее, читать и понимать код других Людей – стоит, подбирая там и тут маленькие интересные решения, которые можно будет применить самому.

Хорошим действием будет переписать чей-то чужой код в своем собственном стиле и со своими изменениями. Это отлично помогает понять работу программы и связи внутри кода.

Но, вернемся к решению задач! Основным методом решения задач в программировании является РАЗЛОЖЕНИЕ проблемы на более мелкие задачки и решение каждого компонента большой задачи по одиночке. Этот простой метод доказал свою НЕВЕРОЯТНУЮ ЭФФЕКТИВНОСТЬ и лежит в основе обоих методов программирования: функционального (см. главу 5) и объектно-ориентированного (см. главу 9). После разделения большой задачи на множество маленьких кусочков, большая, запутанная и нерешаемая задача становится маленькой и решаемой.

Наконец, если ничего не срабатывает и решение от Вас ускользает – вздремните, прогуляйтесь или перекусите. Ничего не помогает в решении проблем так хорошо, как здоровый сон и свежий воздух.
Глава 2 - Переменные
Переменные используют для названия предметов. Это может показаться простой задачей, но избегите заблуждения – возможность называть предметы является одной из самых важных возможностей.

Например, вместо того, чтобы относится к Вашему имени как к строке букв вроде «Лиза», Мы можем создать переменную, которая сохранит это значение. Переменную можно даже назвать 'name' (имя по англ.) и она может хранить различные имена, в различные моменты времени, в зависимости от нужд программы.

Вот несколько примеров того, как создать переменные:

number x = 10
string myName = "Simon"
bool itIsChristmas = false


Посмотрите на слова слева, такие как 'number', 'string' и 'bool'. Это ТИПЫ и они описывают какой вид информации Мы хотим сохранить внутри переменной. После этого идет ИМЯ переменной. Оно должно быть понятным, хорошо описывающим то, что хранится внутри переменной.

Далее следует знак равенства '='. Это означает, что Мы установили значение переменной тем, что записали с правой стороны. Переменным можно изменить значение используя знак равенства, например, так:

x = 11
myName = "Simone"
itIsChristmas = true


Для этого нужно, чтобы ранее в программе Мы уже объявили переменные, используя синтаксис выше, с указанием ТИПА и ИМЕНИ (например 'number x = 10' ).

Значение переменных можно изменять посредством кратких записей, которые в начале выглядят экзотически, но оказываются удобно-краткими:

x++ # Увеличить на единицу
x += 10 # Увеличить на 10
x-- # Уменьшить на еденицу
x -= 20 # Уменьшить на 20


От т.Атомного. Лучше всего в программировании указывать не только имя переменной или функции, но и их тип. Это позволит понят какой ТИП информации хранится в переменной и не пытаться сохранить число с запятой 3,14 в переменную только для целых чисел, или в переменную для слов. Таким образом, переменная должна в своем названии указывать на свой тип и информацию, которая хранится в ней.

number nX = 10
string sMyName = "Simon"
bool bChristmas = false


Составные слова в переменной можно выделять, начиная их с большой буквы, как показанно ранее, либо ставя нижнее подчеркивание между словами:

string s_my_name = "Simon"
bool b_christmas = false
Глава 3 - Матан и Л=Логика
Не дайте этой главе запугать Вас! Вам не нужно быть математическим гением, чтобы заниматься программированием. Любопытство и логика приведут Вас к лучшим результатам, доверьтесь Нам. Тем не менее, математические действия часто встречаются в коде. Вот самые базовые:

+ # плюс
- # минус
* # умножение
/ # деление


Эти действия можно использовать следующими способами:

number x = 10 + 20
number y = x * 2
number z = y - 1


Теперь х содержит значение 30, у равен 60 и z стало 59. Убедитесь, что Вы поняли почему так произошло и как каждая переменная зависит от переменной, определённой ранее.

Вы можете придумать более сложные формулы и выражения:

x = 10 / y * z + 1

Математические операторы следуют обычным приоритетам математических действий. Иными словами, действия * и / выполняют перед + и -. Это можно изменить, используя скобки:

x = 10 / y * (z + 1)

Разные операционные системы ЭВМ имеют и другие математические операции в виде ФУНКЦИЙ (см. главу 5). Есть и логические операторы, которые часто используют в программировании:

< # меньше
<= # менее или равно
> # больше
>= # больше или равно
== # равно
!= # НЕ равно

Их используют так же, как +, -, * и /, но возвращают результатом значения ИСТИННО или ЛОЖНО:

30 < 20 # ложно
5 <= 5 # истинно
100 != 0 # истинно

Глава 4 - Функции
Функции f(x) – это основной инструмент упрощения программирования. Фактически они дают Вам программную суперсилу, делая что-то автономным и параметрическим. Это звучит абстрактно и не очень-то полезно, потому давайте взглянем на примеры.

Во-первых, вот как Вы ВЫЗЫВАЕТЕ функцию:

Print("Привет!")

Эта функция заставит ЭВМ напечатать текст "Привет!" (без кавычек) на своем экране, если ЭВМ имеет экран! В Нашем примере функция называлась Print, а параметром было слово "Привет!". Используя различные параметры Мы можем заставить функцию вести себя по другому каждый раз, когда Мы ее вызываем в коде.

Эта функция может показаться Вам слегка странной, если Вы привыкли к функциям из математики. Странность в том, что она ничего не возвращает! Функции в языке SPRAK (Вспышка) и не должны ничего возвращать, так что все нормально. Однако, Нам часто нужны функции, которые возвращают некоторые значения и вот как это делается:

number x = Max(13, 10)

Эта запись сохранит в переменной 'x' значение, которое вернет функция Max. Max принимает два параметра и возвращает тот, который больше. В нашем случае Max вернет 13, которая сохранится в переменной 'x'.

Также, Мы можем использовать переменные или другие функции в качестве параметров для функции Max, как показано ниже:

number x = Max(Random(), 0.5)

Функция Random (генерация случайного числа) не принимает параметров и возвращает случайное число в пределах от 0 до 1. Это случайное число сравнивается с 05 и выбирается большое число, которое и назначается переменной 'x'.

Написать свою собственную функцию тоже очень просто и выглядит также, как определение переменных. Можно сказать, что функция как переменная, которая кроме значения еще и содержит код. Вот Моя попытка написать собственную функцию для определения площади круга:

number AreaOfCircle(number radius)
return radius * radius * 3.1415
end


В этом коде множество различных частей, так что давайте разберем его по деталям. Первая строка объясняет какой ТИП значения функция вернет (число), имя функции ('AreaOfCircle') и параметры, которые функция принимает (одна переменная, которая называется 'radius').

Имена внутренних переменных используются внутри функции, потому тем, кто пользуется функцией AreaOfCircle ничего не нужно знать про них.

Внутри функции, между первой строкой и последней, которая содержит финальную команду 'end' (конец), Мы имеем код, который будет выполнятся каждый раз при вызове этой функции. В Нашем случае Мы множим радиус сам на себя и на число Пи и возвращаем результат. Чтобы использовать эту функцию нужно записать следующее:

number a = AreaOfCircle(3.0)

Переменная 'a' теперь содержит значение формулы 3.0 * 3.0 * 3.1415, что приблизительно равно 28.27.

Если Вы хотите увидеть, имеет ли конкретный объект какую-то функцию, можете вызвать функцию HasFunction(), следующим образом:

if HasFunction("Print")
Print("Привет")
end


От т.Атомного. В некоторых языках программирования функции называют подпрограммами. Но, самое удобное и понятное слово-синоним – это действие. Функция - это БОЛЬШОЕ действие или команда. Она вбирает в себя множество маленьких действий и когда Вы вызываете в коде функцию, Вы заменяете ей большую часть кода. Например, рассмотрим действие «пить чай». Оно состоит из множества маленьких действий – взять чашку, поднять, поднести к губам, сделать глоток, поставить назад. В нашем случае 5 мелких действий. Каждый раз, когда Мы хотим глотнуть чай, Мы можем проговорить все 5 мелких команд или вызвать всего 1 функцию «пить чай», которая выполнит 5 команд автоматически.
Глава 5 – условия if
Время для веселья! Условие ЕСЛИ (if) позволяет ЭВМ «думать». Оно выбирает различные пути выполнения программы, в зависимости от ЛОЖНОСТИ или ИСТИННОСТИ какого-либо условия. Это напоминает стрелку ж/д путей, которая определяет направление движения поезда.

Например, у Нас есть переменная с именем 'SECRET', содержащая одно из значений 'true' (истинно) или 'false' (ложно), но Мы не знаем какое точно значение она содержит. Как можно его узнать? Используя условие ЕСЛИ:

if SECRET
Print("истинно!")
end


Тут нужно указать на несколько вещей. Во-первых, про использование команд 'if' и 'end'. Эти две команды всегда идут в паре. Слово 'end' (конец) указывает где заканчивается блок кода. Воспринимайте его как точку в обычном предложении. Все что написано между этими двумя командами программа выполнит если переменная 'SECRET' содержит значение 'true'. В Нашем случае на экране появится текст "истинно!". Но, если переменная содержит ложное значение 'false', то ничего не произойдет.

А что, если и в этом случае Мы хотим что-то напечатать на экране? Тогда вот что следует сделать:

if SECRET
Print("истинно!")
else
Print("ложно!")
end


Вы можете сделать несколько вещей в блоке между 'if' и 'end'. Не переживайте на счет смещения текста слегка вправо, это сделано для удобности чтения кода.

if SECRET
Print("The")
Print("SECRET")
Print("is")
Print("true!")
end


Можно записать больше условий для ветвления программы:

if a
# do something
else if b
# do something else
else if c
# do this if c is true (but a and b are false)
else
# do this if a, b and c are all false
end


Наконец, несколько выражений, содержащих логические выражения (true / false) можно проверять вместе, используя команды 'and' и 'or':

if a and (b or c)
# это произойдет если верны обе переменные a и b
# ИЛИ OR a и c окажутся истинными
end
Глава 6 - Массивы
Массивы (множества) – это способ объединить несколько значений в одну структуру и манипулировать ими как одним целым. Очень удобно!

От т.Атомного. В различных языках массивы называют векторами, матрицами, базами данных или списками. Они отличаются технически, но принципы работы подобные.

Вот как можно создать массив:

array numbers = [10, 5, 7, 123]

Квадратные кавычки '[' и ']' окружают числа или другую информацию внутри массива, как будто бы как коробка...

Этот массив, названый 'numbers', сейчас содержит четыре числа 10, 5, 7 и 123. Мы можем достать эти числа из переменных используя оператор номера переменной, как в примере ниже:

Print(numbers[0])
Print(numbers[1])
Print(numbers[2])
Print(numbers[3])


Этот код напечатает каждую из «коробочек» внутри массива, начиная с числа 10 в первой «коробочке» и заканчивая числом 123. Заметьте, что нумерация массива начинается с 0 и заканчивается 3, хотя в нем 4 элемента. Все дело в том, что в программировании счет начинается с 0, что несколько смещает нумерацию в массивах. К этому следует привыкнуть.

Нумерация «коробочек» массива позволяет перезаписывать внутрь новые значения переменных:

numbers[1] = 666

Теперь массив переменных 'numbers' содержит значения [10, 666, 7, 123] Будьте осторожны с этой возможностью, чтобы не создать глюков! Работа с массивами может быть запутанной.

Существует функция 'Count', которая подсчитывает количество элементов (коробочек) внутри массива. Просто передайте массив в функцию 'Count', как показанно ниже:

Count(numbers) # функция вернет 4 в этом случае

Есть гораздо больше уловок и функций, которые используют массивы, но для начала достаточно и этих.
Глава 7 - Циклы
Циклы (Loops) используй для того, чтобы повторять часть кода снова и снова, как в примере ниже:
loop
Print("Привет!")
end


Этот код заставит ЭВМ печатать снова и снова слово «Привет!» до бесконечности или пока кто-то не выключит ЭВМ.

Цикл можно прервать изнутри при помощи команды 'break':

loop
if IsDone()
break
end
end
Print("Готово!")


Этот код будет циклически повторятся до того момента, пока функция 'IsDone' не вернет значение «истинна» (1), по получении которого ЭВМ прервет цикл и выполнит код после цикла, напечатав фразу "Готово!".

Цикл может перебирать каждый «ящичек» массива. Это просто! Добавь массив сразу после команды цикла 'loop':

loop [1, 2, 3, 4, 5]
# цикл сделает что-то 5 раз
end


Обычно Вы хотите иметь доступ к каждому элементу массива. Для этого массиву нужно дать имя:

array a = [1, 2, 3, 4, 5]

loop x in a
Print(x)
end


Этот код распечатает содержание каждой «полочки» в массиве! Если вы хотите повторить цикл в заданном диапазоне чисел, скажем, от 0 до 100, вы можете сделать это с помощью команд ОТ 'from' числа А и ДО 'to' числа Б:

loop x from 0 to 100
Print(x)
end


Это намного более эффективно, чем создание массива в ручную с указанием всех его значений.
Глава 8 – работа с текстом
Язык SPRAK имеет лишь несколько простых инструментов для работы с текстом. Но, их все же важно знать. Без хорошего текстового сопровождения большинство программ сложно использовать, так как не понятно - что делать?

Самая важная операция – это представление любого вида информации в виде печатного текста. Обычно это делается автоматически, когда функции нужен текст. Например, функция печати Print:

Print(10)

Она выведет текст «10», как и ожидалось. Более интересен оператор «+», который может объединять между собой несколько текстовых строк, в более длинные:

Print("X имеет значение " + X)

Эта функция автоматически конвертирует переменную Х в текст и напишет что-то типа "X имеет значение 42", если переменная X действительно имеет значение 42.

Вы можете печатать на экран и массивы. Но, если они слишком длинные, то ЭВМ обрежет их в различных местах, чтобы вместить на экран и не создавать бесконечной строки.
Глава 9 - Обьекты и методы
Это финальная и, возможно, самая увлекательная глава всего руководства. Мы достигли самого сильного инструмента языка Sprak – это знак точки.

Знак точки используется для вызова функций ДРУГИХ объектов. Эти функции обычно называют МЕТОДАМИ, чтобы отличить их от нормальных функций.

Поскольку такой МЕТОД может делать разные вещи с объектами, к которым он добавлен и, даже, вызывать другие методы в других объектах, то сила знака точки – бесконечна! Пожалуйста, используй ее с осторожностью и не наделай глупостей…. ;)

Вот как пользоваться знаком точки. Для начала, соединись с другим объектом:

var o = Connect("HomeComputer")

Потом, используй соединение, сохраненное в переменной 'o', вместе с знаком точки, чтобы вызвать МЕТОД:

o.Print("Hello at home!")

Это заставит ЭВМ, к которой Вы присоединились, напечатать сообщение "Hello at home!" на своем мониторе. Для использования методов к другим объектам требуется соединение с интерсетью.

От т.Атомного. Все гораздо проще. Каждый виртуальный объект в игре может что-то делать: радио – играть музыку, телевизор – показывать телепередачу, торогомат – продавать напитки. Все эти действия объекты выполняют при помощи функций. То есть, как говорилось ранее, функция – это заумное слово для простого понятия ДЕЙСТВИЕ.

Каждый объект в игре может что-то делать. Чтобы заставить объект совершить действие, нужно написать название объекта на английском языке, а потом, через точку, название действия, которое может совершить этот объект.

Дело в том, что программирование изначально придумано для военных целей военными шифровальщиками. По этой причине, многие простые вещи ЗАКОДИРОВАННЫ, то есть сделаны так, чтобы выполнять их стало сложнее, чем просто написать обычный текст. Одни из популярных методов шифрования команд – это перепутывание значения разделительных знаков и использование странных терминов, типа функции.

Многие вещи в программировании становятся понятнее, когда Ты имеешь ввиду, что они сделаны специально, чтобы запутать. Можно было бы написать простую команду для торгомата:


Торгомат продай коллу.

Но, тогда все было бы понятно без расшифровки, потому в языке программирования пишут ту же команду, но со странным синтаксисом:

Торгомат.продай(колла);

Многие вещи в программировании становятся легкими и понятными, когда Ты начинаешь думать в том ракурсе, как сделать простую вещь запутанной. Например, так можно легко понять тему ссылок и указателей в программировании на языках С и С++.

Шифрование усложняет программирование, ограничивая количество тех, кто может его понять. Изначально это делалось для того, чтобы усложнить копирование военных программ и понимание радиообмена противником. Сейчас же это делается для того, чтобы ограничить и усложнить доступ к современным технологиям всех противников и конкурентов той страны, которая придумала современные ЭВМ – США.

Пока весь Мир тратит время на обучение шифрованию и расшифровку уже созданных в США программ, США создают новые программы и способы шифрования команд, отрываясь в техническом развитии от своих противников и конкурентов.