a) bo automatycznie ułatwiają testowanie,
Jeżeli testujesz tę mniejszą funkcję, to wołasz ją z kilku miejsc, więc nie jest to przypadek, który ja opisuję.
b) bo, wbrew temu co piszesz ułatwiają debug,
Nie widzę tej przewagi, ale to subiektywne. Poza tym nigdzie nie pisałem o debugowaniu.
c) zmniejszają rozmiar problemu - analizując większą funkcję masz w lokalnym zasięgu więcej zmiennych lokalnych itp. nieważne jak sobie to poprzedzielasz komentarzami, funkcja automatycznie przerywa takie zależności,
Co może być zaletą i wadą, zresztą poruszyłem to w swoim poście. No i to tylko w przypadku "pełnej" funkcji, jeżeli zrobię funkcję zagnieżdżoną lub lambdę, to mogę dalej łapać przez domknięcie (mniej lub bardziej dowolnie, w zależności od języka).
d) komentarze to w ogóle WTF - myślałem, że już ten temat był wielokrotnie wałkowany, prędzej czy później komentarz rozjedzie się z kodem którego dotyczy, w przypadku funkcji może rozjechać się nazwa (którą łatwo poprawić), ale przynajmniej parametry będą musiały mieć sens
W opisywanym przeze mnie przypadku będzie tak samo, nic się nie rozjedzie bardziej, niż rozjechałoby się w normalnej funkcji. A kwestię "komentarze to w ogóle WTF" pominę, to jest podejście dogmatyczne, a takie zazwyczaj prowadzi na manowce.
d) co do zrzucania roboty na IDE - jakoś problemów z jakością kompilatorów nie mam, nieważnie jak poryty kod tworzę - natomiast IDE wykrzaczają mi się często i nie trzeba się starać. Kompilowanie kodu, który IDE oznacza cały na czerwono, bo się gubi, to zwykle standard. (nawet w prostackim kotlinie).
To jest średnio wartościowy dowód anegdotyczny, więc nawet się nie będę odnosił.
Jeśli chodzi o performance to jedno pytanie:
A kiedy mierzyłeś?
Pisałem o koszcie koncepcyjnym, Ty wyciągnąłeś jedno słowo i mówisz o czymś zupełnie innym.
To nie tylko kompilatory są sprytniejsze, również od dawna hardware coraz lepiej radzi sobie z takim kodem. O ile nie uruchamiasz kodu na 80386 to CPU jest wstanie ogarnąć dużo optymalizacji nawet jesli twój kompilator nie daje rady.
Co więcej - jeszcze 10 lat temu - w javie w czasach jdk 1.5 często bywało tak, że podział na mniejsze funkcje prowadził do lepszej wydajności - po prostu mniejsze funkcje łatwiej inlinować, były szybciej i wydajniej kompilowane - duże od razu przepadały.... ale to raczej "dziwactwa" kompilatorów w jvm/hotstpota. Z tego co wiem obecnie jest dużo mniej takich.
O tym w ogóle nie pisałem, więc nie będę się odnosił.
Tu raczej tej jest sprawa jasna - kompilator piszemy raz, i może być skomplikowany - po to właśnie żeby kod dla ludzi mógł być prosty. Temat wielokrotnie wałkowany.
I wielokrotnie ludzie narzekają, że małe funkcje nie są dla nich czytelniejsze.
Poruszyłeś też temat kolorowych funkcji - jak dla mnie to zupełnie ortogonalne zagadnienie, do tego co omawiamy. Bo tutaj jednak kod w wersji zbitej i rozproszonej na funkcje async ma w zasadzie inną strukturę. Zresztą mnie osobiście strasznie te wszystkie asyki i suspendy wkurzają (ale to temat na całkiem inną dyskusję).
Ma tę samą strukturę, jeżeli wydzieliłem fragment funkcji async do osobnej metody, to ta osobna też musi być async (jeżeli robi awaita gdzieś w środku), co dokłada kolejne obciążenie.
Kod w komentarzu wykonuje się zwykle nieskończenie szybko.
Dobry suchar, będzie puchar!