Po latach kodowania kowbojskiego postanowiłem wybrać książkę o tym, jak napisać kod dobrej jakości. Czytam Clean Code autorstwa Roberta Cecila Martina. W rozdziale 3 (funkcje) znajduje się sekcja na temat funkcji dyadycznych. Oto fragment książki.
assertEquals(expected, actual)
Problematyczne są nawet oczywiste funkcje dyadyczne . Ile razy umieściłeś rzeczywiste miejsce, gdzie powinno być oczekiwane? Te dwa argumenty nie mają naturalnego uporządkowania. Oczekiwane, rzeczywiste porządkowanie jest konwencją, która wymaga praktyki.
Autor podkreśla przekonujący punkt. Pracuję w uczeniu maszynowym i cały czas się z tym spotykam. Na przykład wszystkie funkcje metryczne w bibliotece sklearn (prawdopodobnie najczęściej używana biblioteka Pythona w tej dziedzinie) wymagają uważności na kolejność danych wejściowych. Jako przykład sklearn.metrics.homogeneity_score przyjmuje jako dane wejściowe labels_true
i labels_pred
. Ta funkcja nie jest zbyt istotna, ważne jest to, że jeśli zmienisz kolejność wejść, nie zostanie zgłoszony błąd. W rzeczywistości przełączanie wejść jest równoznaczne z użyciem innej funkcji w bibliotece.
Jednak książka nie mówi sensownej poprawki dla funkcji takich jak assertEquals
. Nie mogę wymyślić poprawki dla assertEquals
lub funkcji, które często spotykam, jak ta opisana powyżej. Jakie są dobre praktyki, aby rozwiązać ten problem?