Mojo Academy · Урок

Изменение на месте с inout

Позволяйте функции изменять значение вызывающего кода.

Урок 2 из 413 шагов

«Изменение на месте с inout» — бесплатный урок Mojo Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Mojo Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Mojo Academy содержит 4 уроков всего.

Иногда значение нужно изменить

Заимствование позволяет только читать. Но иногда функции действительно нужно изменить значение вызывающего кода, например увеличить счётчик. ✏️

Знакомьтесь: inout

Соглашение inout предоставляет функции изменяемый доступ. Изменения, выполненные внутри функции, отражаются в переменной вызывающего кода.

На вход и на выход

Название говорит само за себя: значение поступает внутрь, Вы изменяете его, а обновлённое значение возвращается вызывающему коду. Копия не возвращается.

Обозначение параметра

Перед именем параметра указывается inout. Теперь присваивания внутри функции напрямую изменяют исходную переменную.

fn increment(inout n: Int):
    n += 1

Вызов

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

var count = 5
increment(count)
print(count)  # 6

Требуется изменяемое значение

Аргумент, передаваемый параметру inout, должен быть изменяемой переменной var. Нельзя передать ему фиксированный литерал или заимствованное значение.

Эксклюзивный доступ во время заимствования

Пока функция удерживает ссылку inout, ничто другое не может обращаться к этому значению. Это правило эксклюзивности предотвращает конфликтующие изменения.

Без скрытых копий

Как и заимствование, inout работает по ссылке, поэтому полной копии нет. Вы можете изменять значение без затрат на дублирование.

Владелец по-прежнему вызывающий код

При использовании inout вызывающий код сохраняет владение. Функция лишь изменяемо заимствует значение на время вызова, а затем возвращает управление.

Когда выбирать inout

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

Чтение и изменение: сравнение

Итак: borrowed означает только чтение, а inout — чтение и запись. Правильный выбор точно сообщает читателям, что делает функция.

Быстрая проверка

Проверим, что позволяет делать inout.

Итоги

inout позволяет функции изменять значение вызывающего кода на месте, по ссылке и без копирования. Вызывающий код сохраняет владение всё время. 🎯

Можно начать бесплатно

Изучай Mojo с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
30
Уроки
120

Часто задаваемые вопросы

Урок «Изменение на месте с inout» бесплатный?

Да — полный текст урока «Изменение на месте с inout» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Mojo Academy, подпишись на CoddyKit PRO. Курс Mojo Academy содержит 4 уроков всего.

Чему я научусь в уроке «Изменение на месте с inout»?

Позволяйте функции изменять значение вызывающего кода. Ты практикуешь Mojo Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Mojo Academy?

Предыдущий опыт не требуется. Mojo Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Изменение на месте с inout»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Mojo Academy?

Да. Каждый урок Mojo Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Заимствование аргументов только для чтения
  2. Изменение на месте с inout
  3. Получение владения с owned
  4. Оператор передачи
← Назад к Mojo Academy