Код-ревью

Вещи, которые я узнал из код-ревью

Копирование может привести к глупым ошибкам :)

Когда мы пишем код, мы склонны часто использовать копирование и вставку. Из-за этого копирования и вставки мы склонны совершать глупые ошибки.

Эти ошибки могут не повлиять на результат, но избегание этих ошибок делает наш код чистым.

Будучи людьми, мы склонны не замечать своих ошибок. Вот почему у нас есть проверки кода, чтобы получить отзывы о проделанной нами работе перед отправкой ее в нашу производственную систему.

Вот некоторые вещи, которые я узнал из обзоров кода, и я рад поделиться ими с вами.

Не используйте имя переменной в зависимости от контекста вызывающей стороны

Давайте разберемся в этом моменте с помощью примера.

def myMethod(id: Int): Boolean = {
   val validUsers: Seq[User] = ???
   val scores = calculateScores(validUsers)
   ...
}
/**
* Calculate scores for given users.
*/
def calculateScores(validUsers: Seq[User]) = { ... }

В приведенном выше примере методcalculateScores использует validUsers в качестве аргумента.

Предположим, что этот метод вычисляет оценку для заданного списка пользователей и не имеет ничего общего с «действительными пользователями». Следовательно, использование «validUsers» в качестве имени переменной здесь не имеет смысла.

Никогда не используйте имена переменных по отношению к контексту вызывающего объекта, но используйте их по отношению к используемому контексту.

Итак, сделайте это вместо этого.

def myMethod(id: Int): Boolean = {
   val validUsers: Seq[User] = ???
   val scores = calculateScores(validUsers)
   ...
}
/**
* Calculate scores for given users.
*/
def calculateScores(users: Seq[User]) = { ... }

Сделайте ожидаемый результат модульного тестирования явным и подробным

Модульные тесты помогают нам понять функциональность нашего кода. Если они будут простыми, и автору, и рецензенту будет легче рассуждать о данном решении.

Я верю в то, что «ожидаемые результаты» следует писать явно и делать их подробными.

Например, в следующем примере мы получаем ожидаемые результаты из пустых доменов. Однако мы уже знаем, что он всегда будет пуст.

val domains = Seq()
...
val expectedResult = domains.map (... ).toMap

Так почему бы не написать это явно?

val domains = Seq()
...
val expectedResult = Map()

Это очень простой пример, чтобы дать вам представление о том, что мне нужно.

Эти ошибки кажутся глупыми, но я видел их в обзорах кода как рецензент.

Спасибо за прочтение.

Хотите поделиться своим интересным опытом, полученным с помощью код-ревью?

Если вам понравился этот пост, вам также может понравиться следующий пост.

Уроки, которые я усвоил как код-ревьюер

Использование отдельной базы данных для каждого модульного теста

Want to connect?
Facebook | LinkedIn | Twitter