что такое скрипт и как он работает
Что такое скрипт простыми словами
Скрипт хранится в виде текстового файла на хостинге и доступен для запуска пользователями.
Рейтинг лучших виртуальных хостингов вы можете увидеть вот тут
На виртуальном хостинге автоматический запуск скрипта настраивается один раз (самим пользователем, либо системным администратором, либо техподдержкой по запросу пользователя), а затем скрипт срабатывает автоматически в нужный момент. Никаких манипуляций со скриптом вам вручную больше совершать не нужно, возможно лишь взаимодействие, в зависимости от задач скрипта.
Часто скрипты отвечают за различные динамические элементы сайта:
Скриптовые языки
Все сценарные языки программирования имеют разный синтаксис и области применения.
Что делают скрипты и где применяются
Скрипт может выполняться:
Например, в случае работы в консоли Linux-сервера скрипты используются для:
2. В браузере пользователя сайта применяются скрипты на языке JavaScript.
Если вы решите подключить на свой ресурс сервис чата онлайн-консультанта, например, JivoSite, то вы должны будете разместить на сайте скрипт на языке JavaScript, обеспечивающий работу этого инструмента.
Являются ли WEB-страницы скриптами?
В случае страницы на языке PHP с формой для ввода данных пользователя, можно сказать, что отрабатываются сразу два сценария:
Отправка формы
В форме обратной связи, которую применяет пользователь для контакта с владельцами сайта, человек указывает:
В HTML такая простая форма, в которой содержится три поля и кнопка “отправить”, выглядит так:
Обратите внимание, на атрибут action, содержащий адрес PHP-скрипта, который после отправки должен обработать эту форму.
Обработка формы
После того, как пользователь нажимает на кнопку “Отправить”, управление формой передается PHP-скрипту, который после получения данных, сохраняет их в базе данных и показывает вам сообщение об успешном выполнении задачи. Например, скрипт может показать вам сообщение “Отправлено” или “Ваши данные успешно отправлены”.
В WEB-страницу могут быть встроены сразу несколько скриптов JavaScript, каждый из которых несет свою конкретную функцию.
Сложно ли писать скрипты самостоятельно?
Системные администраторы постоянно пишут для себя разнообразные скрипты для автоматизации повседневных рутинных задач.
Написание скриптов требует знания конкретного языка программирования и общих принципов:
Обычному пользователю хостинга не обязательно учиться писать скрипты самостоятельно. Этот навык может понадобиться в случае, если человек решит заняться программированием профессионально.
Если же вам просто нужно добавить интерактивности на свой сайт, то можно воспользоваться готовыми скриптами на JavaScript. Наиболее полная библиотека скриптов находится здесь.
Пользователям виртуального хостинга также нужно изучить инструкции по применению скриптов, например, чтобы правильно настроить их выполнение по расписанию. В инструкции будет указано, в каком месте конкретного файла нужно разместить текст скрипта.
Например, простейший скрипт можно создать и запустить прямо из командной строки в консоли.
Достаточно просто набрать строку:
А после завершить набор команд нажатием Enter.
Данная строка содержит две команды, разделенные точкой с запятой.
Интерпретатор языка Shell выполнит команды одну за другой, и на экране появится результат их работы.
Скрипт
В современном программировании в Сети скрипты (сценарии) – это отдельные последовательности действий, созданные для автоматического выполнения задачи. Если готового сценария нет, пользователь выполняет эти действия вручную с соответствующими затратами времени и возможностями появления ошибок.
Для написания скриптов используются специальные языки программирования, которые так и называются – скриптовые. Соответственно, скриптовый язык программирования – это набор лексический, семантических и синтаксических правил для создания и редактирования скриптов. Корректно также синонимичное название «язык сценариев».
История развития скриптов
Рассмотрим для примера историю развития наиболее распространенного скриптового языка JavaScript. Именно с его помощью реализуются множество решений по взаимодействию пользователей с сайтами, программируются широкие возможности интерактивных страниц.
В 1995 году компания Netscape для своего популярного на тот момент браузера Netscape Navigator 2.0 предложила специальный язык под названием LiveScript. На то время возможности языка были очень скудными, и многие просто не понимали, что такое скрипт (script) в браузере. Тогда он мог проверять и обрабатывать те данные, которые пользователь оставлял на странице сайта через форму. Такая проверка давала возможность контролировать правильность введенных данных и избегать отправки формы без нужной информации. Вскоре название этого языка было изменено на JavaScript.
Через некоторое время известный конкурент Netscape – корпорация Microsoft – создал свою версию JavaScript. Несмотря на то что такой скриптовый язык программирования имел немного отличающиеся функции, он успешно прижился и получил собственное название JScript. Он начал использоваться в браузере Internet Explorer начиная с версии 3.0. Через некоторое время и другие браузеры стали поддерживать JavaScript.
Со временем язык развивался и совершенствовался, теперь с его помощью можно успешно решать гораздо более сложные задачи. Интерпретатор JavaScript является встроенным элементом всех современных браузеров.
Несмотря на жесткую конкуренцию, Microsoft и Netscape вместе с наиболее авторитетными разработчиками обеспечения для деятельности в Интернете трудились в организации W3C. В результате были подготовлены единые стандарты и рекомендации. Но все же языки JavaScript и JScript имеют определенные различия, что необходимо учитывать в работе.
Основные принципы скриптов
Интерпретатор языка JavaScript встроен во все популярные браузеры. Именно поэтому любой браузер понимает, что такое скрипт на этом языке. Эти коды успешно выполняются в тот момент, когда пользователь обращается к страницам сайта. Но такие же скрипты могут успешно работать и на сервере, если на нем установлен интерпретатор JavaScript. Сценарии могут выполняться как на стороне клиента, в браузере, так и непосредственно на сервере.
Скрипты имеют следующие цели:
Преимущества скриптов
Недостатки скриптов
Типы скриптов
По степени быстродействия они подразделяются на языки динамического разбора (sh, COMMAND.COM) и требующие предварительной компиляции, такие как Perl. Также скриптовые языки разбиваются на несколько больших групп по применению.
Примеры скриптовых языков
Наиболее известные: PHP, Perl, Python, AngelScript, JavaScript, JScript и другие. Все они являются высокоуровневыми. По своему механизму действия скриптовые языки обычно интерпретируются, а не компилируются.
Роль скриптов в продвижении
Использование в процессе программирования страниц слайдеров, динамических навигационных меню, активных элементов анимации позволяет расширить юзабилити сайтов, увеличить их посещаемость. Удачные решения на этой основе значительно повышают продажи. В качестве примера можно рассмотреть специальные технологии создания видеопродающих страниц. Здесь используются приемы на основе JavaScript.
И таких решений множество.
Отдельно стоит отметить технологии создания скриптов, имитирующих с помощью специальных программ действия пользователей в различных направлениях. Такие скрипты и шаблоны формируются на основе программ ZennoPoster, Human Emulator и их аналогов.
Уникальность таких решений базируется на том, что в шаблонах ZennoPoster может быть запрограммирована любая последовательность действий реального пользователя. При этом программа может эмулировать одновременно практически неограниченное количество пользователей, применять как собственные, так и получаемые из Интернета информационные базы.
В качестве примера можно рассмотреть шаблоны, позволяющие в автоматизированном режиме выполнять множество действий по продвижению сайтов и товаров в социальной сети «ВКонтакте». Другие шаблоны обеспечивают размещение объявлений или иной информации в Сети. Третьи в автоматизированном режиме могут генерировать множество блогов и страниц, на которых размещаются ссылки или коммерческая информация. Пользователи, которые видят результаты таких действий, обычно не знают, что это заскриптованный алгоритм размещает информацию для них в соцмедиа.
Во многих случаях для продвижения сайтов необходимо множество аккаунтов почты. В качестве примера можно рассмотреть почтовый сервис mail.ru. Автоматизированный шаблон для программы ZennoPoster легко справляется с этой задачей. При этом скрипт не просто заходит на страницу регистрации, но также самостоятельно выполняет работу по разгадыванию капчи, определяет возможный бан IP-адреса и выполняет много других действий.
Использование языка JavaScript в контекстной рекламе
Еще в 2012 году рекламная система Google AdWords внесла в свой интерфейс возможности использования скриптов для автоматизации управления рекламной кампанией. Такой способ управления работает значительно быстрее, чем использование API.
К тому же он не требует применения сложных языков программирования. Задачи на основе скриптов запускаются по расписанию. Они обеспечивают регулярную проверку аккаунта, дают возможность анализировать статистику рекламы и вносить любые заданные изменения.
При этом можно в автоматизированном режиме отслеживать качество рекламных объявлений, отключать неэффективные каналы рекламы и подключать эффективные.
Что такое скрипт сайта и как его установить
Что такое скрипт сайта
Чтобы сайт работал в соответствии с заданным алгоритмом, для него пишут программы – это скрипты. Они автоматизируют действия на сайте. Без скриптов нажатие пользователем на кнопку, например, «Оставить комментарий» ни к чему не приведет. Поэтому необходим сценарий, который пишут на языке программирования.
Скрипты делятся на две категории:
Языки скриптов
Сценарии пишут с помощью специальных языков, которые называют скриптовыми. У них разный синтаксис, возможности и области применения. Языки бывают трех видов:
Принцип работы скриптов
Скрипты работают по следующей схеме:
Автоматические сценарии устроены так, что пользователю не нужно совершать действие. Это всплывающая поп-ап реклама или автоматическая прокрутка баннеров при открытии страницы сайта. Также некоторые скрипты выполняются не на сервере, а в браузере. Для этого в браузерах встроен интерпретатор скриптового языка. Почти все браузеры умеют распознавать один из языков — JavaScript.
Для чего применяют скрипты
Скрипты обеспечивают функциональность сайта. Они устанавливают алгоритмы поведения в каждой предусмотренной ситуации. С помощью скриптов:
Роль скриптов в СЕО
Скрипт создает нагрузку на сервер или браузер. Когда скриптов слишком много, сайт зависает и тормозит, а это сказывается на поведении пользователей. Поведенческий фактор важен при ранжировании страниц в поисковой выдаче, поэтому СЕО-специалисты не рекомендуют использовать много анимации или динамических элементов.
Кроме этого, скрипты много весят. Их нужно ставить в конце кода, чтобы при открытии страницы они грузились последними. Иначе пользователь не дождется загрузки сайта и уйдет, а его визит будет засчитан как отказ. Это часто происходит, когда сайт открывают с мобильных устройств или при слабом интернет-соединении с ПК. Большое количество отказов снижает посещаемость и опускает позиции в выдаче.
Роль скриптов в продвижении
Использование языка JavaScript в контекстной рекламе
В системе Google Adwords есть возможность управлять рекламной кампанией с помощью скриптов, написанных на JavaScript. Скрипт – это более простой и быстрый способ по сравнению с использованием API. Сценарий запускает задачи по расписанию: регулярная проверка рекламного аккаунта, анализ статистики, внесение изменений. Также можно автоматически следить за качеством объявлений, отключать неэффективные каналы и подключать новые.
Преимущества и недостатки скриптов
Альтернативных решений, которые будут работать как скрипты, в веб-разработке почти нет. Скрипты наиболее доступны и эффективны. У них есть ряд преимуществ:
В использовании скриптов есть и свои недостатки:
Как установить скрипт на сайт
Скрипты несложно установить, так как у них есть инсталлятор для автоматической установки. После того, как у вас будет готовый файл со сценарием, нужно выполнить следующие шаги:
Примеры использования скриптов
На сайтах часто можно встретить всплывающие окна с формой для обратной связи, чатом для обращения в техподдержку.
Скрипты могут использовать для автоматического формирования страниц или меню на них. Специализированные калькуляторы тоже делают с помощью скриптов.
Заключение
Скрипты упрощают работу вебмастера, улучшают функционал сайта и помогают в продвижении. Их безопасно использовать, так как ошибка в одном модуле не представляет угрозы для работы всей системы. Но следует учитывать – несмотря на то, что прописанные сценарии делают сайт удобным для пользователя, большое количество анимации и всплывающих окон может плохо повлиять на посещаемость и позиции сайта в поиске.
Теория правильных скриптов
Чем различается скрипт и программа? Вовсе не используемым языком или наличием интерфейса.
Скрипт же, в строго обратном смысле: он предназначен для решения конкретной проблемы «здесь и сейчас». Никто не ожидает от скрипта, который отсылает статистику, способности делать это одновременно на solaris’е, freeBSD и windows embedded standard с cygwin’ом на борту.
По математико-программистким представлениям, между скриптами администрирования и программами нет разницы. Они работают по одинаковым принципам, вообще говоря, выполняют почти одно и то же.
Разница между скриптом и программой — административная.
Давайте подробнее об этих составляющих…
1) Алгоритм. У любой программы есть во-первых некая идея (что, собственно, делает программа), во-вторых — обвязка. Чтение конфигов, вывод в сислог, оповещение по почте и ещё тысяча не связанных с основной задачей операций. Но программу используют не ради чтения конфигов и записи в лог, а ради того, что она ДЕЛАЕТ. Соответственно, обычно идея заключается в выполнении каких-то действий по какому-то алгоритму. Нетривиальная идея. В фактическом коде это может быть меньше, чем чтение xml-конфига, но при этом именно рабочий алгоритм — суть программы. Он может быть или «обрабатывающим данные» (вроде SQL’я), или математическим (вроде md5sum), или работающим с конкретными особенностями конкретной железки (формата файла) — но он всегда требует высокой квалификации в предметной области для адекватного понимания принципов работы. Понятно, что код OpenSSL может читать любой программист. Понятно, что алгоритм работы OpenSSL может понять только хороший математик.
Но мы пишем не о программах — о скриптах. Так вот, скрипт не должен реализовывать нетривиальные алгоритмы. Если вы у себя в скрипте пишите аналог base64 — это плохой скрипт. Если вы у себя в скрипте пишите отправку сообщений по smtp методом «открыли сокет, записали» — это омерзительный скрипт. Если вы у себя в скрипте ловите данные с ком-порта и пишите туда ответ (для управления УПСом) — это писец какой-то, а не скрипт.
Скрипт НЕ ДОЛЖЕН содержать в себе алгоритма в терминах «предметной области». У скрипта нет предметной области, скрипт — обвязка вокруг программ, которые уже работают с предметными областями. В некоторых случаях скриптовый язык может предоставлять весь инструментарий:
Это скрипт. Просто скрипт. Не смотря на то, что он реализует офигенный объём работы. А вот если у вас md5 — класс, объявленный в скрипте 5 строчками выше с имплементацией md5 (или url, или open, или smtp, etc) — это уже потуга на программу. Но программа — это много сложнее, чем алгоритм, её составляющий — и подобное не должно реализовываться в скриптах. НИКОГДА.
2) Любая программа должна обладать известным поведением. Математики предлагают описывать поведение программы в всеобъемлющих терминах; практика же говорит, что обычно кроме алгоритма программа ещё содержит баги и фичи, которые влияют на её поведение, к которым надо адаптироваться. Адаптироваться к ним куда проще, когда есть некоторая практика использования программы.
«KDC has been valid once but invalid now» — если это сообщение от скрипта — всё, хоронить. Прямо тут, на месте. У программы это вполне разумное сообщение по которому можно гуглить и выяснять, что именно не так. Это прямое следствие наличия в программе некой предметной логики, специфичной и требующей от пользователей не изучать её насквозь, а принять бехивиористически. То бишь как набор утверждений о поведении программы. «Данная версия программы не понимает файлы больше 2Гб в размере». Это не укладывается в алгоритм (а если уложится — будет занимать этак с том дискретной математики) — но это нужно знать в практическом смысле. «Данная программа плохо себя ведёт в условиях симметричной нагрузки на аплоад/даунлоад, лучше запустить две копии, каждая из которых будет работать в свою сторону симметрично» — понимание _ПОЧЕМУ_ потребует титанических усилий, проще принять это как данность. Чем сложнее алгоритм, тем больше жизни нужно потратить на его исследование, адаптацию и глубокое изучение. На всё жизни не хватит, значит, проще принять как данное и сконцентрироваться на важном.
Скрипт же, обратно, должен быть кристально понятен каждому, кто его посмотрит (с поправками на знание скриптового языка). Никаких (if every in self.__datarange__ is not in any map(__systable__.lang, __localtable__.map, lambda (a,b):[a in b or b in a for every __sys__.pair(a,b)])) raise «Missed i18n constitution».
3) Скрипт решает задачу _ЗДЕСЬ_И_СЕЙЧАС_. Программа решает задачу _ТАМ_И_ВСЕГДА_ (с поправкой на опыт эксплуатации из п.2). Когда вы пишите скрипт, вы делаете так, чтобы оно работало в вашей системе. Оно не годится для свободного использования в других системах (хотя может быть ЛЕГКО (см п.1) адаптировано). Программа должна быть адаптируема к куче вариантов применения, реализация этой адаптации в скрипте приводит к потере его простоты и превращению его, собственно, в программу. Кроме того (увы и ах), но знание КАК ПРАВИЛЬНО писать программу не эквивалентно написанию правильного алгоритма. Вы можете написать потрясающую библиотеку, но если вы не сможете запустить её на машине, у которой понедельник первый день недели (или второй — кому как повезёт), то грош цена вашей библиотеке. Необходимость думать об этом — это уже написание программ — скрипту такое допустимо (хотя и не желательно).
Ну и ещё важное отличие между скриптами и программами. Программы (в форме библиотек) могут «наслаиваться» друг на друга. Этой программе нужен libYYY, которая использует libZZZ и libAAA, при этом libAAA использует libZZZ и libc. Это нормально.
Скрипты же НЕ ДОЛЖНЫ ЗАВИСЕТЬ ДРУГ ОТ ДРУГА. Ситуация, когда скрипт зависит от сервисов другого скрипта, который зависит от третьего — ненормальная.
Заметим, речь идёт о зависимости. Вполне можно представить себе скрипт, который вызывает другие скрипты и выдаёт обобщённый результат по ним, но это уже грань. Чуть сложнее (например, «запустить скрипт А если скрипт Б не отработал») — уже за гранью фола. Нехорошо. А если скрипт А не отработал но не сообщил об этом? Или чуть-чуть отработал, но потом отвалился так, что скрипту Б не получится доделать (а мы, как авторы скрипта А, и подумать не могли о подобном)?
Что же вообще должен делать хороший скрипт? Сращивать несколько программ в конкретную систему. Можете считать программы за детали конструктора. А сам конструктор — за скрипт. Вам НЕ СЛЕДУЕТ нарезать винтовую нарезку на шпинделе — возьмите шпиндель с нарезкой. Вам не следует делать эллиптический валик из этой резинки — оно всё равно будет плохо работать. Если у вас в конструкторе нет квадратной пластинки с дырками по краям, то это проблема нехватки деталек. Вы можете попытаться сделать квадратную пластину из пары прямоугольных, но не следует делать её и сотни длинных полосок.
Бывает так, что скрипты перерождаются в программы. Внезапно в скрипте появляется некая логика (алгоритм), которая становится нетривиальна (и полезна). В этот момент нужно поймать это — и не полениться потратить в три раза больше времени, но сделать её программой. Обеспечить её «мясом», которое отличает программу от скрипта. Добавить сотню проверок условий, заменить все константы на конфигурируемые переменные, приготовить её для работы в «непривычных» условиях. Желательно сделать её публичной (тогда может наработаться практика использования).
Обычный пайп представляет из себя практически идеальный инструмент для конструирования простых программ:
Грань, в которой заканчивается скрипт найти сложно. Скажем так, цикл — ещё терпимо. Проверка условия — нормально. Но вот проверка условия в цикле (больше, чем выход из цикла) — это уже плохо. Если же у вас цикл, в котором по проверке условия запускается цикл — это 100% программа. Если у неё нет всего того, что должно быть у программы, значит это просто очень плохая программа. Но никак не скрипт.
Когда я смотрю на сборники «полезных скриптов» (вот тут (forum.sysadmins.ru), например), я понимаю, что это программы. Ужасные программы без сопроводительной документации, процедуры установки, без проверки условий… Так нельзя.
Применение подобных скриптов — признак крайней куцести рабочей среды. Я одно время пробовал с ними ужиться, но пришёл к выводу, что это ошибка. Куда правильнее иметь набор тулкитов (т.е. полноценных программ, реализующих конкретные вещи полностью и хорошо), чем набор аналогичных скриптов (повторю ещё раз — программа может быть написана на том же скриптовом языке — разница между скриптом и программой в непрограммерской обвязке: документации и приспособленности к жизни в широком спектре систем).
Применение копипастнутых скриптов — подобие ранне-досового копирования на дискетках полезных программулин. Работает — радуемся, не работает — пофигу, сломало всё — злимся. В условиях выбора между копипастнутым скриптом и программой (и минимальной обвязкой) следует выбирать программы. Даже если внедрение программы потребует дополнительных усилий по изучению, налаживанию и т.д. Наладив программу, вы получите программу. Отладив скрипт вы получите лишь костыль, прочность и долговечностью которого не знает даже автор.
Каждый раз, когда возникает подобная ситуация: делать скрипт или искать программу, следует начать с поиска программы. Потому что программирование увлекает (да нафига нам nagios, мы и сами напишем пачку скриптов мониторинга), а изучение чужого — утомляет (ну хрена она работает не так как я ожидаю?). Но последствия «недопрограммирования» — отсутствие документации к тому «дымоходу», который вы сделали. А последствие внедрённого решения — система, которая умеет работать сама по себе.
Что такое скрипты и с чем их едят — Lua & C++
Добрый день, Хабрахабр!
Решил написать этот топик на тему скриптов
Что нужно знать?
Но есть способ, на голову выше — использование скриптов.
Решение проблемы
«Окей, для таких дел хватает обычного файла с описанием характеристиков игрока. Но что делать, если в бурно развивающемся проекте почти каждый день приходится немножко изменять логику главного игрока, и, следовательно, много раз компилировать проект?»
Хороший вопрос. В этом случае нам на помощь приходят скрипты, держащие именно логику игрока со всеми характеристиками либо какой-либо другой части игры.
Естественно, удобнее всего держать, логику игрока в виде кода какого-нибудь языка программирования.
Первая мысль — написать свой интерпретатор своего скриптового языка, выкидывается из мозга через несколько секунд. Логика игрока определенно не стоит таких жутких затрат.
К счастью, есть специальные библиотеки скриптовых языков для С++, которые принимают на вход текстовый файл и выполняют его.
Об одном таком скриптовом языке Lua пойдет речь.
Как это работает?
Прежде чем начать, важно понимать, как работает скриптовый язык. Дело в том, что в скриптовых языках есть очень мало функций, при наличии конструкций for, while, if, прочих.
В основном это функции вывода текста в консоль, математические функции и функции для работы с файлами.
Как же тогда можно управлять игроком через скрипты?
Мы в С++-программе делаем какие-либо функции, «регистрируем» их под каким-нибудь именем в скрипте и вызываем в скрипте. То есть если мы зарегистрировали функцию SetPos(x,y) для определения позиции игрока в С++-программе, то, встретив эту функцию в скрипте, «интерпретатор» из библиотеки скриптового языка вызывает эту функцию в С++-программе, естественно, с передачей всех методов.
Удивительно, да? 🙂
UPD: Внимание! Один юзер обратился мне с мейлом, что, когда я заливал код, я не полностью устранил все ошибки — habrahabr.ru/post/196272/#comment_6850016
В коде с позволения хабра проникли жучки
Замените участки кода вроде
И еще вместо lua_CFunction проскакивает lua_cfunction
Спасибо!
Я готов!
Когда вы поняли преимущества скриптовых языков программирования, самое время начать работать!
Скачайте из репозитория на гитхабе (низ топика) lib’у и includ’ы Lua, либо возмите их на официальном сайте.
Создаем консольный проект либо Win32 (это неважно) в Visual Studio (у меня стоит версия 2012)
Заходим в Проект->Свойства->Свойства конфигурации->Каталоги VC++ и в «каталоги включения» и «каталоги библиотек» добавьте папку Include и Lib из репозитория соответственно.
Теперь создаем файл main.cpp, пишем в нем:
Как вы догадались, у меня консольное приложение.
Теперь переходим к кодингу
Обещаю, что буду тщательно объяснять каждый момент
У нас за скрипты будет отвечать класс Script. Я буду объявлять и одновременно реализовывать функции в Script.h/.cpp
Создаем Script.cpp и пишем в нем
Создаем Script.h и пишем в нем
После 2 строчки и перед #endif мы определяем класс скриптов
Этот код пишется для предотвращения взаимного включения файлов. Допустим, что файл Game.h подключает Script.h, а Script.h подключает Game.h — непорядок! А с таким кодом включение выполняется только 1 раз
Теперь пишем внутри этого кода вот это
Первая строчка подключает сам lua.lib из архива.
Для чего нужен extern «C»? Дело в том, что lua написан на С и поэтому такой код необходим для подключения библиотек.
Дальше идет подключение хорошо известных многим файлов для работы с консолью
Теперь приступим к определению класса
Самый главный объект библиотеки Lua для C++ — lua_State, он необходим для выполнения скриптов
Дальше идут публичные функции
Эта функция инициализирует lua_State
Его определение в Script.cpp
Первой строчкой мы инициализируем наш lua_State.
Потом мы объявляем список «подключенных библиотек». Дело в том, что в «чистом» виде в луа есть только функция print(). Для математических и прочих функций требуется подключать специальные библиотеки и потом вызывать их как math.foo, base.foo, io.foo. Для подключения других библиотек добавьте в lualibs, например, <«math», luaopen_math>. Все названия библиотек начинаются с luaopen_. в конце lialibs должен стоять
Просто используем lua_close()
А эта функция выполняет файл. На вход она принимает название файла, например, «C:\\script.lua».
Почему она возвращает int? Просто некоторые скрипты могут содержать return, прерывая работу скрипта и возвращая какое-нибудь значение.
Как вы видите, я выполняю скрипт и возвращаю int. Но возращать функция может не только int, но еще и bool и char*, просто я всегда возвращаю числа (lua_toboolean, lua_tostring)
Теперь мы сделаем функцию, регистрирующую константы (числа, строки, функции)
Мы действуем через шаблоны. Пример вызова функции:
Ее определение
Для каждого возможного значения class T мы определяем свои действия.
*Капитан* последнее определение — регистрация функции
Функции, годные для регистрации, выглядят так:
Где n — количество возвращаемых значений. Если n = 2, то в Луа можно сделать так:
Читайте мануалы по Луа, если были удивлены тем, что одна функция возвращает несколько значений 🙂
Следующая функция создает таблицу для Луа. Если непонятно, что это значит, то тамошная таблица все равно что массив
Следующая функция регистрирует элемент в таблице.
Если вы не знаете Lua, вы, наверное, удивлены тем, что в один массив помещается столько типов? 🙂
На самом деле в элементе таблицы может содержаться еще и таблица, я так никогда не делаю.
Наконец, заполненную таблицу нужно зарегистрировать
Ничего особенного нет
Следующие функции предназначены в основном только для функций типа int foo(lua_State*), которые нужны для регистрации в Луа.
Первая из них — получает количество аргументов
Эта функция нужна, например, для функции Write(), куда можно запихать сколь угодно аргументов, а можно и ни одного
Подобную функцию мы реализуем позже
Следующая функция получает аргумент, переданный функции в скрипте
Можно получить все типы, описывавшиеся ранее, кроме таблиц и функций
index — это номер аргумента. И первый аргумент начинается с 1.
Наконец, последняя функция, которая возвращает значение в скрипт
Боевой код
Пора что-нибудь сделать!
Изменяем main.cpp
Компилируем. Теперь можно приступить к тестированию нашего класса
Помните, я обещал сделать функцию Write? 🙂
Видоизменяем main.cpp
А в папке с проектом создаем файл script.lua
Компилируем и запускаем проект.
Теперь изменяем script.lua
Теперь программа будет выводить по 2 строки («\n» — создание новой строки), ждать нажатия Enter и снова выводить строки.
Экспериментируйте со скриптами!
Вот пример main.cpp с функциями и пример script.lua