Подтвердить что ты не робот

Итерация - объяснение и пример

Может кто-нибудь объяснить, что именно Итерация и показать пример?

источник: Долгосрочные задачи Блог YUI от Дугласа Крокфорда

4b9b3361

Ответ 1

Вначале я думал, что это просто опечатка итерации, так как поиск в Интернете для eteration не дает значимых результатов.

Но тогда я наткнулся на ссылки, в которых говорится, что этот термин был придуман самим Крокфордом в одном из его разговоров.
Онлайн, единственное место, где я мог найти объяснение, находится на его странице, в The Factorial Tutorial, статья, где в Act 2, как комментарий к образцу кода, он утверждает:

Действие 2a: итерация сообщения (eteration)

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

Действие 2b: рекурсия сообщения (ecursion)

Итак, кажется, что eteration и ecursion - это термины, изобретенные и определенные самим Крокфордом для ссылки на итерацию и рекурсию сообщений в контексте E Язык программирования, разработанный поверх Java для разработчиков, которые пишут распределенные приложения.

Тот факт, что язык называется E, возможно, является причиной того, что его конкретная итерация и рекурсия отражают выбранную терминологию (** e *** teration * и ** e *** cursion *).

Если контекст Javascript, Крокфорд объясняет термин eteration как часть разговора Крокфорд на JavaScript - Сцена 6: Loopage, начиная с минуты 30:40:

Итерация означает разбить задачу на несколько оборотов, чтобы на каждом eteration, вместо того, чтобы проходить через обычный цикл, внизу цикла мы называем setTimeOut, передавая ему функцию, которая вызывает мы сделаем следующую процедуру. Это означает, что повороты будут короткий - поворот только до тех пор, пока одна из них - и мы можем сделать так: так как мы хотим, а не блокировать цикл событий.

В результате, вместо жесткого цикла, блокирующего интерфейс, если он занимает слишком много времени, eteration планирует каждый шаг цикла в цепочке, которая блокирует только интерфейс, а фактический шаг выполняется, а не между шагами. Это позволяет выполнять длительные задачи в том же потоке, что и интерфейс (Javascript является однопоточным), сохраняя при этом отзывчивость приложений.

Посмотрите полный разговор в гораздо лучшем качестве и в сопровождении полнотекстового расшифровки здесь.

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

<html>
 <head>
  <script type="text/javascript">
   function testFeedback()
   {
      var feedbackDiv = document.getElementById("feedbackDiv");

      feedbackDiv.innerHTML += "The Interface is Still Responsive!</br>";
   }

   var currentNumber = 0;
   var loopStepDelay = 30;

   function performLoopStep()
   {
     var numbersDiv = document.getElementById("numbersDiv");
     numbersDiv.innerHTML = currentNumber++;
     setTimeout("performLoopStep()", loopStepDelay);
   }
   setTimeout("performLoopStep()", loopStepDelay);
  </script>
 </head>
 <body>
  <div id="numbersDiv"></div>
  </br>
  </br>
  <div id="feedbackDiv"></div>
  </br>
  </br>
  <button onClick="testFeedback()">Try Me</button>
 <body>
</html>

Есть два div s, один из которых отображает индексы текущей этерации, а другой добавляет текст. Интерфейс все еще реагирует! на каждой кнопке Try Me нажмите. Как видно из кода, этапы этапов запланированы на setTimeOut с некоторым интервалом времени, что позволяет взаимодействовать с пользователем и обрабатываться. Таким образом, этапы этапов будут продолжать выполняться по мере того, как пользователь нажимает на кнопку и запускает обновление второго div, сохраняя отзывчивость страницы, делая реальный прогресс с работой, которую он должен выполнить (в данном случае просто отображая индексы).