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_truei 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 assertEqualslub funkcji, które często spotykam, jak ta opisana powyżej. Jakie są dobre praktyki, aby rozwiązać ten problem?