Какое определение можно дать для файла сценария
Полезно отметить, что М-файлы, используемые в MATLAB, делятся на два класса:
файлы – сценарии, не имеющих входных параметров;
Файлы – функции, имеющие входные параметры.
То что представлено на рисунке файл является файлом – сценарием (Script– файлом). Данный файл не имеет списка входных параметров и является примером простой процедуры без параметров. Он использует глобальные переменные, то есть такие переменные, значения которых могут быть изменены в любой момент сеанса работы и в любом месте программы. Структура этого файла следующая:
Тело файла с любым выражением.
Основным комментарием является первая строка текстовых комментариев, а дополнительным – последующие строки. Основной комментарий выводится при выполнении команд lookforиhelpимя каталога. Полный комментарий выводится при выполнении командыhelpИмя_файла.
Тело файла – сценария может содержать любые математические и логические выражения, а также управляющие структуры, которые присущи MATLABязыку программирования. Он реализуют модульный и объектно-ориентированный подход к подготовке программ и имеет средства для создания элементов интерфейса пользователя.
М-файл функции является типичным объектом – модулем языка программирования системы MATLAB. Структура такого модуля с одним выходным параметром выглядит следующим образом:
Тело файла с любыми выражениями
М-файл – функция имеет следующие свойства:
он начинается с объявления function, после которого указывается имя переменнойvar– выходного параметра, имя самой функции и список ее входных параметров;
функция возвращает свое значение и может использоваться в виде name(Список_параметров)в математических выражениях;
все переменные, имеющиеся в теле файла-функции, являются локальными, то есть действуют только в пределах тела функции;
файл – функция является самостоятельным программным модулем, который общается с другими модулями через свои входные и выходные параметры;
правила вывода комментариев те же, что у файлов – сценариев;
файл – функция служит средством расширения системы MATLAB;
При обнаружения файла – функции он компилируется и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB.
Последняя конструкция var=выражениевводится, если требуется, чтобы функция возвращала результат вычислений. Если выходных параметров больше, то они указываются в квадратных скобках после словаfunction. При этом структура модуля имеет следующий вид
Тело файла с любыми выражениями
Переменные в файлах-функциях – по умолчанию локальные. Это значит, что они, меняя свое значение внутри модуля файла – функции, не сохраняют его при выходе из файла – функции. Нередко применение глобальных переменных в программных модулях может приводить к побочным эффектам. Применение локальных переменных устраняет эту возможность и отвечает требованиям структурного программирования.
Однако передача данных из модуля в модуль в этом случае происходит только через входные и выходные параметры, что требует тщательного планирования такой передачи. Команда globalvar1var2 … позволяет объявить переменные модуля – функции глобальными. Таким образом, внутри функции могут использоваться и глобальные переменные, если это нужно по условиям решения вашей задачи.
Итак, фал-функция отличается от файла-сценария прежде всего тем, что созданная им функция имеет входные параметры, список которых указывается в круглых скобках. Вот пример задания простой функции, вычисляющей сумму квадратов х,у:
Имя этой функции zод таким именем ее надо записать в виде М-файла. (х,у) – список параметров (х и у). Оператор return задает возврат функцией значения в ответ на обращение к ней по имени с указанием фактических параметров. Например задавz(2,3), получим 13.
В MATLABможно включать подфункции. Они объявляются и записываются в теле основных функций и имеют идентичную им конструкцию, например:
%STAV Interesting statistics.
%Пример функции с встроенной подфункций
В этом примере среднее значение элементов вектора х вычисляется с помощью подфункции avg(x,n), тело которой записано в теле основной функцииstatv.
Пример использования функции statv:
Подфункции определены и действуют локально, то есть только в пределах M-файла, определяющего основную функцию. Командаhelpnameвыводит комментарий, относящийся только к основной функции, тогда как командаtypenameвыводит весь листинг М-файла.
Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.
Здесь полезно отметить, что m-файлы, создаваемые редактором/отладчиком, делятся на два класса:
файлы-сценарии, не имеющие входных параметров;
файлы-функции, имеющие входные параметры.
Файл сценарий называется также Script-файлом или просто скриптом.
Файл-сценарий имеет весьма простую структуру:
% Основной комментарий, если необходимо.
% Дополнительный комментарий, если необходимо.
Тело программы с любыми допустимыми выражениями.
Важными являются следующие свойства файлов-сценариев:
Они не имеют входных и выходных аргументов.
Работают с данными из рабочей области.
В процессе выполнения не компилируются.
Представляют собой последовательность операций, аналогичную той, что используется в сеансе работы из командной строки.
Пример. Видимый в окне редактора на рис. 1 файл является файлом-сценарием, или Script-файлом.
Отличие М-файла функции от сценария состоит в том, что он является аналогом подпрограммы типа function в языке Pascal.
Файл-функция имеет входные параметры, список которых указывается в круглых скобках. Используемые в файле-функции переменные являются локальными переменными, изменение значений которых в теле функции никоим образом не влияет на значения, которые те же самые переменные могут иметь за пределами функции.
Иными словами, локальные переменные могут иметь те же имена (идентификаторы), что и глобальные переменные (хотя правила культурного программирования не рекомендуют смешивать имена локальных и глобальных переменных). В дальнейшем мы рассмотрим этот вопрос более подробно, а пока вернемся к описанию интерфейса компонентов системы MATLAB.
Структура М-файла функции с одним выходным параметром имеет вид:
function var = f _ name (Список параметров)
% Основной комментарий, если необходимо.
% Дополнительный комментарий, если необходимо.
Тело программы с любыми выражениями.
М-файл функция обладает следующими свойствами:
Он начинается с ключевого слова function, после которого указывается имя переменной var – выходного параметра, имя самой функции f _ name и список ее входных параметров, отделенных запятой.
Внимание: Имя М-файла функции должно совпадать с именем самой функции (f _ name) . MATLAB автоматически присваивает данное имя при выполнении команды Save as.
Результат выполнения М-файла функции присваивается имени функции, которое может использоваться в математических выражениях подобно функциям sin(x), log(x) и т. п.
Все переменные, используемые в файле-функции, являются локальными, т.е. действуют только в пределах тела функции.
Последняя конструкция vаг=выражение вводится, если требуется, чтобы функция возвращала результат вычислений. Вместо имени var можно ипользовать любое другое имя.
Файл-функция является самостоятельным программным модулем, который связан с другими модулями и головной программой через входные и выходные параметры.
При вызове файла-функции он компилируется и затем исполняется.
m-файл функция должен сохраняться в ваш рабочий каталог.
Пример. m-файл, содержащий текст
Данную функцию можно использовать, например, следующим образом:
Упражнение 2. Выполнить данный пример, придумав свою собственную функцию.
Основы программирования
Программирование в системе MATLAB является средством ее расширения и использовании в решении специфических проблем. Некоторые вопросы программирования изложены выше, здесь рассмотрим правила, дополняющие синтаксис языка MATLAB.
Программы оперируют с переменными и константами. Переменные – это имеющие имена объекты, способные хранить разные по значению данные. В зависимости от этих данных переменные могут быть числовыми или символьными, векторными или матричными.
Для задания переменным определенных значений используется оператор присваивания, вводимый знаком равенства =
Имя _ переменной = Выражение ;
Типы переменных заранее не объявляются. Они определяются выражением, значение которого присваивается переменной.
Имя переменной может содержать сколько угодно символов, но идентифицируется только 31 начальный символ. Имя любой переменной должно быть уникальным. Имя должно начинаться с буквы, может содержать буквы, цифры и символ подчеркивания _. Недопустимо включать в имена пробелы и специальные знаки.
Если математическое выражение выходит за размер экрана монитора, то целесообразно перенести его часть на следующую строку. Для этого используется символ многоточие … - три и более точки. В командном режиме число возможных символов в одной строке – 4096, в М-файле – не ограничено, но с такими длинными строками работать неудобно. Поэтому применение в файлах-сценариях символа переноса строки улучшает наглядность программ.
Ввод и вывод данных
В языке MATLAB нет явных операторов ввода вывода данных в режиме диалога. Эта проблема решается для ввода данных оператором присваивания и использованием системных констант. Вывод данных осуществляется еще проще. Для этого необходимо после математического выражения не ставить символ точку с запятой (;).
К системным константам относятся:
pi = 3,1415 … число “ПИ”;
i или j - мнимые единицы;
NaN - неопределенность в виде 0/0;
Inf - бесконечность типа а/o ;
ans результат последней операции.
Весьма часто необходимо выполнить формирование упорядоченных числовых последовательностей. Такие последовательности нужны для созда-ния векторов или значений аргументов х при построении графиков. В MATLAB для этого используется оператор двоеточие (:), который представляется следующим образом:
х = Начальное _ значение : Шаг : Конечное _ значение ;
s = [2 2.25 2.5 2.75 3]
Примечание. Более сложные элементы программирования будут рассмотрены позднее.
Внедрение сценария в документ это "штатная" возможность HTML. Рассмотрим способы и правила внедрения:
Для начала необходимо задать язык разработки сценариев для нашего HTML-документа. Это делается при помощи мета-записи Content-Script-Type (См. раздел 2.3.) в заголовке нашего документа. Например вот так:
Мы можем и не определять тип сценариев документа данным способом, но гораздо проще задать его один раз в заголовке, чем при каждом использовании сценариев.
Как я уже обмолвился ранее, внедрение сценария в документ осуществляется "штатными" средствами HTML, рассмотрим как это сделать.
Первый способ это - использование тега HTML . Возможно использование данного тега в формате контейнера для внедрения фрагмента кода в документ и в форме одиночного тега для связывания файла содержащего сценарии с документом.
Для внедрения используется контейнерный формат записи тега, с атрибутом TYPE, задающим тип сценария:
Для связывания документа с внешним файлом сценария, используется одиночный формат записи тега, с атрибутом SRC, задающим URL файла сценария:
Вторым способом использования сценариев в документе является назначение сценариев-обработчиков событий различным элементам HTML-документа. Это осущетвляется при помощи специальных атрибутов-событий, которые могут быть использованы для большинства тегов HTML. Одному элементу документа можно назначить несколько обработчиков, по одному для каждого типа порождаемых им событий. Рассмотрим эти атрибуты подробнее:
OnLoad | Броузер заканчивает открытие документа HTML |
OnUnload | Броузер выгружает документ HTML |
OnClick | Пользователь щелкнул мышью по элементу |
OnDblClick | Пользователь дважды щелкнул мышью по элементу |
OnMouseDown | Пользователь нажимает кнопку мыши |
OnMouseOver | Пользователь перемещает мышь поверх элемента |
OnMouseMove | Пользователь перемещает мышь поверх элемента |
OnMouseOut | Пользователь перемещает мышь, выходя из элемента |
OnFocus | Элемент получает фокус ввода |
OnBlur | Элемент теряет фокус ввода |
OnKeyPress | Пользователь нажимает и отпускает клавишу |
OnKeyDown | Пользователь нажимает клавишу над элементом |
OnKeyUp | Пользователь отпускает клавишу над элементом |
OnSubmit | Данные из формы переданы Web-серверу |
OnReset | Форма очищена |
OnSelect | Пользователь выбирает текст в текстовом поле |
OnChange | Потеря фокуса ввода элементом после изменения его значения |
При использовании данных атрибутов в тегах HTML, следует понимать, что не каждый элемент документа может породить определенное событие. Например в следующем примере демонстрируется правильное и неправильное назначение cценария обработчика:
Помощь - в данном случае вы не дождетесь выполнения функции lnkClick, поскольку элемент документа - ссылка, никогда не породит событие onReset;
Как внедрять сценарии в документы мы разобрали, но не менее важный вопрос (по жизни) КУДА, вернее в какое место документа ?
От того где мы разместим сценарий зависит схема выполнение его броузером. Со сценариями обработчиками событий все должно быть ясно: элемент документа порождает событие и броузер выполняет сопоставленный событию сценарий-обработчик, но как быть со сценариями расположенными в других структурных разделах HTML-документа ?
- Код сценария в теле HTML-документа. В данном случае сценарий выполняется броузером при загрузке документа, и результаты его работы (если они есть) отображаются в окне броузера при открытии документа (надеюсь вы понимаете что, функции помещенные в тело HTML-документа не выполняются, если не указан их вызов);
- Код сценария в заголовке HTML-документа. В данном случае сценарии не выполняются броузером при загрузке документа. В заголовке обычно размещают различные служебные функции которые вызываются при обработки событий и из других сценариев размещенных в теле документа;
В вышеприведенном примере (рекомендую скопировать, сохранить как файл-htm и проверить), продемонстрированы все три варианта размещения сценариев в HTML-документе: в заголовке размещаются служебные функции, в теле документа размещается исполняемый при загрузке код, а элементу формы - кнопка, назначен обработчик события - onClick. Обратите внимание на комментарии в документе, в коде сценария используется синтаксис языка разработки сценария, а в документе синтаксис HTML.
Старые броузеры и сценарии
Попытка просмотра документа содержащего сценарии в броузере не поддерживающем данную возможность вызывает ошибку. Для исключения данной ситуации разработчики применяют один хитрый трюк, который заключается в использовании одной особенности Web-броузеров - пропускать неизвестные теги HTML.
Для скрытия сценария данным способом применяется комбинация комментариев HTML и комментариев языка разработки сценария. Старый броузер обнаружит неизвестный тег , пропустит его и обнаружит тег HTML - начало комментария, а далее исключит из обработки фрагмент документа до тега HTML, закрывающего комментарий. Современные броузеры "обучены" данному трюку и не обратят на него внимания, но перед закрывающим тегом комментария HTML надо поставить комментарий языка разработки сценария, для исключения данного фрагмента из интерпретации броузером.
Примеры и рекомендации по использованию сценариев
В начале данного раздела мы рассмотрели основную область применения сценариев в документах, теперь посмотрим как это реализуется на практике.
Пример 10. Определение Web-броузера клиента. [просмотр примера в окне]
В основу броузеров MSIE и NN положены разные объектные модели документа - DOM (Document Object Model) и принципы обработки событий (MSIE-метод всплытия, NN-метод перехвата). Без учета данных особенностей невозможна разработка универсальных сценариев для Web-страниц:
Пример 11. Элементы DHTML в документах. [просмотр примера в окне]
Документы DHTML содержат сценарии, позволяющие изменять свойства CSS (видимость, оформление и даже содержание) элементов документа, в зависимости от действий пользователя. При использовании в сценариях свойств CSS элементов документа (См. раздел 3.6.), необходимо знать правила преобразования имени свойства CSS к имени свойства JavaScript: из имени свойства удаляются все тире, а каждый символ имени свойства после тире заменяется на прописной символ. Например: border-color преобразуется в borderColor, а font-size в fontSize;
Демонстрация элементов DHTML в документе
Динамические слои
Управляя свойствами слоев из сценариев можно реализовать массу динамических элементов (раскрывающиеся меню и списки, изменющиеся рисунки, дополнительные поля форм и т.д.):
Например вот так:
Динамические ссылки
Обрабатывая различные события можно динамически изменять стиль ссылок (проще это реализовать через псевдоклассы в таблице стилей):
В MSIE можно слелать так: Заходи сюда - не пожалеешь
onMouseOver = "if ( isMSIE() ) this.style.textTransform='uppercase';"
onMouseOut = "if ( isMSIE() ) this.style.textTransform='none';"
onClick = "alert('Извиняйте, это лишь пример !');">Горячо .
Или даже вот так : Заходи сюда - не пожалеешь
onMouseOver = "if ( isMSIE() ) this.innerText='НУ ОЧЕНЬ УЖ ГОРЯЧО !';"
onMouseOut = "if ( isMSIE() ) this.innerText='Горячо . ';"
onClick = "alert('Извиняйте, это лишь пример !');">Горячо .
Графические ссылки можно оформить так: Заходи сюда - не пожалеешь
onMouseOver = "this.src='ahot.jpg';"
onMouseOut = "this.src='hot.jpg';"
onClick = "alert('Извиняйте, это лишь пример !');">
Динамические подсказки
В статусной строке броузера можно выводить подсказки об выделенных в текущий момент элементах документа:
Например описание ссылки:
onMouseOver = "window.status='Переход на узел WWW.SITE.RU где . '; return true;"
onMouseOut = "window.status=''; return true;">Ссылка с подсказкой
Или описание рисунка:
onMouseOver = "window.status='Раньше я выглдел гораздо лучше !'; return true;"
onMouseOut = "window.status=''; return true;">
Пример 12. Элементы анимации в документах. [просмотр примера в окне]
Анимация основана на изменении средствами сценария, таких свойств CSS элементов, как видимость, размер и положение элемента (как правило слоев документа).
Пример использования файла сценария
Р ассмотрим работу с файлом сценарием на примере, вычислении функции y(x), в интервале -3..5 с шагом 0,2, если параметр b=0,2. Последовательность действий:
Создам M-файл командой: File=>New=>M-file
О ткрывается окно редактора, в которое вводится программа.
Рис.1. Окно редактора M-файла
3. Сохраняется файл в окне Editor командой: File=>Save as=>FuncY.m
4. В окне Command Window необходимо задать конкретные значения (входные параметры) и вызвать файл по имени в командной строке.
Рис.2. Ввод исходных данных, вызов функции Y и ее график в отдельном окне.
Структура файлов функций с одним выходным параметром
Тело файла с любыми выражениями
var= % вводится, если требуется, чтобы функция возвращала
Структура файлов функций с несколькими выходными параметрами:
Тело файла с любыми выражениями
Такая функция напоминает процедуру.
Свойства файла функции:
- начинается с объявления function, с указанием имя переменной var – выходного параметра, имя самой функции и список ее входных параметров;
- функция возвращает свое значение и может использоваться в виде
name(Список_параметров) в математических выражениях;
- все переменные в теле файла являются локальными;
- является самостоятельным программным модулем;
- правила вывода комментариев те же, что у фалов сценариев;
- при обнаружении файла функции, он компилируются, и затем исполняется, а созданные машинные коды хранятся в рабочей области системы MATLAB;
- служит средством расширения системы MATLAB.
Статус переменных в функциях
Переменные, указанные в списке параметров функции, являются локальными и служат для переноса значений, которые подставляются на их место при вызовах функций. Изменение значений переменных в теле функции не влияет на значения, которые те же самые переменные могут иметь за пределами функции.