|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Modus ponens
|
Почему програмисты не умеют програмировать?
http://www.codinghorror.com/blog/200...s-program.html
Понравилась статья. Если чесно, я с ходу не понял, в чем фишка, но когда понял, вобщем, у нас появилось два варианта: private function runFizzBuzz():void { var result:String; var threes:int = 3; var fives:int = 5; for (var i:int = 1; i <= 100; i++) { result = ""; if (i == threes) { result = "Fizz"; threes += 3; } if (i == fives) { result += "Buzz"; fives += 5; } if (!result) result = i.toString(); trace(result, i); } }
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 26.06.2010 в 19:10. |
|
|||||
Регистрация: Jul 2007
Адрес: Россия, Москва
Сообщений: 522
|
Бегло прочитал статью, если честно, не очень понятно, как связаны 2 участка кода с указанной статьёй. На сколько я понял, там просто рассказывалось о том, что многие программисты, которые пытаются устроиться на работу не в состоянии написать простую программу.
Что касается 2-х участков кода, которые вы представили: я против записей блоков if/while/for/case с участками кода, которые выполняются после них, в одну строку, например так: Поэтому, не могу сказать, что «альтернатива» гораздо лучше 1-го участка кода, хотя выглядит компактнее, согласен. |
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
Цитата:
|
|
|||||
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Число итераций можно примерно в два раза сократить
Последний раз редактировалось udaaff; 26.06.2010 в 22:25. |
|
|||||
Modus ponens
|
Я всегда пишу так, и мне так больше нравится, но суть не в этом.
В самом начале статьи было написано, что большинство програмистов не способны решить примитивную задачу, и как раз эта задача решается в этом банальном на первый взгляд коде Кстати, по производительности первый вариант лучше второго т.как инкремент быстрее модуло, да и при этом инкремент происходит не каждую итерацию. Но фишка не в этом, а в том, что прочитав условие задачи появляется желание найти вариант где бы использовались только два if'a или взаимоисключающие условия, а вот не находится
__________________
Hell is the possibility of sanity |
|
|||||
Цитата:
а почему вы пропустили одно из условий задачи "For numbers which are multiples of both three and five print "FizzBuzz"." ? я не наблюдаю такого трейса.. некрасиво но работает |
|
|||||
Modus ponens
|
TERRORist:
там не = а += Но идея интересная, хотя тоже не ахти - тернарный оператор ни чем не лучше if-else ну только что запись немного короче, а с другой стороны - приходится использовать "FizzBuzz", которая явно собирается из двух компонентов, которые так же используются отдельно. + нужно считать модуло каждую итерацию (более накладно чем раз в несколько итераций проинкрементить). + дополнительная операция &&. кстати, для Лиспа можно было бы по-другому и красивше решать, там есть натуральные дроби (или я не знаю, как это правильно называется), в смысле можно 1/3 + 1/3 + 1/3 = 1.
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 27.06.2010 в 00:48. |
|
|||||
Modus ponens
|
Кстати, вот еще экстримальный вариант
function runFizzBuzz():void { var result:String; for (var i:int = 1, state:int; i <= 100; i++, state++) { switch (state) { case 2: case 5: case 8: case 11: result = "Fizz"; break; case 4: case 9: result = "Buzz"; break; case 14: result = "FizzBuzz"; state = -1; break; default: result = i.toString(); } trace(result, i); } }
__________________
Hell is the possibility of sanity |
Часовой пояс GMT +4, время: 21:23. |
|
« Предыдущая тема | Следующая тема » |
|
|