[#] Натягиваем ФП на ООП
habrabot(difrex,1) — All
2017-01-02 20:30:03


Некоторое время назад, вернувшись после полугодового отпуска в функциональном мире, назад в ООП, я в который раз наступил на привычные грабли: случайно изменил состояние.


private double fBm(Vector2D v, int y)
{
double result = 0f;
double freq = Frequency;

for (int i = 0; i < Octaves; ++i)
{
result += NoiseFn(permutation, v * freq) * Amplitude;
freq *= Lacunarity;
Amplitude *= Gain; // <-- Вот тут.
}

return result;
}

В ФП нужно особо постараться чтобы получить такой баг, а в некоторый языках невозможно в принципе. Салат из полезной работы и состояния класса не радовал, простор для ошибок даже в этой четверке строк слишком широк. Я стал думать как можно уменьшить площадь этих грабель и вывел следующее:

[Читать дальше →][1]

[1]: https://habrahabr.ru/post/318908/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut