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