# Включение и импорт файлов

## Включение и импорт файлов

Описание **include** импортирует все типы, функции и константы из указанных файлов и их дочерних файлов включенных с помощью **include**.

Описание **import** импортирует только публичные типы, функции и константы из указанных файлов и их дочерних файлов включенных с помощью **include**. Публичные объекты определяются с помощью ключевого слова **pub**.

```
stringConst         = "`" { unicode_char } "`" | stringDoubleConst
stringDoubleConst = `"` { unicode_char | uShort | uLong | escapedChar | byteVal } `"`
importDecl = "import" "{" {stringConst newline} "}"
includeDecl = "include" "{" {stringConst newline} "}"
```

Рассмотрим видимость объектов в виде таблицы. Пусть имеется два файла.

```
// a.g can include or import b.g
func afunc(i int) : return i*2
pub func apubfunc(i int) : return i*3

// b.g 
func bfunc(i int) : return i*4
pub func bpubfunc(i int) : return i*5
```

Пусть файл *c.g* может импортировать или включать файл *a.g*. Вы можете видеть какие функции будут видимы в файле *c.g* в зависимости от различных ситуаций.

|          | include a   a includes b | include a   a imports b | import a   a includes b | import a   a imports b |
| -------- | ------------------------ | ----------------------- | ----------------------- | ---------------------- |
| afunc    | visible                  | visible                 |                         |                        |
| apubfunc | visible                  | visible                 | visible                 | visible                |
| bfunc    | visible                  |                         |                         |                        |
| bpubfunc | visible                  |                         | visible                 |                        |

## Описание pub

Команда **pub** определяет следующую функцию, тип или константы как публичные. Вы можете импортировать их с помощью команды **import**.

```
pubDecl = "pub" [newline]
objects = [pubDecl] (structDecl | FnDecl | ConstDecl | FunctionDecl)
```

Ключевое слово **pub** указывает, что следующая функция, константы или тип будут передаваться в случае импорта файла.

```
pub const IOTA {  // public constants. Visible when include or import
    MY1
    MY2
}

const IOTA*2 {  // private constants. Visible only when include
    MY3
    MY4
}
```
