<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[JavaScript — Как решить задачу FizzBuzz]]></title><description><![CDATA[<p dir="auto">Если кто не в курсе — это такая штука, которую дают на собеседованиях, чтобы проверить, умеешь ли ты вообще хоть что-то писать на JavaScript. Ну или просто чтобы посмеяться над твоим кодом <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f602.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--joy" style="height:23px;width:auto;vertical-align:middle" title="😂" alt="😂" />.</p>
<h2>Что такое FizzBuzz?</h2>
<p dir="auto">Для тех, кто в танке: FizzBuzz — это задача, где тебе нужно вывести числа от 1 до N (например, до 100), но с некоторыми условиями:</p>
<ul>
<li>Если число делится на 3, то вместо него выводится слово “Fizz”.</li>
<li>Если число делится на 5, то выводится “Buzz”.</li>
<li>Если число делится и на 3, и на 5, то выводится “FizzBuzz”.</li>
<li>Если ни одно из условий не выполняется, просто выводится само число.</li>
</ul>
<p dir="auto">Звучит просто, правда? Но, сколько же можно усложнять эту задачу! Давайте разберемся, как я это делал, и какие варианты решения у меня получились.</p>
<hr />
<h2>Первый подход: Просто работаем <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f914.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--thinking_face" style="height:23px;width:auto;vertical-align:middle" title="🤔" alt="🤔" /></h2>
<p dir="auto">Начнем с самого простого и прямолинейного решения. Тупо цикл <code>for</code>, проверки через <code>if</code> и вывод в консоль. Вот такой код у меня получился:</p>
<pre><code class="language-js">for (let i = 1; i &lt;= 100; i++) {
  if (i % 3 === 0 &amp;&amp; i % 5 === 0) {
    console.log("FizzBuzz");
  } else if (i % 3 === 0) {
    console.log("Fizz");
  } else if (i % 5 === 0) {
    console.log("Buzz");
  } else {
    console.log(i);
  }
}
</code></pre>
<p dir="auto">Вроде бы всё работает, но, этот код выглядит как будто его написал первокурсник. Можно ли сделать лучше? Конечно, можно!</p>
<hr />
<h2>Второй подход: Улучшаем читаемость <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f4a1.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--bulb" style="height:23px;width:auto;vertical-align:middle" title="💡" alt="💡" /></h2>
<p dir="auto">Я подумал: а почему бы не использовать тернарный оператор? Это же модно, молодёжно и компактно! Вот что у меня вышло:</p>
<pre><code class="language-js">for (let i = 1; i &lt;= 100; i++) {
  console.log(
    i % 15 === 0 ? "FizzBuzz" :
    i % 3 === 0 ? "Fizz" :
    i % 5 === 0 ? "Buzz" :
    i
  );
}
</code></pre>
<p dir="auto">Круто, правда? Но знаете что? Этот код всё равно выглядит как ебучий костыль. Да, он короче, но понятнее ли он стал? Не уверен. Может, есть способ ещё круче?</p>
<hr />
<h2>Третий подход: Функциональный стиль <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f680.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--rocket" style="height:23px;width:auto;vertical-align:middle" title="🚀" alt="🚀" /></h2>
<p dir="auto">А что, если мы попробуем написать более функционально? Создадим функцию, которая будет принимать число и возвращать нужную строку. Вот так:</p>
<pre><code class="language-js">const fizzBuzz = (num) =&gt; {
  let output = "";
  if (num % 3 === 0) output += "Fizz";
  if (num % 5 === 0) output += "Buzz";
  return output || num;
};

for (let i = 1; i &lt;= 100; i++) {
  console.log(fizzBuzz(i));
}
</code></pre>
<p dir="auto">Теперь всё выглядит намного чище! Мы вынесли логику в отдельную функцию, и основной цикл стал проще. Но знаете что? Я всё равно чувствую, что можно ещё больше поиздеваться над этой задачей.</p>
<hr />
<h2>Четвертый подход: Array и map 🤯</h2>
<p dir="auto">А давайте сделаем это через массивы и метод <code>map</code>! Звучит как извращение, но почему бы и нет? Вот что у меня получилось:</p>
<pre><code class="language-js">const result = Array.from({ length: 100 }, (_, i) =&gt; {
  const num = i + 1;
  return num % 15 === 0 ? "FizzBuzz" :
         num % 3 === 0 ? "Fizz" :
         num % 5 === 0 ? "Buzz" :
         num;
});

console.log(result.join("\n"));
</code></pre>
<p dir="auto">Теперь мы создаем массив длиной 100, заполняем его значениями через <code>map</code>, а потом выводим всё одной строкой через <code>join</code>. Красота! Но, бля, зачем я это делаю? Это же FizzBuzz, а не какой-нибудь ML-проект!</p>
<hr />
<h2>Пятый подход: Генераторы и yield <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f921.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--clown_face" style="height:23px;width:auto;vertical-align:middle" title=":clown_face:" alt="🤡" /></h2>
<p dir="auto">А что, если мы добавим генераторы? Зачем? Просто потому что можем! Вот это чудовище:</p>
<pre><code class="language-js">function* fizzBuzzGenerator(limit) {
  for (let i = 1; i &lt;= limit; i++) {
    yield i % 15 === 0 ? "FizzBuzz" :
          i % 3 === 0 ? "Fizz" :
          i % 5 === 0 ? "Buzz" :
          i;
  }
}

const generator = fizzBuzzGenerator(100);
for (const value of generator) {
  console.log(value);
}
</code></pre>
<p dir="auto">Генераторы — это, конечно, мощная штука, но для FizzBuzz это явно overengineering. Хотя, знаете что? Мне нравится! <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f60e.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--sunglasses" style="height:23px;width:auto;vertical-align:middle" title="😎" alt="😎" /></p>
<p dir="auto">Вот такие вот пироги, ребята. FizzBuzz — это, конечно задачка для новичков, сколько же можно её усложнять? Я даже не знаю, какой вариант выбрать. Может, просто оставить первый, чтобы не выглядеть как долбоёб на собеседовании? <img src="https://forum.exlends.ru/assets/plugins/nodebb-plugin-emoji/emoji/android/1f605.png?v=1bd9ff6b60a" class="not-responsive emoji emoji-android emoji--sweat_smile" style="height:23px;width:auto;vertical-align:middle" title="😅" alt="😅" /></p>
]]></description><link>https://forum.exlends.ru/topic/88/javascript-kak-reshit-zadachu-fizzbuzz</link><generator>RSS for Node</generator><lastBuildDate>Tue, 12 May 2026 15:21:30 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/88.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 23 Feb 2025 18:12:20 GMT</pubDate><ttl>60</ttl></channel></rss>