«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Прогресс масштаба

Прогресс масштаба

Опубликовано 2 ноября 2024 г.
Просматривать:979

Scope progression

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

func addOneToSlice(xs []int) []int {
  rs := make([]int, len(xs))
  for i, value := range xs {
    rs[i] = value   1
  }
  return rs
}

Однако обратите внимание на следующее в цикле for:

  • Каждая итерация имеет определенную цель: добавить ее к текущему элементу.
  • Однако каждая итерация не имеет ограничений на то, с каким элементом она может работать.
  • Работа с xs[i 2] и rs[i 3] не приведет к фундаментальному изменению структуры имеющегося у нас кода, но сделает конечный результат некорректным.

Сравните, как та же задача будет решена в F#:

let rec addOneToList =
  function
  | [] -> []
  | x :: xs -> x   1 :: addOneToList xs

Теперь рассмотрим следующее:

  • У нас есть список в качестве аргумента функции.
  • Список на функциональных языках представляет собой связанный список.
  • Эффективные и стандартные операции со связанными списками:
    • Отделение головы x от хвоста xs
    • Что-то делаю с головой x
    • Сравнение списка, переданного в качестве параметра, с пустым списком []

Учитывая эти ограничения, добавление 1 к любому элементу y, не находящемуся в начале списка, значительно изменит структуру нашей функции.

Теперь сравните ход вычислений в обоих стилях:

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

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

  • Мы избегаем мутаций.
  • Последовательность выполнения является явной.
  • Структура, с которой мы имеем дело, становится понятной.
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/lamg/scope-proгрессия-4iil?1. В случае нарушения прав свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3