Modyfikacja funkcji czy pisanie od nowa

0

Cześć

Nie wiem czy ten dział, jeśli nie to sorry.
Jestem juniorem.. Kazano zrobić pewną rzecz, którą można było zrobić na dwa sposoby: dodać trochę instrukcji warunkowych do funkcji liczącej koło 400 linijek kodu lub napisać nową funkcję, gdzie tych linijek byłoby max 40. Wybrałem opcję drugą, bo wydawało mi się, że dzięki temu będzie lepsza czytelność oraz zrozumienie no i funkcja będzie realizowała określony cel, a nie 4 pokrewne rzeczy. Jednak mój mentor stwierdził, że mam robić pierwszą metodą, "bo jakby tak każdą funkcjonalność oddzielać do innej funkcji to klasa miałaby milion linijek kodu".
I w sumie zastanawiam się czy kto miał racje?

6

Uciekaj. Jesteś w piekle.
Generalnie metody na 40 linijek są w zasadzie daleko poza granicami rozsądku. Co dopiero 400.
Z takimi idiotami to się pałowałem jeszcze w 2000 roku, myślałem, że potem wymarli.
Klasy też nie powinny być na milion linijek, nie powinny być nawet na 400. Klasy też się rozdziela.

1

Z drugiej strony jak tamta funkcja ma 400 linijek to może wypadało by zrobić jej refactor? I może o to chodziło mentorowi, jak robisz coś w inny sposób, oryginalny, teoretycznie lepszy - to kolejny programista może to zrobić w jeszcze inny "lepszy" sposób - przez co dana logika będzie realizowana na 3 różne sposoby, a potem jeszcze więcej. Jak zrobisz refactor tej metody co ma 400 linijek np. wydzielając logikę do osobnych klas - wtedy nadal będzie jeden sposób, ale o wiele bardziej przejrzysty.

0

Przecież lepiej wydzielić dany fragment kodu do metody i wywołać ją z tej metody, która ma 400linii niż dopisywać do niej shit...

0

Ja myślę, że mentor ma rację.
Tego rodzaju zalecenia odnośnie długości funkcji, to nie są twarde reguły, a jedynie delikatne sugestie - że jeśli nie ma wyraźnych przesłanek, że z krótkimi funkcjami będzie źle, to trzeba użyć krótkich. Człowiek z doświadczeniem może dostrzegać te przesłanki, których Ty nie dostrzegasz. Może też mieć słabą umiejętność przełożenia na słowa tego, co podpowiada mu wyczucie/doświadczenie i dlatego Ci tego przekonująco nie wyjaśnił.

Lepiej nie zakładać na starcie, że bardziej doświadczony człowiek mówi głupoty. Polecam trochę więcej zaufania.

0

Może chodziło mu o to, że gdybyś dopisał to w tej długiej funckji to zajęło by to 4 linijki, a w nowej funkcji 40? Co nie zmienia faktu że funkcja mająca 400 linii kodu WYMAGA refaktoringu,

Swoją drogą, najdłuższą funkcję jaką spotkałem była w wtyczce do jednego z cms - revolution slider. Jedna funckja prawie 850 LINII KODU! (czego hindusi nie wymyślą...) Zostawiłem to, refaktor trwałby zbyt długo, nikt by za to nie zapłacił, a miałem do modyfikacji jedną linię kodu :)

0

@jarekr000000:

Z takimi idiotami to się pałowałem jeszcze w 2000 roku, myślałem, że potem wymarli.

Nawet nie zdajesz sobie sprawy jak wielu ma się dobrze również dzisiaj. :-)

Generalnie metody na 40 linijek są w zasadzie daleko poza granicami rozsądku. Co dopiero 400.

Jest tylko jeden sposób skutecznego wyplenienia czegoś takiego z rynku. Odejście, zaraz po zdaniu sobie sprawy, że będzie się uczestniczyło w takim projekcie. Kiedy nie będzie na świecie człowieka chcącego współpracować z takimi magikami to może czegoś ich to nauczy. Niemniej jednak zdaję sobie sprawę z tego, że jest to dosyć utopijna wizja i raczej niemożliwa do zrealizowania.\

Co dopiero 400.

Powiem Ci z autopsji, że 400 to mały pikuś. ;)

0

Generalnie metody na 40 linijek są w zasadzie daleko poza granicami rozsądku. Co dopiero 400.

Jest tylko jeden sposób skutecznego wyplenienia czegoś takiego z rynku. Odejście, zaraz po zdaniu sobie sprawy, że będzie się uczestniczyło w takim projekcie. Kiedy nie będzie na świecie człowieka chcącego współpracować z takimi magikami to może czegoś ich to nauczy. Niemniej jednak zdaję sobie sprawę z tego, że jest to dosyć utopijna wizja i raczej niemożliwa do zrealizowania.

Aby być konsekwentnym trzeba by jeszcze zrezygnować z używania mnóstwa dobrych i uznanych bibliotek, które są pod tym względem ideologicznie niepoprawne. Może to specyfika C, bo głównie bibliotek w C używam i do nich od czasu do czasu muszę zajrzeć, gdy nie udaje mi się wyszukać czegoś w dokumentacji, ale długie funkcje nie są żadnym ewenementem. A gdyby były czymś obiektywnie niekorzystnym, to te biblioteki dawno byłyby wyparte przez alternatywy z krótszymi funkcjami.

1

@Troll anty OOP: zależy jakie to są biblioteki, bo np. w krypto bardzo często można napotkać funkcje na setki linijek, bo loop unrolling, albo jakieś totalne magie się dzieją. Ogólnie C do najzwięźlejszych języków nie należy i czasem takie zabiegi są potrzebne ze względu na to by (wbrew pozorom) zapewnić większą czytelność. Więc trzeba w całości uwzględnić język o jakim mówimy.

1

Kiedy nie należy refaktorować 400-linijkowców:

  • jeśli nie masz unit testów, albo masz ich za mało
  • jeśli nie wiesz jak odpalić wszystkie przypadki testowe dla danej funkcji
  • jeśli jeszcze nie używałeś debugera w danym środowisku
  • jeśli liczba efektów ubocznych funkcji przekracza liczbę linii
  • jeśli chce to zrobić junior (bo np. nie zdaje sobie sprawy że przed refaktoringiem warto wiedzieć co funkcja robi)
  • jeśli jest to copy-pejst z innego modułu i musi być zsynchronizowany zawsze
  • jeśli jesteś przy końcu czasu na zadanie
  • jeśli jest piątek po południu i chcesz mieć wolny weekend
  • jeśli jesteś w przede dniu wakacji albo releasu

1 użytkowników online, w tym zalogowanych: 0, gości: 1