Проверяет понимание инвариантов как условий, которые должны оставаться истинными на протяжении выполнения программы или алгоритма, что важно для корректности и надёжности кода.
Инвариант — это утверждение о состоянии программы, которое должно быть истинным в определённых точках выполнения. Идея пришла из формальной верификации: если мы можем описать, что всегда верно, то можем рассуждать о корректности кода без запуска. Инварианты бывают разные: инварианты класса (объект всегда в допустимом состоянии), инварианты цикла (условие истинно перед каждой итерацией), инварианты данных (например, отсортированность массива).
Рассмотрим поиск максимума в массиве. Инвариант: после обработки первых i элементов переменная max хранит максимум среди них.
function findMax(arr) {
let max = -Infinity;
for (let i = 0; i < arr.length; i++) {
// Инвариант: max — максимум среди arr[0..i-1]
if (arr[i] > max) max = arr[i];
// Инвариант сохранён: max — максимум среди arr[0..i]
}
return max;
}В ООП инвариант класса — это условие, которое истинно для любого корректного объекта. Например, у класса «Банковский счёт» баланс не может быть отрицательным.
class Account {
#balance = 0;
// Инвариант: balance >= 0
deposit(amount) {
if (amount <= 0) throw new Error('Invalid amount');
this.#balance += amount;
}
withdraw(amount) {
if (amount > this.#balance) throw new Error('Insufficient funds');
this.#balance -= amount;
}
}Инварианты полезно применять при проектировании алгоритмов, работе с конкурентностью (например, инварианты блокировок) и в критичных системах, где важна корректность. Они делают код понятнее и надёжнее, а также помогают быстрее находить причины багов.
Уровень
Рейтинг:
4
Сложность:
5
Навыки
JavaScript
Testing
Ключевые слова
Подпишись на Node.js Developer в телеграм