2019-04-19 FizzBuzz 3
by Vasil Kolev(предхождащи post-ове по темата: FizzBuzz, FizzBuzz 2)
Задачката продължава да води до интересни идеи, та ще публикувам някои от тях.
В последно време търсим java програмист, та в едно от решенията имаше следното:
try { errorNumber= 1/(tmpNum%15); } catch (ArithmeticException ae) { return "AB"; }
Това за мен беше съвсем неизвестен начин да се напише if() :) Ползването на exception-и е страшно неефективно (поне под Linux генерира SIGFPE, т.е. ще мине за малко и през kernel-а), но е още един начин да се промени пътя на кода.
Също така, в езиците, в които няма goto цикълът може да се реализире с рекурсия, като функцията, в която се влиза се избира от масив (идеята дойде на Slackware, който написа реализация на php), и изглежда горе-долу по следния начин:
function printto99($i) { global $funcs; .... $funcs[$i % 100]($i+1); } function print100($i) { global $funcs; .... return; } $funcs = array(0 => printto99(), 1 => print100()); $funcs[0](1);
В …. частта се слага логиката какво да се печата, което ме мързи да разписвам пак.
В Java тази конкретна идиотщина може да се реализира, като вместо масив от функции се направи масив от обекти с общ родител, който има два наследника – printto99 и print100 и така да се направи цикъла.
June 6th, 2019 at 12:42
EAFP (Easier to ask for forgiveness than permission) е доста попълярен стил на писане в Python света. Кажи му на човека да сменя езика и няма да го гледат странно по интервютата :)
https://stackoverflow.com/questions/12265451/ask-forgiveness-not-permission-explain