For Loop vs. Do ... Пока

Фон

Я только изучаю JavaScript и подумал, что хороший способ начать - это написать мой собственный ролик для игры в кости для ролевой игры, в которую я играю. В этой игре вы бросаете горстку шестигранных кубиков, где каждые 4 или 5 дают один успех, а каждые 6 дают 2 успеха.

У меня есть функция, которая бросает кости и передает их через массив другой функции, которая HTML-кодирует ее для отображения на веб-странице.

Код

Чтобы бросить кости, у меня есть то, что я считаю стандартной функцией ролика кубиков (переменная sides связана с тем, что иногда вы можете бросать кубики со сторонами, отличными от 6, поэтому я сделал эту функцию пригодной для всех бросков кубиков):

function rollDice(sides) {
  return Math.floor(Math.random()*sides) + 1;
}

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

Это основная функция, где number - количество бросаемых кубиков:

function dice(number) {
  let results = [];
  for (i=0; i<number; i++){
    results.push(rollDice(6));
  }
  return results;
}

Однако с тех пор я узнал о цикле do…while и сумел реорганизовать его следующим образом:

function dice(number) {
  let results = [];
  do {
    results.push(rollDice(6));
  } while (results.length < number)
  return results;
}

Актуальный вопрос

Какой цикл более «правильный» или лучший для использования? for или do…while?

Циклы for определенно более распространены, и я бы не стал дважды рассматривать первый пример. Но, как вы обнаружили, петли do...while в некоторых ситуациях могут обеспечить очень приятное решение! Я бы не сказал, что одно из них более правильное, чем другое.

Hamms 19.09.2018 03:12

Однако подумайте, что вы хотите, когда number меньше единицы.

Hamms 19.09.2018 03:13

Зависит от ваших требований. Do ... Пока цикл запускается хотя бы один раз, если условие не совпадает, когда цикл for запускается только при совпадении условий

Hitesh Kansagara 19.09.2018 03:13

если number никогда не дотрагивается до 0 или ниже, я думаю, что do... while подойдет. но я действительно редко вижу do... while на собственном опыте.

Wreigh 19.09.2018 03:14

Я согласен со всеми, кто говорит, что ты редко видишь ... в дикой природе, хотя нет ничего НЕПРАВИЛЬНОГО в том, чтобы использовать его в правильной ситуации. Однако я добавлю, что в школе мне не рекомендовали использовать его по причинам, аналогичным тем, которые были изложены в этом вопросе: stackoverflow.com/questions/994905/…. Однако это немного субъективно :)

Rose Robertson 19.09.2018 03:17

Если вы еще не исследовали его, вас также может заинтересовать forEachdeveloper.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Rose Robertson 19.09.2018 03:20

Поскольку вы всегда бросаете хотя бы один кубик, number никогда не будет меньше 1.

Christopher 19.09.2018 11:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
7
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете просто использовать простой цикл while, который эквивалентен вашему примеру цикла for.

function dice(number) {
  let results = [];
  while (results.length < number) {
    results.push(rollDice(6));
  }
  return results;
}

Мне больше всего нравится его удобочитаемость (отчасти потому, что он не создает дополнительную переменную итератора), но цикл for тоже подойдет. Цикл do...while работает, но дополнительный синтаксис не нужен.

Ха, я даже не подумал о простом шлейфе while. Спасибо!

Christopher 19.09.2018 11:06

Другие вопросы по теме