|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
07.09.2015, 22:31 | #11 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Итак, уже известно, каким образом аргумент, имеющий значение "Test" передаётся в параметр title. Теперь подробнее разберём принцип работы основного кода, отвечающего за вывод в окно заданной фразы, в данном случае "Hello, Mir!", а также закрывающий это окно (вместе с виртуальной машиной) при нажатии на кнопку Ok.
Первым делом, посмотрим какие вообще функции принимают участие в нашей программе (если кто не знает/не помнит,функция - это часть кода, подпрограмма, которая может вызываться из другого места программы ): 1. end (созданная нами функция) 2. main (главная функция, с которой начинается работа программы) 3. _DLGrflmessage (библиотечная функция, поставляемая вместе с языком SCOL) 4. _DLGMessageBox (тоже библиотечная функция) 5. _channel (ещё одна функция из библиотеки) 6. _closemachine (снова из библиотеки) Вот благодаря этим шести функциям наша программа и работает именно описанным выше образом. А теперь пробуем разобраться, что делает та или иная функция. С функцией main всё понятно - она содержит код, с которого начинается выполнение программы. И в данном случае этот код состоит всего лишь из одного оператора, оканчивающегося вызовом созданной нами функции end, в свою очередь, вызывающую библиотечную функцию _closemachine. Благодаря _closemachine программа в итоге закрывается вместе с виртуальной машиной SCOL. Но вот способ закрытия программы (в нашем случае при нажатии на кнопку Ok) задаётся в другой части единственного оператора функции main. Больше о _closemachine говорить не имеет смысла, так как мы теперь знаем, для чего она нужна. И этого достаточно. В оригинальной документации API её описание находится здесь http://www.scolring.org/files/doc_ht...semachine.html а в переводимом на русский язык варианте путь будет такой: Основные функции > Виртуальная машина > _closemachine Осталось разобрать ещё три библиотечные функции, и некоторые команды. Но перед этим дам ссылки на описание этих функций. И в следующих главах, прежде, чем будет дано объяснение какому-либо коду, сначала выпишу в отдельный список все функции, а для библиотечных будут даны ещё и ссылки на их расположение в документации API. _DLGrflmessage http://www.scolring.org/files/doc_ht...flmessage.html [2D > 2D (система) > Диалоговое окно > _DLGrflmessage] _DLGMessageBox http://www.scolring.org/files/doc_ht...essagebox.html [2D > 2D (система) > Диалоговое окно > _DLGMessageBox] _channel http://www.scolring.org/files/doc_html/_channel.html [Основные функции > Управление каналами > _channel] |
09.09.2015, 08:56 | #12 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Ещё раз приведу код всей программы:
Код:
Как уже выяснили, самое главное происходит внутри функции main. Первая функция, встречающаяся в единственном операторе - _DLGrflmessage. Эта функция здесь используется для того, чтобы определять - в ответ на какие действия пользователя закроется диалоговое окно. В данном случае, это происходит при нажатии на кнопку Ок. Как это реализуется? Очень просто - всё, что находится после имени функции _DLGrflmessage, является её аргументами, включая функцию _DLGMessageBox, предназначенную для создания самого диалогового окна. Чтобы понять, какие вообще аргументы может принять _DLGrflmessage, смотрим в документации, какие входные параметры эта функция имеет: 1. _messagebox_ (в этот параметр функция принимает в качестве аргумента другую функцию - создающую само диалоговое окно) 2. _callback_ (не вдаваясь в лишние подробности - в этот параметр в качестве аргумента в данном случае передаётся функция end, отвечающая за закрытие виртуальной машины) 3. _user_ (пользовательский параметр) Все тонкости приведённых параметров данной функции, да и всего кода, станут более понятными в дальнейшем. Сейчас лишь снова окинем взглядом оператор, содержащийся в функции main. Известно, что всё, что идёт за именем функции _DLGrflmessage является её аргументами. Но ведь параметра всего три, почему же так много аргументов в коде? Дело в том, что там записаны не только аргументы самой функции _DLGrflmessage, но и аргументы, так сказать, нижележащего уровня. Вспомним, что аргументы функций в языке SCOL можно записывать не в скобках, как в Си-подобных языках, и не через запятые, а через пробелы. Поэтому такой код тоже будет корректным: Код:
Код:
1. _channel_ (В качестве аргумента в нашем случае используется функция _channel, связанная с важным в языке SCOL понятием "каналы". Про каналы поговорим в следующих главах) 2. _window_ (Параметр связан с иерархией окон, и в данном коде имеет аргумент nil [ноль], означающий, что в нашей программе больше никаких окон нет и не будет) 3. _title_ (В качестве аргумента принимает название окна ["Test"], переданное в параметр title функции main из файла сценария с расширением .scol) 4. _text_ (Собственно сам текст, в нашем случае "Hello Mir!", ради которого и создана эта программа) 5. _flag_ (Цифра, отвечающая за то, сколько кнопок и с какими названиями будут отображаться в диалоговом окне. 0 - кнопка "ОК", 1 - кнопки "ОК" и "Отмена", 2 - кнопки "Да" и "Нет". Текст на кнопках отображается на том языке, на котором локализована операционная система) Ещё можно заметить, что имя функции end, которое присутствует в качестве аргумента во втором параметре функции _DLGrflmessage, имеет перед собой символ @. Сделано это для того, чтобы не допустить одновременный вызов функций создания диалогового окна и закрытия виртуальной машины, что приведёт к ошибке компиляции. Также обратите внимание, что в главной функции main для входного параметра title не указан тип. Компилятор сам определил, что этот параметр имеет тип "Строка". На этом описание работы второй версии программы, выводящей на экран сообщение Hello Mir!, окончено. Объяснены не все тонкости работы кода, остальное станет понятным из других глав учебника. |
21.11.2015, 01:28 | #13 | ||||||
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Перевод непосредственно книги "SCOL Tutorial Language" продолжу чуть позже, а перед этим несколько постов посвящу дополнительной информации о языке, не представленной в книге.
Итак. Некоторое время назад я задал вопросы по языку SCOL на официальном форуме проекта. Первыми ответили два главных разработчика из Франции - arkeon (Бастин Бурино) и iri (Стефан Бисаро). Тема находится здесь http://www.scolring.org/forum/viewtopic.php?id=1406 Вкратце суть такая: Вопрос 1. Почему технология SCOL почти неизвестна в мире? Ответ 1. Цитата:
Вопрос 2. Почему выбран именно SCOL? (для OpenSpace3D) Ответ 2. Цитата:
Вопрос 3. Какие недостатки у SCOL? Ответ 3. Цитата:
Вопрос 4. SCOL - интерпретируемый язык. Для тяжёлых 3D-сцен он не медленный? Ответы 4. Цитата:
Цитата:
Вопрос 4.1. Функции (API) SO3Engine замедляют работу 3D-сцен (про сравнению с "чистым" Ogre3D)? Или нет? Ответ 4.1. Цитата:
Последний раз редактировалось Avatar-Z; 21.11.2015 в 01:38. |
||||||
21.11.2015, 01:28 | #14 | |||||||
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Вопрос 5. У SCOL много общего с OCaml?
Ответы 5. Цитата:
Цитата:
Цитата:
Вопрос 6. Какие программы написаны на SCOL? (кроме OpenSpace3D, SCS, http://www.arkeon.be/skin1/products....e=projets_scol) Ответ 6. Цитата:
Вопрос 7. SCOL Server больше не развивается? SCOL Server 4 - последняя версия? Ответы 7. Цитата:
Цитата:
Ещё был вопрос: Скажите пожалуйста, есть книги новее этой? http://redmine.scolring.org/projects...alLanguage.pdf Ответ. Цитата:
___________________________________ _ Со временем, если получится перевести книги по SCOL и OpenSpace3D, возможно смогу задать разработчикам и более детальные вопросы по технологии. Последний раз редактировалось Avatar-Z; 21.11.2015 в 01:36. |
|||||||
21.11.2015, 19:48 | #15 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Материал из вики-учебника Данный материал не входит в текст основной книги, он является лишь очень кратким описанием языка SCOL. Выкладываемый перевод ещё более краткий. Ссылка на оригинал вики-учебника по SCOL http://redmine.scolring.org/projects...iki/Scol_usage ___________________________________ _______ В SCOL всё является функцией (так как это функциональный язык). Функции всегда должны возвращать результат. Результат должен иметь тот же тип. Любой код, находящийся за пределами какой-либо функции, будет приводить к фатальной ошибке. Существуют несколько примитивных типов: I (аналог int в языке C). Целочисленный тип. F (аналог float в языке C). Тип чисел с плавающей точкой. S (аналог string в языке C). Строковый тип. Также некоторые другие типы (Env, Chn, Srv и Comm). Но разумеется, можно создать любой другой тип, который нам необходим. Переменные в SCOL также являются функциями, и могут быть либо глобальными, либо локальными. Локальная переменная видна (известна) только для следующей инструкции. Такая инструкция может быть одиночной, или находиться в блоке инструкций (команд). Область видимости глобальной переменной распространяется на весь последующий (после объявления этой переменной) код. И локальная и глобальная переменная не может менять свой тип. Если мы попытаемся это сделать, то компиляция остановится, и приложение завершится с ошибкой. Перед использованием любой функции и любой переменной, нужно известить компилятор об их существовании. Проще говоря, функции и переменные перед использованием нужно объявлять. Будьте осторожны - исходный код, написанный на SCOL не читается таким же образом, как в процедурных языках программирования. SCOL чувствителен к регистру во всех случаях. Как написать функцию? Функции всегда записываются так: Код:
Имя функции должно состоять только из следующих символов ASCII, без пробелов: a-z, A-Z, 0-9 То есть из строчных и прописных латинских букв, а также из цифр. Параметры должны разделяться запятой. Пример: Код:
Код:
|
21.11.2015, 20:01 | #16 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Как вызвать функцию?
Чтобы вызвать нужную функцию из другой функции, напишите её имя, а также аргументы. [обратите внимание, что аргументы можно писать без скобок и разделять их пробелами, а параметры - в скобках с разделением через запятую]. Код:
Как объявить переменную? Глобальная переменная может быть объявлена двумя способами. 1. С заданием типа: Код:
Код:
В первом случае, переменная myVariable равна нулю. Ноль - это конкретное значение, в данном случае являющееся аналогом NULL в языке C. Во втором случае, myVariable имеет тип S (строковый тип), так как его начальное значение является строкой. В дальнейшем эти значения и типы вы не можете менять. Глобальная переменная всегда объявляется вне функции: Код:
let <начальное_значение> -> <переменная> in Код:
Переменная myOtherVariable видна только в instruction_1. В третьей инструкции (instruction_3) ни myVariable, ни myOtherVariable не могут быть использованы. Примечания: 1. Вы можете объявлять переменные с нулевым значением (nil), но компилятор должен недвусмысленно определить тип переменных. Как это происходит - увидим позже. 2. Имя переменной должно состоять только из следующих символов ASCII: A-Z, a-z, 0-9. |
21.11.2015, 20:05 | #17 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Как устанавливать новые значения переменных?
Хотя напрямую изменить изначально присвоенное переменной значение нельзя - при необходимости установить новое значение можно через параметры функции. Делается это с помощью команды set. Код:
Как и в C++, можно использовать как однострочные, так и многострочные комментарии. Чтобы добавить однострочный комментарий, используйте двойной слэш // Для добавления многострочного комментария нужно использовать конструкцию /* комментарий */ |
27.11.2015, 15:21 | #18 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Как написать программу Hello World ?
Для этого существует много способов. Представленный ниже способ отнюдь не самый простой. Откройте ваш любимый текстовый редактор и напишите следующие строки: Код:
1. Вначале объявляем глобальную переменную myString, и присваиваем ей начальное значение "World" 2. Пишем функцию printHello. Эта функция выводит сообщение в консоль. Она принимает один аргумент. Обратите внимание, что тип аргумента никогда не определяется явно, так как функция может быть полиморфной. Компилятор будет неявно определять тип, исходя из контекста. Аргументы доступны во всём теле функции (от символа "=" до двойной точки с запятой). strcat является SCOL-функцией, которая предназначена для объединения двух строк. Два аргумента функции strcat должны иметь тип S, поэтому компилятор считает, что результирующая строка тоже имеет тип S. Возвращаемое значение данной функции - это возвращаемое значение её последней инструкции. _fooS возвращает строку (S), поэтому функция также возвращает значение типа S. 3. Следующая функция - print. Она выводит несколько сообщений в консоль (а также в лог-файл). Аргументы не требуются. В первой инструкции вызывается записанная ранее функция printHello. В качестве аргумента в параметр string передаётся глобальная переменная myString, в которой находится значение строкового типа - слово "World". Во второй инструкции в глобальную переменную myString устанавливается новое значение того же типа - "Bob". Третья инструкция снова вызывает функцию printHello с аргументом myString. Не забывайте, что теперь значение переменной myString изменилось. Ещё раз хочу напомнить, что SCOL - язык с преобладающей парадигмой функционального программирования, поэтому напрямую менять значения переменных нельзя. Изменить значения можно через параметры функций с помощью команды set. В четвёртой инструкции определяем локальную переменную anyString с начальным значением строкового типа - "Alice". Как было сказано ранее - локальные переменные объявляются только внутри каких-либо функций. В данном случае anyString объявляется внутри функции print, и о ней ничего не известно вплоть до пятой инструкции. Наконец, в пятой инструкции снова вызывается функция printHello, но в её параметр string в качестве аргумента уже передаётся новая переменная - anyString. В конце тела функции print, в качестве её возвращаемого значения записываем 0 (целочисленный тип). Обчно всегда возвращается ноль, если значение больше не используется. Результатом работы функции print станет вывод в консоль следующих строк: Hello World Hello Bob Hello Alice 4. Функция main является главной функцией. В отличие от некоторых других языков программирования - её имя может быть любым. Главная функция может принимать любое число аргументов, или не принимать ни одного. При необходимости мы можем определять несколько главных функций. Главной функцией является функция, вызываемая из сценария запуска (файл с расширением .scol). В нашем случае первая инструкция функции main предназначена для отображения консоли. Вторая - вызов функции print. Третья - вызов функции printHello, где в качестве аргумента указывается не переменная, а конкретное значение. В итоге появится фраза "Hello Scol Community !" Ну и наконец, main возвращает целочисленное значение 0. Возвращаемое значение не влияет на [the following the application (следующие приложения ??)] |
27.11.2015, 18:11 | #19 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Операторы языка SCOL
Для целых чисел: Плюс : + : 1+2 5 + 20 Минус : - : 1 - 2 20 - 5 Умножить : * : 1*2 20 * 5 Делить : / : 1/2 20 / 5 По модулю: mod : mod 1 2 mod 20 5 ___________________________________ _ Для чисел с плавающей точкой: Плюс : +. : 1.0 +.2.2 5.1 +. 20.0 Минус : -. : 1.0 -. 2.2 20.0 -. 5.1 Умножить : *. : 1.0*.2.2 20.0 *. 5.1 Делить : /. : 1.0/.2.2 20.0 /. 5.1 По модулю : mod. : ___________________________________ _ Для строк: Конкатенация : strcat : strcat "Bob" "Alice" => "BobAlice" Конкатенация : strncat : strncat "Bob" :: " and " :: "Alice" :: nil => "Bob and Alice" Субстрока : substr aString position length : substr "Bob and Alice are married" 8 5 => "Alice" ___________________________________ _ Логические операции: И : && : (x > 5) && (x < 10) ИЛИ : || : (x < 5) || (x > 10) НЕ : ! : !1 (=> 0) ___________________________________ _ Побитовые операции: (также, как и в языке C) and : & : 5 & 3 5 & 2 or : | : 5 | 3 5 | 2 Сдвиг: >> : 5 >> 1 << : 5 << 1 ___________________________________ _ Операции сравнения: > : 5 > 2 true >= : 5 >= 5 true < : 5 < 2 false <= : 5 <= 2 false == : 5 == 5 true ___________________________________ _ Другие операции: [different (Разные ??)] != : 5 != 2 true Сравнение двух строк (также, как и в языке C) : strcmp stringA stringB : -- возвращает 1, если строки отличаются и код первого отличающегося символа в строке stringA больше кода символа на той же позиции в строке stringB. [перепроверить] -- возвращает -1, если строки отличаются и код первого отличающегося символа в строке stringA меньше кода символа на той же позиции в строке stringB. [перепроверить] -- возвращает 0, если строки равны -- также, если строки разной длины, то возвращается положительное число, если строка stringA длиннее строки stringB, или отрицательное число, если строка stringB длиннее строки stringA. [перепроверить] ___________________________________ _ Приоритеты операций: Такие же, как и в языке C. |
27.11.2015, 22:28 | #20 |
Пользователь
Регистрация: 03.09.2015
Сообщений: 63
|
Типы в языке SCOL
Наиболее часто используемыми в SCOL типами являются: I : integer (целое число) S : string (строка) F : float (число с плавающей точкой) Chn : SCOL-канал Srv : SCOL-сервер Env : SCOL-окружение Comm : связи [коммуникации, соединения] (как правило, между виртуальными машинами SCOL) Есть ещё несколько часто используемых стандартных типов, но о них позже. Кроме того, для вашего приложения можете создать собственные типы. Каким образом создаются такие типы, также будет рассказано потом. Ветвления (условия) в SCOL Ветвления осуществляются с помощью конструкции if - then - else. Код:
Код:
Будьте осторожны, if <условие> then <инструкции> else <инструкции> - это одна команда! Поэтому точку с запятой можно ставить только в конце последней инструкции блока else. Пример: Код:
Код:
Последний раз редактировалось Avatar-Z; 27.11.2015 в 22:31. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Перевод ячейки на Русский | Юнлинг | Microsoft Office Excel | 7 | 04.10.2015 20:16 |
OpenSpace3D - перевод хэлпа на русский | Avatar-Z | Софт | 18 | 06.09.2015 23:51 |
Перевод программы на русский язык. | shivo | Фриланс | 1 | 05.01.2011 15:20 |
перевод на русский | Ensoph | Общие вопросы Delphi | 3 | 19.05.2008 10:09 |