Пространства имен
Пространства имен чем-то напоминают блоки Scope. Их основной принцип тоже ограничивать доступ, но все таки это несколько другой инструмент. Представьте себе, вы подключаете две, три библиотеки функций от других разработчиков и у этих библиотек функций одинаковые имена. Что делать? Выходы конечно есть, но извращенные. А если бы эти разработчики позаботились о таком варианте, используя свои пространства имен, тогда все было бы просто. Работая в команде, пространства имен будут просто незаменимы. Это своего рода карточка доступа к вашим данным, или пароль. Всегда быстрее поменять пароль, чем все данные.
И так синтаксис такого блока:
Namespace Name
.......
Здесь вашие процедуры, переменные,
массивы, структуры и прочее.
.......
End NameSpace
Начинается блок с ключевого слова NameSpace , далее идет любое имя, через
которое и будет доступ к телу блока. Внутри блока размещаются любые нужные вам
блоки , объявления. И заканчивается блок словосочетанием End NameSpace.
В
этих блоках можно размещать практически все, однако нельзя делать обычные
операции командами, например размещать условные блоки, циклы, складывать
переменные и прочее...
Пример блока NameSpace:
Namespace MyName Sub Print() ? "this procedure" End Sub Dim a As Integer End Namespace Namespace AnotherName Dim a As String*20="AnotherName" Function Print() As String ? "this function" Return a End Function End Namespace MyName.Print ? AnotherName.Print Sleep
В примере выше у нас 2 пространства имен: MyName и AnotherName. Обратите
внимание, в обоих блоках две переменные с одним именем, но разными типами. А так
же появилась возможность назвать процедуру и функцию именем как у встроенных
функций FreeBasic. Речь конечно же идет о функции Print. Теперь функция Print у
нас может не просто выводить какие то значения на экран, а делать то, что нам
нужно, например подсчитывать годовой доход сотрудников. Это я сделал ее такой же
как у FreeBasic, но никто не мешает вам изменить внутренности любой из функций
Print.
Обратите внимание на то, как мы ее вызываем. Делается это только
через имя блока, в котором она находится. Тоже и с переменными. Если мы хотим
получить к ним доступ, то сначала нужно написать имя блока, а потом через точку
имя самой переменной или функции. С другой стороны, в самом блоке можно
обращаться к данным напрямую без точки. И это вы надеюсь заметили во втором
блоке в строке Return
a
Наверно
вы уже поняли, что функции в блоках NameSpace с именем Print и встроенная
функция Print языка FreeBasic совершенно разные функции, иначе бы компилятор
FreeBasic не позволил нам скомпилировать программу, выдав ошибку.
Когда в коде, пространства имен имеют разные имена функций(не пересекаются), или же просто в коде одно пространство имен, то зачастую программисты применяют команду Using. Эта команда объявленная с именем блока таким образом: Using AnotherName позволяет обращаться к внутренностям блока без имени. То есть делает внутренности блока глобальными:
Namespace MyName Sub MyOne() ? "this one procedure" End Sub Sub MyTwo() ? "this two procedure" End Sub End Namespace Using MyName MyOne() MyTwo() Sleep
После того как мы раскрыли пространства имен с помощью Using обращение к
функциям стало напрямую без имени блока, как будто NameSpace и не
существует.
Если в блоке NameSpace будет имя, которое уже есть в вашем
основном коде и вы раскрыли блок как глобальный с помощью Using, то
использоваться будет функция из основного кода (вспоминаем области
видимости). Если же все таки необходимо использовать функцию из блока NameSpace
в такой ситуации, то нужно писать имя блока. Пример:
Namespace MyName Sub Print() ? "this procedure" End Sub Dim a As Integer End Namespace Using MyName Print "Global Code" MyName.Print Sleep
Вот и все, что пожалуй стоит знать про пространства имен. Вам советую
потренироваться, создавая блоки NameSpace, имеющие массивы и свои типы данных.
Всего доброго!
содержание | назад | вперед