On branch main
modified: src/ch01.md
This commit is contained in:
87
src/ch01.md
87
src/ch01.md
@@ -32,7 +32,7 @@ pub const User = struct {
|
||||
Сохраните этот исходный текст в файл с именем `ex-ch01-01.zig` и запустите его следующим образом:
|
||||
|
||||
```
|
||||
zig ex-ch01-01.zig
|
||||
zig run ex-ch01-01.zig
|
||||
```
|
||||
|
||||
Вы должны увидеть
|
||||
@@ -46,7 +46,88 @@ zig ex-ch01-01.zig
|
||||
|
||||
## Импортирование библиотек
|
||||
|
||||
Редко когда бывает, что исходные тексты программа содержатся в одном-единственном файле
|
||||
Редко когда бывает, что исходные тексты программы содержатся в одном-единственном файле
|
||||
и при этом программа не использует никакие библиотеки. Наша первая программа также не
|
||||
является исключением - она использует стандартную библиотеку Zig для того, чтобы напечатать
|
||||
строчку, которую мы только что видели.
|
||||
строчку, которую мы только что видели. Система импорта/экспорта в Zig достаточно проста
|
||||
и базируется на 2-х вещах
|
||||
|
||||
* `@import` - это встроенная в компилятор функция
|
||||
* `pub` - ключевое слово для экспортирования чего-то
|
||||
|
||||
При импортировании модуля нужно указать его имя. Стандартная библиотека Zig доступна
|
||||
по имени `std`. Чтобы импортировать какой-то конкретный файл, нужно использовать
|
||||
путь относительно того файла, в котором делается имортирование. Например, мы могли
|
||||
бы поместить описание структуры `User` в отдельный файл (скажем, `models/user.zig`)
|
||||
и тогда бы в основном файле мы бы написали
|
||||
|
||||
```zig
|
||||
const User = @import("models/user.zig").User;
|
||||
```
|
||||
|
||||
При этом эта структура должна быть помечена как `pub`, в противном случае мы получим
|
||||
ошибку компиляции, в которой будет сказано, что эта структура не является публичной.
|
||||
|
||||
Наш гипотетический `models/user.zig`, помимо структуры `User`, может экспортировать
|
||||
и другие вещи. Например, мы могли бы также экспортировать константу:
|
||||
|
||||
```zig
|
||||
// models/user.zig
|
||||
pub const MAX_POWER = 100_000;
|
||||
|
||||
pub const User = struct {
|
||||
power: u64,
|
||||
name: []const u8,
|
||||
};
|
||||
```
|
||||
|
||||
И тогда бы могли в главном файле имортировать обе сущности:
|
||||
|
||||
```
|
||||
const user = @import("models/user.zig");
|
||||
const User = user.User;
|
||||
const MAX_POWER = user.MAX_POWER;
|
||||
```
|
||||
|
||||
Скорее всего, на данный момент у Вас больше вопросов, чем ответов.
|
||||
Что такое `user` в приведенном отрывке? Хотя мы ещё не знакомы с ключевым
|
||||
словом `var`, но тем не менее можно спросить, а что если вместо `const`
|
||||
использовать `var`? Или. возможно, у Вас возник вопрос по поводу использования
|
||||
сторонних библиотек. Это всё хорошие вопросы, но чтобы ответить на них,
|
||||
нам нужно глубже изучить Zig, а пока нам придётся смириться с тем, что мы уже
|
||||
знаем:
|
||||
|
||||
* как импортировать стандартную библиотеку (`const std = @import("std");`)
|
||||
* как импортировать свои собственные файлы (`const user = @import(models/user.zig)`)
|
||||
* как экспортировать те или иные определения (`pub const ...`)
|
||||
|
||||
## Комментарии
|
||||
|
||||
```
|
||||
// Если тут убрать слово 'pub', то этот код не откомпилируется
|
||||
```
|
||||
|
||||
В Zig нет многострочных комментариев в стиле C (`/* ... */`), но зато есть 3 различных
|
||||
вида однострочных:
|
||||
|
||||
* `//` - обычные комментарии в стиле C++
|
||||
* `//!` - комментарии "верхнего уровня", размещаются в начале файла
|
||||
* `///` - документирующие комментарии, располагаются перед определениями
|
||||
|
||||
## Функции
|
||||
|
||||
После комментария в нащем примере идёт строчка
|
||||
|
||||
```zig
|
||||
pub fn main() void {
|
||||
```
|
||||
|
||||
Это начало главной функции программы. В каждом исполнимом файле должна существовать
|
||||
функция, с которой начинается выполнение, это входная точка программы. Если переименовать
|
||||
`main` во что-то другое, например, в `doIt` и попытаться запустить нашу
|
||||
программу, то мы получим сообщение об ошибке, в котором говорится, что в нашем
|
||||
файле нет функции `main`:
|
||||
|
||||
```
|
||||
/opt/zig-0.11/lib/std/start.zig:559:45: error: root struct of file 'ex-ch01-01' has no member named 'main'
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user