Після років кодування ковбоя я вирішив забрати книгу про те, як написати код хорошої якості. Я читаю чистий код Роберта Сесіля Мартіна. У главі 3 (функції) є розділ про діадичні функції. Ось уривок із книги.
Навіть очевидні діадичні функції на кшталт
assertEquals(expected, actual)
є проблематичними. Скільки разів ви ставили фактичне там, де має бути очікуване? Два аргументи не мають природного впорядкування. Очікуване, фактичне впорядкування - це умова, яка вимагає вивчити практику.
Автор робить переконливий момент. Я працюю в машинному навчанні і постійно стикаюся з цим. Наприклад, всі метричні функції в бібліотеці sklearn (можливо, найпоширеніша бібліотека пітонів у цій галузі) вимагають бути уважними щодо порядку введення даних. Як приклад sklearn.metrics.homogeneity_score бере в якості входів labels_true
і labels_pred
. Те, що ця функція виконує, не надто актуальне, а релевантне - якщо ви переключите порядок входів, помилка не буде видана. Фактично перемикання входів рівнозначно використанню іншої функції в бібліотеці.
Однак у книзі не йдеться про розумне виправлення таких функцій, як assertEquals
. Я не можу придумати виправлення для assertEquals
або функцій, на які я часто стикаюся, як описане вище. Які хороші практики вирішити це питання?