Page 105 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 105

результат окажется не тем, который вы ожидали получить, а в худшем вы можете по­
       лучить бесконечный цикл. Обычно такую задачу решают, используя убывающие ин­
       дексы, чтобы перебор осуществлялся с конца к началу. Таким образом, если вы до­
       бавите или удалите элементы из списка, то это не затронет условия завершения цикла.
          Например,  нам  может  понадобиться  удалить  все  простые  числа  из  массива
       ЬigArrayOfNumЬers. Для этого мы используем метод splice объекта Array, позво­
       ляющий добавлять и удалять элементы из массива (см. главу 8). Следующее не б у дет
       работать, как ожидалось.
       for ( l et  i=O ;  i<ЬigArrayOfNшnЬers . length;  i++)  {
           if ( i sPrime (ЬigArrayOfNumЬers [ i ] ) )   ЫgArrayOfNшnЬers . splice ( i ,   1 ) ;


          Поскольку индекс увеличивается, а мы удаляем элементы, есть вероятность, что
       мы перескочим через простое число (если оно окажется рядом). Мы можем решить
       эту проблему, используя убывающий индекс.

                                       h
       for ( l et  i=ЬigArrayOfNumЬers . lengt - 1 ;   i  >=  О ;   i - - )    {
           if ( isPrime (ЬigArrayOfNumЬers [ i ] ) )   ЬigArrayOfNumЬers . splice ( i ,   1 ) ;

          Обратите особое внимание на инициализацию и проверку условия  выхода:  мы
       начинаем со значения, которое меньше длины массива на единицу,  поскольку ин­
       дексы массивов отсчитываются от нуля. Кроме того, мы продолжаем цикл, пока i
       больше или равно  О;  в противном случае этот цикл не обработает первый элемент
       в массиве (что стало бы проблемой, окажись первый элемент простым числом).

       За к  люч е н и  е


          Управление потоком действительно придал новый импульс нашим программам.
       Переменные и константы могут содержать всю интересную информацию, но опера­
       торы управления потоком позволяют нам сделать выбор на основании этих данных.
          Блок-схемы - это удобное средство визуального описания потока. Зачастую име­
       ет смысл описать задачу в виде высокоуровневой блок-схемы, прежде чем начинать
       писать код. Однако блок-схемы не очень компактны, и код - это более эффективное
       и (с практической точки зрения) более естественное средство выражения потока вы­
       полнения (кстати, было предпринято много попыток создать языки программирова­
       ния, которые были бы исключительно визуальными, однако составить конкуренцию
       текстовым языкам они так и не смогли).










       104     Глава 4. Управление потоком
   100   101   102   103   104   105   106   107   108   109   110