Добро пожаловать к нам в гости! Наш сайт посвящён программе NeoBook, с помощью которой вы легко сможете создавать собственные мультимедиа-приложения без необходимости изучать сложные языки программирования! Зарегистрируйтесь, чтобы стать членом нашего сообщества.
Еще один урок для начинающих Использование "Библиотеки функций" в NeoBook
Функция — в программировании — это поименованная часть программы, которая может вызываться из других частей программы столько раз, сколько необходимо. Функция, в отличие от процедуры, обязательно возвращает значение.
На самом деле функция в НБ отличается от тех функций, которые используются во взрослых языках и поэтому определение функции не совсем применима к НБ. Но, в НБ, функцию тоже можно вызывать сколь угодно раз. Своими словами напишу так: Библиотека функций это команда или набор команд, которые можно вызывать многократно в любом своем проекте.
Quote (Справка)
Библиотека функций служит для хранения часто используемых последовательностей команд Action commands, называемых функциями.
Для чего она нужна?!... Ну например код:
Quote
FileExists "C:\Variables.var" "[Exists]" If "[Exists]" "=" "True" LoadVariables "C:\Variables.var" EndIf или FileExists "C:\test.txt" "[Exists]" If "[Exists]" "=" "True" LoadVariables "C:\test.txt" Else FileWrite "C:\test.txt" "All" "param=test" EndIf
Этот код рекомендуется писать всякий раз перед обращением к внешнему файлу, во избежание ошибок. А если в проекте несколько раз надо загружать данные?! Согласитесь неудобно каждый раз писать проверку. Вот тут на помощь приходит "Библиотека функций". Ее можно активировать командой "Call". В нашем примере будет выглядеть так:
Quote
Call "func1" "C:\Variables.var" или Call "func2" " C:\test.txt " "param=test"
Ну что проще?! С помощью "Библиотека функций" можно упростить приложение, что существенно сокращает время. В этом уроке я просто покажу вам, как пользоваться "Библиотекой функций". весь код использован исключительно для ознакомительных целях!.
Открываем новый проект, любой размер нажимаем клавишу быстрого вызова "F11" откроется диалоговое окно? в нем выбираем "новая функция" в выпадающем списке выбираем "NeoBook"
Откроется Редактор функций. Прежде чем кодить, давайте поближе расмотрим функции которые нам понадобятся для работы с тхт-файлами 1-это открыть :), Мы открыли, а дальше...И так, что можно с делать с открытым файлом?! -прочитать, для простоты будем каждому действию присваивать марекры, например для прочить - "rd" (сокращено от слова read) -записать, марекр будет "wr" 2-удалить, маркер "dl" Мы определили 3 параметра которые будут отвечать за действия нашей функции, создадим для них переменную, например "action"(действие), т.е.прмерно будет выглядеть так (SetVar "[action]" "wr") В Редакторе в верхнее поле вносим следующий код
Code
.проверяем на наличие файла, FileExists "[files]" "[ok]" .если файл есть, то смотрим что надо с ним делать If "[ok]" "=" "True" .если в переменой стоит ключевое слово "dl", If "[action]" "=" "dl" .удаляем файл FileErase "[files]" SetVar "[ok]" "" Return EndIf If "[action]" "=" "wr" .если в переменой стоит ключевое слово "wr", означающая запись .тогда проверяем на пустоту переменные отвечающие за другие ключевые переменные IfEx "[numString]<>[#34][#34] AND [dataWrite]<>[#34][#34]" .убеждаемся, что они не пусты .записываем в файл данные FileWrite "[files]" "[numString]" "[dataWrite]" EndIf EndIf If "[action]" "=" "rd" FileRead "[files]" "[numString]" "[dataWrite]" EndIf Else If "[action]" "=" "wr" IfEx "[numString]<>[#34][#34] AND [dataWrite]<>[#34][#34]" FileWrite "[files]" "[numString]" "[dataWrite]" EndIf else SetVar "[eror]" "Файл не обнаружен" EndIf EndIf ClearVariables "[files],[action],[numString],[dataWrite],[dataRead],[eror]"
Разберем код Команда "FileExists" Проверить существование внешнего или вложенного файла. Возращает эта команда булево значение, т.е. "TRUE" если файл есть и "FALSE" если его нет. Далее идет оператор "IF" с помощью его мы узнаем есть ли в наличии файл. Если файл есть, то переходим к следующему оператору. Он проверяет переменую "action" равно ли она "dl", т.е. удалению, если да то удаляем файл и остановливаем выполнения сценария командой "Return"(Выйти из текущего сценария). Если там не "dl", то переходим к следующему оператору. Он смотрит чему равен "action", если "wr", то переходим к следующему оператору "IfEx". Так как нам для записи надо проверить еще две переменные на пустоту(во избежания ошибок)То будем проверять сразу 2 переменные "numString" и "dataWrite", это надо для того что в команде "FileWrite" нужно заполнить 3 параметра
Quote
Синтаксис: FileWrite "file name" "line number" "data", где file name Имя внешнего файла. line number Номер строки во внешнем файле, куда требуется произвести запись данных. Первая строка - 1, вторая - 2 и т.д. Если требуется просто добавить данные в конце файла, воспользуйтесь инструкцией "Append" вместо указания номера строки. Если необходимо заменить все содержимое файла, вместо номера строки следует указать "All". data Данные для записи.
вот в нашем коде переменая "numString" тоже самое что и "line number", а "dataWrite" тоже что и "data" Тоже самое относится и к "action=rd" Завершает функцию команда ClearVariables, этим мы очищаем отработаные переменные.
Осталось в нашей библиотеке определится с перемеными, которые понадобятся при вызове команды "Call", т.е. передавать данные и получать результат. За это отвечает Alias:
Quote
Alias(Псевдоним) - это имя, за которым скрываются данные того или иного параметра. "Alias" -это, по сути дела, специальная переменная, которую можно использовать в любой команде, включенной в функцию. Как и переменная, "Alias" - это область памяти отведенная для хранения той или иной информации. Каждому Псевдониму должно быть присвоено свое уникальное имя, заключенное в квадратные скобки ( [ ] ). При создании нового параметра по умолчанию Псевдоним получает имя в соответствии с порядковым номером параметра (например: [%1]). Тем не менее, Вы в любое время можете изменить это имя, для того, например, чтобы оно хоть как-то ассоциировалось с содержащейся в параметре информацией. В рассматриваемом нами примере мы псевдонимы [%1], [%2]... и т.д. заменим на свои переменные - [files] [action]... и т.д. описание ниже. Alias - полезная и удобная вещь!
Чтобы добавить псевдонимы, кликаем кнопку "Добавить" (см. рис.)
По поводу переменной "dataRead", вывод данных будет там, где мы укажем при подключении команды "Call", а поможет нам опция "Variable(Переменная)" в свойствах "Параметр функции"
Чтоб нам всегда знать что эта за функция и какие параметры заполнять, можно добавить памятку. Кликните по кнопке "Коментарии" и запишите типа так
Quote
Выполняемые действия имеют следующие маркеры: dl=удалитьфайл , wr=запись , rd=прочитать Для "action=wr" параметр "номер строки" может содержать следующее - Append или All Для "action=rd" параметр "номер строки" может содержать следующее - номер строки или All
нажмите кнопку "ОК".
Ну вот функцию подготовили, нажимаем на редакторе кнопку "ОК" будет предложено сахранить, сахраняем я назвал "files", пишем только имя без расширения(только не меняйте путь, библиотеки хранятся тут: C:\Program Files\NeoBook 5.6.2\Functions) Теперь проверим нашу функцию, вешаем следующий код на кнопку
Code
Call "files" "[PubDir]test.txt" "wr" "all" "Привет! файл создан с помощью Библиотеки Функции!" ""
значит для начинающих, а в низу развернутая тема Когда переедем на новый ресурс, там будет раздел "Уроки", вот там мои названия будут в тему, т.к. есть "для начинающих", есть "для продвинутых"
Может те кому, что то не нравится, сами сделают с "хорошим" названием и в "нужном месте"?! И еще давайте по конструктивней, по теме
Добавлено (25 Август 2009, 17:51) --------------------------------------------- Омар, не обижайся, но придирки не по теме меня уже напрягают, ты в той теме запостил способ, который подходит больше для уроков по интерфейсу НБ, а у меня про кодерство, это две разницы. Не думаю, что человеку, который ищет пример кода для своих нужд, будет обращать внимание на эту мелочь
Сообщение отредактировано Сергей - Пт, 10 Сентября 2010, 01:01
этим урокам не слишком долго (я надеюсь) тут висеть, потом разберемся куда чего... так что какая разница. ------------ надо еще сделать урок (или статью) ну для совсем уж начинающих (о интерфейсе, значениях всяких кнопок, свойств и обьектов, простейших приемах кодинга) чтоб меньше было идиотских вопросов потом... Как задавать вопросы
надо еще сделать урок (или статью) ну для совсем уж начинающих (о интерфейсе, значениях всяких кнопок, свойств и обьектов, простейших приемах кодинга) чтоб меньше было идиотских вопросов потом..
Хочу вам представить полезную функцию под названием "Библиотка функций"
Очень полезная и актуальная тема! Будет здОрово, если потом появятся и более сложные примеры создания/использования типичных, часто используемых функций. Библиотека функций - большая и хорошая тема! А подредактировать и улучшить (а тем более перенести или переназвать) любой урок можно, было бы что улучшать! Спасибо! В порядке предложения: можно добавить инфу о разнице между функциями и подпрограммами... Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Дык, к моему сожалению, мне еще рано тут постить ;).
Quote (sp3d)
Сначала надо создать урок последнего...
Тебе виднее, хотя, думаю, что можно обозначить просто само логическое отличие, ведь важно понимать - когда есть смысл использовать создание функции, а когда подпрограммы. Например, мне интересно понять (вроде Алекс объяснял мне уже это, но видимо я опять что-то усложняю...), если функция возвращает значение каких-либо параметров/переменных, то чем же она тогда все же отличается от подпрограммы, если таковая тоже это делает (если она так создана). И то, и другое - цит.по Справке: "хранилище для часто употребимых команд или групп команд", только вызовом отличаются...? Ну, еще интерфейсом создания - при создании функции можно использовать до 9 специальных параметров. Кстати, а что мешает использовать их в подпрограмме и в любом количестве?
Проясните, кто владеет темой, плиз - в чем принципиальная разница между функциями (из библиотеки функций) и подпрограммами, и когда следует использовать одно, а когда другое?
И еще, вот этот фрагмент Справки (Book Properties > Actions (Команды)) не совсем понятен:
Quote
В окне подпрограммы не имеет смысла размещать команды, не относящиеся к подпрограмме, так как они не смогут (и не будут) запускаться в ответ на какие-либо события. Для этого существуют другие разделы.
просто само логическое отличие, ведь важно понимать - когда есть смысл использовать создание функции, а когда подпрограммы.
Самя главная разница заключена в том, что подпрограммы (в отличие от функций) применяются только в конкретном проекте, а функции можно использовать в любых нескольких самых разных проектах. К тому же функции можно более удобно оформить и использовать (имеется ввиду описание функции, её параметров). И впридачу, функции можно сейчас писАть и на VBS и на Java, а подпрограммы только на языке самой NB.
Quote (VadimLevkin)
вроде Алекс объяснял мне уже это, но видимо я опять что-то усложняю
Я не видел поста Алекса, но не исключено, что он объяснял разницу между функциями и процедурами. Если так, то это имеет значение, например, в Delphi, а в NB теряет смысл.
Quote (VadimLevkin)
Что значит "не относящиеся к подпрограмме"??
Видимо имеются ввиду случайные строки, не попадающие между меткой имени подпрограммы и командой Return. - А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
в чем принципиальная разница между функциями (из библиотеки функций) и подпрограммами
как я думаю по этому поводу: Функция — один из видов подпрограммы, но отличается - процедурой, т.е. функция возвращает значение. А её вызов может использоваться в программе, как выражение. Но это в пхп можно пример:
Code
function test(){ $str="привет! я функция"; return $str; } echo tect();
, а в нб вроде нет. А просто подпрограмма, как ":подпрограмма" невозращает значение, просто исполняет свой блок, т.е. серию команд до команды "return"
Добавлено (27 Август 2009, 12:45) ---------------------------------------------
Quote (Peter)
Самя главная разница заключена в том, что подпрограммы (в отличие от функций) применяются только в конкретном проекте, а функции можно использовать в любых нескольких самых разных проектах. К тому же функции можно более удобно оформить и использовать (имеется ввиду описание функции, её параметров)
ну вот Петр все объянил Привет!, как протекает прцесс реалибитации?!
Функция — один из видов подпрограммы, но отличается - процедурой, т.е. функция возвращает значение.
Подпрограмма тоже может возвращать значение чего либо, но у подпрограмм нет такой штуки как передаваемые аргументы (параметры). А NB-функция может и не возвращать обязательно значение, а, например, просто вывести сообщение о ошибке и т.п.
Термин "возвращать" приментельно к подпрограмме не совсем правильно, т.к. возвращают обычно результат через передаваемый функции аргумент. Подпрограмма скорее просто может занести результат своей деятельности в какую-то заранее оговоренную (в этой же подпрограмме) переменную. Функция же занесет этот результат в ту переменную, какую вы укажете в соответствующем параметре функции.
Немного коряво объяснл, но думаю, что в целом понятно....
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Самя главная разница заключена в том, что подпрограммы (в отличие от функций) применяются только в конкретном проекте, а функции можно использовать в любых нескольких самых разных проектах.
Спасибо, Peter! Блин, я мог сам догадаться . Т.е., если я правильно понимаю, если подпрограмма является более менее универсальной и может пригодиться в других проектах, то следует оформить ее как функцию. Так? А если эта функция впоследствии редактируется, то в старых проектах она тоже заработает (при новой компиляции) по новому... Наверное имена параметров, их количество и пр. тогда не стоит менять... ? Как заранее "подстелить соломку" при написании функций? Я имею ввиду что следует делать и не делать, заранее подразумевая использование функции в разных проектах?
Термин "возвращать" приментельно к подпрограмме не совсем правильно, т.к. возвращают обычно результат через передаваемый функции аргумент.
Вот кстати! Давно хотел прояснить значение этого чудесного термина. Peter, не сочти за глупый вопрос, расшифруй пожалуйста подробнее - что значит "возвращать"?? Я запутался. И еще:
Quote (Peter)
Подпрограмма скорее просто может занести результат своей деятельности в какую-то заранее оговоренную (в этой же подпрограмме) переменную. Функция же занесет этот результат в ту переменную, какую вы укажете в соответствующем параметре функции.
Термин "возвращать" приментельно к подпрограмме не совсем правильно, т.к. возвращают обычно результат через передаваемый функции аргумент. Подпрограмма скорее просто может занести результат своей деятельности в какую-то заранее оговоренную (в этой же подпрограмме) переменную. Функция же занесет этот результат в ту переменную, какую вы укажете в соответствующем параметре функции.
ну вот! а я пока писал пример ты уже запостил ну ясно, ладно мне надо идти, до вечера
если подпрограмма является более менее универсальной и может пригодиться в других проектах, то следует оформить ее как функцию.
Да, совершенно верно!
Quote (VadimLevkin)
А если эта функция впоследствии редактируется, то в старых проектах она тоже заработает (при новой компиляции) по новому...
И это тоже совершенно верно! Надо только не забывать сделанные функции архивировать где-нибудь на случай переустановки NB. Это если система вдруг слетит под "защитой" Нода... Всякое бывает...
Quote (VadimLevkin)
Как заранее "подстелить соломку" при написании функций?
Создавать их так же "универсально", как и сделаны команды в самой NB.
Quote (VadimLevkin)
Имеются ввиду строки исполняемого кода, параллельно подпрограмме (типа мышкой шевельнул, пока подпрограмма шла)?
Quote (Peter)
Видимо имеются ввиду случайные строки, не попадающие между меткой имени подпрограммы и командой Return
Описание (код) подпрограммы начинается с имени метки, и заканчивается словом (командой) Return Мы вызываем подпрограмму при помощи GoSub с указанием МЕТКИ ИМЕНИ подпрограммы, а не ёё первой строки кода. Если же в секции подпрограмм окажуться просто "голые" команды, не входящие в тело какой-либо подпрограммы, то эти команды вызвать будет невозможно!
Добавлено (27 Август 2009, 13:32) ---------------------------------------------
Quote (VadimLevkin)
И подпрограмма и функция заносят значение в заранее оговоренные переменые, ну кроме "[Self]" или чего-то другого в этом роде. Так в чем по этому признаку между ними разница?
Нет. Это в подпрограмме переменная для результата раз и навсегда "оговорена", в функции же эту переменную можно менять, потому-что мы можем передать имя переменной в функцию как аргумент (при помощи CALL), а подпрограмме (GoSub) никакие аргументы (параметры) напрямую не передаются, кроме имени-метки подпрограммы.
Добавлено (27 Август 2009, 13:34) --------------------------------------------- Кроме того, у функции ЕСТЬ параметры, а у подпрограммы их НЕТ!
- А вам какую операционку поставить - экспи, семерку или висту? - Это ты сейчас о чем? - Олег Георгиевич, вам какой компьютер хотелось бы - молодежный или надежный? - Ну, конечно, надежный! - Вот, значит - экспи, без вопросов! Сейчас сделаем...
(Улицы разбитых фонарей, сезон 10, серия 17)
Единственная инновация Windows 8 это - Metro, чтобы дебилы по иконкам не промахивались!
При модном втюхе модоподдающимся начинает нравиться
Надо только не забывать сделанные функции архивировать где-нибудь на случай переустановки NB.
Очень мудрый совет! Спасибо! Кстати, NB могла бы при деинсталляции и предлагать это...
Quote (Peter)
Это если система вдруг слетит под "защитой" Нода... Всякое бывает...
ужасти какие!!! три тьфу, через левое плечо! Мда, надо будет взять за привычку работая с NB не только проект бэкапить и в текстовики сохранять...
Quote (Peter)
Если же в секции подпрограмм окажутся просто "голые" команды, не входящие в тело какой-либо подпрограммы, то эти команды вызвать будет невозможно!
А, это имеется ввиду, что создавая подпрограммы вообще оформляйте их - давайте вверху им название, а внизу завершайте командой Return? Ну, это понятно. А иначе как NB поймет, что именно я хочу вызвать и где начинается/заканчивается подпрограмма.
Quote (Peter)
Создавать их так же "универсально", как и сделаны команды в самой NB.
Запомню! Спасибо за совет! Это значит, что параметры функции при создании функции обработать так, чтобы функция работала и при отсутствии каких либо параметров, так (если, например, очередной проект не все ее аргументы использует)? Так сказать в "малом" варианте. Мол если есть все параметры, то делаем то то, а если не все, то в таком случае так-то, в таком так-то и т.д.? Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
подпрограмме (GoSub) никакие аргументы (параметры) напрямую не передаются
Почему не передаются? Если подпрограмма использует переменную значение которой только что мы специальным образом изменили, то выходит, что и подпрограмма получит новое значение переменной. Аа..., дошло - зато ИМЯ самой переменной в подпрограмме поменять нельзя, только значение. Так? Т.е. в функцию можно прямо передать не только значение переменной, но и ее имя, а в подпрограмме только значение. ? Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Кроме того, у функции ЕСТЬ параметры, а у подпрограммы их НЕТ!
Это если под подпрограммой понимать то, что в NB.
Quote (Peter)
не исключено, что он объяснял разницу между функциями и процедурами
Если я правильно понял эту статью, то подпрограммы NB - это и есть процедуры, говоря на "общепрограммерском" языке. И тогда подпрограммы делятся на: - функции (возвращают значение, обладает параметрами/аргументами) - процедуры (значение не возвращают, а только выполняют заданную работу, не обладает параметрами/аргументами) В NB секцию подпрограмм следовало бы назвать "Процедуры", поскольку противопоставление функции - подпрограммы путает. Бесплатный онлайн курс программирования в VisualNEO Win (NeoBook)
Сообщение отредактировано VadimLevkin - Чт, 27 Августа 2009, 14:32