Jak wiemy uogólnianie bywa dobre, wynika z DRY i często jak coś się notorycznie powtarza to jednak warto to uogólnić, by mieć jedną definicję w systemie. Inaczej prosimy się o kłopoty, prawda?
Pisząc ogólnie można się zakręcić, poniżej daję dwa najprostsze przykłady jakie przychodzą mi do głowy, przy których zdawanie się na logikę nie wiele mi pomaga:
-
Jak w pythonie zapiszemy wywołanie funkcji map zamiast pętli to taka rzecz byłaby mniej czytelna, prawda? Mniej osób spodziewa się map, mniej osób jest przygotowana na zderzenie (że teraz map zwróci generator), co więcej by zrozumieć wywołanie musi też rozumieć callback jaki otrzymał map. Możliwe, że w innych językach użycie map byłoby lepsze, ale w pythonie ten for dla wielu osób jest jednak poręczniejszy / prostszy w dalszym dostosowywaniu nawet jeśli 90% przypadków to typowe iterowanie.
-
Gdy masz warunek, który sprawdza czy wartość jest None, jeśli jest None to rzucasz wyjątek, który jest znany systemowi. Czy lepiej wtedy powtarzać te warunki i za każdym razem pisać if + raise, czy może lepiej jest mieć funkcję, która nazywa się check_value i ona sama to ogarnia (tzn ukrywa ifa i rzuca wyjątek). W takim przypadku też myślę, że mimo powtarzania to taki if + raise pisany za każdym razem z palca jest przyjemniejszy w odbiorze niż check_value po którym nie zawsze wiadomo czego się spodziewać.
Z drugiej strony jak mamy 2 wartości i mamy wybrać tą mniejszą to zamiast warunku ludzie preferują użyć funkcję min. Nie jest to dziwne?
By problem nie dotyczył samego pythona zwróćcie uwagę na pisanie kodu reacta i html. W react używamy html, bazujemy na nim i powtarzamy te znaczniki. Możemy z nich robić komponenty i jeśli te znaczniki mają znaczenie to tym bardziej możemy robić z nich komponenty. Gdy mam komponent, który składa się z N komponentów (np. lista linków) to mam wrażenie, że oszukuje siebie samego - bo akurat w tym przypadku pisanie konkretnego html bez abstrakcyjnej otoczki byłoby prostsze do zrozumienia. Może niekoniecznie to byłaby łatwa rzecz do rozszerzenia, ale do wprowadzania prostych modyfikacji jak najbardziej tak. W końcu to tylko lista linków.
Jeszcze mógłbym wypisać parę przypadków, ale docelowo cieżko mi jednoznacznie stwierdzić co sprawia, że w danym przypadku uogólnienie może być gorsze niż powtarzanie.
Mam nadzieję, że odpowiedź nie zależy od przypadku / natury / rozsądku / umiaru - chociaż sam tak to na razie postrzegam. Im bardziej o tym myślę tym bardziej wydaje mi się, że jest to swego rodzaju moja wymówka, unik od konkretnej odpowiedzi.