Найти в Дзене
Rust.rs

Rust - Структура.

Оглавление

Компилятор запускает первой функцию fn main(){/*..*/} - это вход в программу, в ней мы пишем весь свой код. В теле функции находится вся программа. Данная функция должна существовать в проекте, но может отсутствовать в библиотеке.

Наша программа - по этапно.

1. Мы запускаем компилятор cargo run

2. Компилятор функцию вызывает main()

3. main() запускает {}

4. /*Код, который будет запущен.*/

5. Программа завершается и закрывается.

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

Функции.

В таком случае мы можем создать свою функцию и переместить код в тело новой функции. А в теле функции main(), вызвать созданную функцию.

Наша программа - теперь.

1. Компилятор вызывает main()

2. main() вызывает функцию `func()

3. func() запускает код {/*Код, который будет запущен.*/}

4. `//..` может что-то ещё...

5. Программа завершается и закрывается.

В данном примере функция просто выполняет код, не принимая и не возвращая никаких данных.

Давайте рассмотрим функции более подробно.

Функции можно выполнить неограниченное количество раз. Она принимает на вход данные, обрабатывает, и возвращает данные и выполняет в теле-функции любые операции.

Варианты использования функций:

1. Выполнять код в функции, не зависимо от данных и не возвращая их.

2. Получать данные, взаимодействовать с ними, но не возвращая их.

3. Не приминая данные, возвращает в переменную данные, из самой функции.

4. Получить данные, обработать их и возвращает данные в переменную.

fn name() - создает функцию.

main - это имя функции, мы сами выбираем имя. (пишутся в нижнем регистре `snake_case`).

`()` - В скобки мы принимаем аргументы, переменные для использования в фигурных скобках`{}`.

Примеры аргументов:

1. () не принимаем аргументы.

2. (name: i32) по значению переменные.

3. (&name: i32) ссылки на переменные.

4. (&mut name: i32) изменяемые ссылки на переменные.

Аргумент используется в теле функции указывается как `name`. (или как указатель `*name`)

`->i32`(`->`и тип данных) - указывается тип данных, которые возвращает функция. Можно не указывать, если функция ничего не возвращает(по умолчанию `->()`).

Тело функции {/*..*/} :

1. {__;}- этот код запускает, при вызове функции. (когда не указан тип данных).

2. {x} - этот код возвращает, данные при вызове функции. Не ставятся `;` - когда данные остаются в функции(неявное возвращение).

3. {return x;} - этот код так же возвращает, данные при вызове функции. но при этом данные возвращает return, и ставятся `;`.(явное возвращение).

Структура

Структура и имплементация - позволяет создать систему, где есть внешний интерфейс и  внутренний - скрытая часть, со всей логикой. Структура - это абстрактные данные, а имплементация позволяет создать логику. В итоге создается объект, который работает с методами. Такой объект, имеет многие принципы ООП.

Методы - это те же функции, только они тесно связаны с структурой. Во внутренней логике они точно также используют поля переменных, только принимают их неявно, использую объект. object.method(); ровно Structure::method(object);

Структура - тип данных.

struct (Структура) - это пользовательский тип данных, которая может хранить несколько полей переменных, логически связанных данных, похож на кортеж. Кортеж же больше похож на перечисление разных типов.

Нужно создать структуру, и задать поля и типы для них. Далее нужно создать как минимум один экземпляр структуры и заполнить данными, и можно взаимодействовать и получать данные обращаясь через структуру.

Структура и имплементация.

Имплементация  — программная или аппаратная реализация какого-либо протокола, алгоритма, технологии. Тем самым, мы создаем возможность работать через методы.

Документация Structure:

  • fn new() ->Self
  • объект структуры, с данными.
  • fn method(&self)
  • Изменяет данные объекта, на заранее записанные.

  • Self - это тоже самый тип, для которого создан метод, т.е. это `fn new() -> Structure`
  • &self, &mut self  - это передача, объекта в метод.
  • :: - проити в каталог, найти в структуре метод.

Структура и функции.

Структура может работать и с функциями. Функция принимает аргумент в качестве структуры(в данный момент), и возвращает данные определенного типа. В теле-функции происходит взаимодействие со структурой например получение данных.

Отличии от имплементации. Мы не создаем объект, в которой происходит вся логика. А передаем и получаем результат.

Например: С помощью функции new(), я создаю экземпляр структуры и записываю результат в переменную, а с помощью name() и age() получаю данные. Но тут есть свои нюансы со владения. Обратите внимание на & - это означает что мы передаем ссылку, не передаем владение в функцию. а в функции мы создаем копию этих данных.