Делим исходник

Мы начинаем знакомится с модульной технологией программирования. Суть ее разделить ваш исходный код на несколько частей. Зачем это нужно? Возмите к примеру ваш дом. Он разделен на несколько комнат, кухню, санузел, кладовку и т. д. Почему все не в одной куче? Скорее всего потому что неудобно спать и есть рядом с санузлом или в кладовке :) 
Чтобы ваш код был аккуратным, удобным для чтения, понимания, его часто лучше поделить на несколько частей. Так например, если у вас код состоит из 10000 строчек, то держать все это добро в одной куче неудобно хотя бы по 2 причинам:

  • редактор в котором вы это набираете, может тормозить, а может и вовсе зависнуть, все таки объем не маленький
  • искать неотлаженные или работающие нестабильно куски кода тоже становится затруднительно.

Представьте себе, у вас 200 процедур и 190 из них работают правильно. Зачем они вам будут "путаться под ногами"? Вы знаете наверняка, что они работают стабильно, вам от них нужен только результат при разных посылаемых туда данных. Не проще их будет вынести  куда-то , что бы они не мозолили глаза?

Чаще всего в языке FreeBasic различают три типа включаемых файлов:

  • BAS - могут включать любые данные, кроме ресурсных, но главным образом используются для написания кода
  • BI - любые данные, кроме ресурсных. Используется универсально (код {не часто}, объявление деклараций функций, переменных, структур и пр.)
  • RC - Только ресурсные данные(иконки, манифесты,характеристики меню, кнопок и пр.)

То что написано выше не является правилом, вы легко можете написать код в файле TXT и так же включить его. Главное, чтобы основной (главный) файл имел расширение BAS. А то какие расширения имеют включаемые, компилятору до лампочки.
Для того, чтобы подключить файл  к вашему основному файлу существует команда #INCLUDE

Ее синатксис:  #include "1.bi"

Ничего сложного, первой идет команда #include, а дальше в кавычках имя файла с полным к нему путем (файл может находится в любой папке, но тогда нужно указывать путь к этой папке).

Давайте напишем простой код в файле  "1.bi"

Randomize Timer
Sub RandomValue()
     Print Rnd*100    
End Sub


Данная процедура при вызове генерит случайное дробное число от 0 до 100. Достигается это с помощью команды RND, которая генерит дробные числа от 0 до 1 (пример: 0.9023). Но поскольку результат  умножается на 100, то диапазон становится от 0 до 100.
Команда Randomize в связке с командой Timer , устанавливает и передает команде Rnd стартовое случайное число.

И так написав этот код, сохраните файл под именем 1.bi

Далее создайте и сохраните основной файл с расширением Bas в этой же папке. И в нем напишите следующее:

#INCLUDE "1.bi"
For a As Integer=0 To 100
     RandomValue()
Next
Sleep


Скомпилируйте и запустите основной файл (если пользутетесь моей сборкой, то для запуска просто клавиша F5). В итоге у вас должны высветится в консоли результаты случайных чисел. По своей сути, компилятор при компиляции основного файла, просто меняет запись #Include "1.bi" на то, что находится в подключаемом файле. Все это конечно можно было написать в одном коде и для кода таких размеров так и надо делать. Но когда ваш код будет объемный, лучше его делить, так как мы сделали в прошлом примере.

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

 C:\Windows\System32

Обратите внимание, сколько там файлов с расширением DLL.
Эти файлы приготовили для вас разработчики Microsoft, чтобы вам легче было программировать и не изобретать лишний раз велосипед. В каждом из этих модулей, есть хотя бы одна функция (чаще много), такая же как мы создавали с вами ранее. Функции, заложенные в этих файлах, можно вызывать для реализации каких либо задач в программе (создание различных окон, подключение FTP , работа с консолью, воспроизведение звука, видео и пр.). Сами функции находятся в файлах DLL , а декларации этих функций в огромном кол-ве (не все конечно), а так же все вспомогательные константы , переменные, структуры и прочее для них, реализованы для вас разработчиками языка FreeBasic и находятся эти файлы в папке с вашим компилятором в каталоге INC. Позднее мы остановимся более подробно на файлах библиотек DLL и статических a
А сейчас давайте подключим самый распространенный файл из той папки windows.bi

Пример:

#INCLUDE "windows.bi"

MessageBox(0, @"Это первая функция Api,которую мы с вами вызвали", @"Сообщение",0)


Мы подключили функцию API , к нашей программе с помощью файла windows.bi
Если интересно откройте этот файлик в любом редакторе и посмотрите сколько там подключаемых файлов, в каждом из которых куча написанных структур, переменных, констант, деклараций. Декларация же MessageBox находится в файле win\winuser.bi  Все эти файлики написаны для вашего удобства. Хотя подключать функции из DLL библиотек можно и самим без файла windows.bi и в дальнейших статьях, мы этому научимся.

Что же касается именно этой функции, то как вы заметили у нее 4 параметра. Шибко разбирать их сейчас не будем (просто не время). Однако все таки обратите внимание на то, что в функции посылаются не строки, а их адреса с помощью уже знакомого нам оператора @. Хотя компилятор FreeBasic достаточно умен и в данном конкретном случае сможет скомпилировать этот код , даже если строки писать напрямую без оператора @ . Большая часть  параметров для функций API , это адреса на какие-либо данные.

Будем считать, что первую рельсу в модульное программирование мы проложили. :)

Всего доброго!

содержание | назад | вперед