Prawdziwy przykład z prawdziwego projektu. Gostek miał zrobić dyskową strukturę danych odpowiadającą za wyszukiwanie jakichś danych po id oraz id po czymś tam innym. Struktura miała być oszczędna pamieciowo, więc w grę wchodziła jakaś kompresja, pakowanie bitów i takie tam - ogólnie nietrywialna sprawa. Jak dostałem pierwsza wersję do CR to nie było żadnej dokumentacji a cała metoda do dodawania danych do owej struktury to był taki blob na kilkadziesiat linii, niby nie taki długi ale dużo się działo - z jednej strony używający innych klas, a z drugiej strony robiący niskopoziomowo jakieś write do strumieni opakowanych w inne strumienie (jakieś writery itp). Pamiętam, że zanim się zorientowałem, że gościu pisze do TRZECH różnych plików i one mają różną funkcję, bo np jeden pozwala wyszukać A na podstawie B, a drugi B na podstawie A to minęło naprawdę sporo czasu. A wystarczyło to rozbić na trzy osobne kawałki kodu. Jak to rozbilem na te trzy osobne metody to się okazało że ten kod nie jest wcale taki skomplikowany.
Dlatego uważam że rzeczy, które są ze sobą słabo związane powinny być wydzielane do osobnych metod / funkcji, tak aby ilość kontekstu potrzebnego do analizy pojedynczej funkcji była jak najmniejsza.
No i w sumie bardziej mi przeszkadza jak kod korzysta z bardzo dużej liczby zmiennych niż jak sam w sobie jest długi. Miałem parę razy do przeczytania funkcje na raptem 20 linii a stanu było tak dużo że analiza działania zajmowała godziny a nie minuty. Z drugiej strony bezstanowy długi i płaski tasiemiec nie musi wcale być trudny w odbiorze.
Niestety to jest trochę takie zagadnienie gdzie dużo zależy od wyczucia i zmysłu estetyki piszącego ;)