Пояснение
Кто не знает, не помнит, вот содержание задачи.
Напишите программу, которая выводит на экран числа от 1 до 100. При этом вместо чисел, кратных трем, программа должна выводить слово «Fizz», а вместо чисел, кратных пяти — слово «Buzz». Если число кратно и 3, и 5, то программа должна выводить слово «FizzBuzz».
И так я сделал для себя 4 варианта.
Вариант 1 - в лоб
&НаКлиенте
Процедура Вариант1(Команда)
Для Индекс = 1 По 100 Цикл
Если Индекс % 15 = 0 Тогда
Т = "FizzBuzz";
ИначеЕсли Индекс % 3 = 0 Тогда
Т = "Fizz";
ИначеЕсли Индекс % 5 = 0 Тогда
Т = "Buzz";
Иначе
Т = Формат(Индекс, "ЧГ=");
КонецЕсли;
Сообщить(Т);
КонецЦикла;
КонецПроцедуры
Выглядит нормально, пишется за несколько секунд на бумажке ручкой, но занимает много строчек. Скучный вариант.
Вариант 2 - сократим ИначеЕсли
&НаКлиенте
Процедура Вариант2(Команда)
Для Индекс = 1 По 100 Цикл
Т = "";
Если Индекс%3 = 0 Тогда
Т = Т + "Fizz";
КонецЕсли;
Если Индекс%5 = 0 Тогда
Т = Т + "Buzz";
КонецЕсли;
Если ПустаяСтрока(Т) Тогда
Т = Формат(Индекс, "ЧГ=");
КонецЕсли;
Сообщить(Т);
КонецЦикла;
КонецПроцедуры
И тут я подумал, ведь FizzBuzz = Fizz + Buzz. А условие для FizzBuzz это %3*5. Ну значит берем и прибавляем к строке результат проверки условия на %3 и на %5. Если ничего нет - значит это число.
Вариант 3 - заменим Если на ?
&НаКлиенте
Процедура Вариант3(Команда)
Для Индекс = 1 По 100 Цикл
Т = ?(Индекс%3 = 0, "Fizz", "") + ?(Индекс%5 = 0, "Buzz", "");
Т = ?(ПустаяСтрока(Т), Формат(Индекс, "ЧГ="), Т);
ВывестиВЛог(Т);
КонецЦикла;
КонецПроцедуры
Ну это было как бы логичное продолжение. Убираем Если ... КонецЕсли, меняем на тернарный оператор ? становится короче и лучше.
Вариант 4 - короче, не значит лучше
&НаКлиенте
Процедура Вариант4(Команда)
Для Индекс = 1 По 100 Цикл
Т = ?(Индекс%15 = 0, "FizzBuzz",
?(Индекс%3 = 0, "Fizz",
?(Индекс%5 = 0, "Buzz",
Формат(Индекс, "ЧГ="))));
Сообщить(Т);
КонецЦикла;
КонецПроцедуры
Ну тут мы вообще все свели к одной строке используя только тернарный оператор ?. Однако читаемость этой строки уменьшилась, понимание (имхо) тоже стало хуже. А подсчет закрывающих скобок может заставить нажать пару раз выполнение синтаксис-контроля.
Конец
Поскольку дальше мне стало скучно, отведенное время для развлечений закончилось и пора было идти спать, я решил что продолжать не буду. Мне хватит. Написал тест ко всем 4-м вариантам, прогнал и закрыл этот вопрос. Ну, а поскольку на Инфостарт не нашел упоминания про FizzBuzz решил восполнить пробел.
Прошу ногами не пинать, помидорами не закидывать. Хотите свою интерпретацию - в комментарии. Будет интересно почитать.