Предикаты — мощный инструмент в JavaScript, который позволяет проверять условия и управлять потоком выполнения программы. Понимание того, как правильно писать и использовать предикаты, поможет вам создавать более надёжный и читаемый код.
Главная страница » JavaScript » 47. Предикаты
Предикаты — это функции, которые возвращают логическое значение (true или false). Они играют важную роль в программировании, так как позволяют проверять условия и выполнять действия в зависимости от результата этих проверок. В JavaScript предикаты часто используются в конструкциях if, циклах, фильтрации массивов и других ситуациях, где требуется проверить, соответствует ли что-то определённому критерию.
Предикат — это функция, которая принимает один или несколько аргументов и возвращает либо true, либо false в зависимости от логического выражения внутри неё.
Пример простого предиката:
function isEven(number) {
return number % 2 === 0;
}
console.log(isEven(4)); // true
console.log(isEven(7)); // false
В этом примере функция isEven проверяет, является ли переданное число чётным, и возвращает true, если это так, и false в противном случае.
Предикаты можно использовать в различных ситуациях, например, для фильтрации массивов:
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
let evenNumbers = numbers.filter(isEven);
console.log(evenNumbers); // [2, 4, 6, 8, 10]
Здесь предикат isEven используется для фильтрации массива, чтобы получить только чётные числа.
Также предикаты часто используются в условиях:
let age = 20;
function isAdult(age) {
return age >= 18;
}
if (isAdult(age)) {
console.log("Вы совершеннолетний.");
} else {
console.log("Вы несовершеннолетний.");
}
Предикаты могут быть сложными, объединяя несколько условий с использованием логических операторов.
Пример сложного предиката:
function isEligibleToVote(age, isCitizen) {
return age >= 18 && isCitizen;
}
console.log(isEligibleToVote(20, true)); // true
console.log(isEligibleToVote(16, true)); // false
console.log(isEligibleToVote(20, false)); // false
Здесь предикат isEligibleToVote проверяет два условия: возраст и гражданство. Пользователь может голосовать, только если оба условия выполнены.
Предикаты широко используются в функциях высшего порядка, таких как filter, some, every и других. Например:
let numbers = [1, 2, 3, 4, 5, 6];
let hasOddNumbers = numbers.some(number => number % 2 !== 0);
console.log(hasOddNumbers); // true
Здесь функция some проверяет, есть ли в массиве хотя бы одно нечётное число, используя предикат в виде анонимной функции.
Неучёт типов данных: Предикаты могут работать некорректно, если не учитывать типы данных. Например, строка "5" и число 5 могут привести к разным результатам при проверке.
Пример ошибки:
function isPositiveNumber(value) {
return value > 0;
}
console.log(isPositiveNumber("5")); // true, но это не число!
Использование предикатов с функциями высшего порядка без учёта контекста: Иногда забывают, что предикаты в функциях, таких как filter, some и других, применяются к каждому элементу массива. Это может привести к неожиданным результатам, если предикат написан неправильно.
Пример ошибки:
let numbers = [1, 2, 3, 4, 5];
let result = numbers.filter(number => number > 2 && number < 4);
console.log(result); // [3]
Возвращение не булевых значений: Предикаты должны возвращать только true или false. Возвращение других значений может привести к путанице и неправильной работе программы.
Пример ошибки:
function isValidAge(age) {
if (age >= 18) {
return "Valid";
} else {
return "Invalid";
}
}
console.log(isValidAge(20)); // "Valid", но это не boolean!
Предикаты — мощный инструмент в JavaScript, который позволяет проверять условия и управлять потоком выполнения программы. Понимание того, как правильно писать и использовать предикаты, поможет вам создавать более надёжный и читаемый код.
isPositive, который будет проверять, является ли число положительным.filter отфильтруйте только положительные числа, используя предикат isPositive.isStringEmpty, который будет проверять, является ли строка пустой.some проверьте, содержит ли массив строк хотя бы одну строку, начинающуюся с буквы «A».isPalindrome, который проверяет, является ли строка палиндромом (строкой, которая читается одинаково в обе стороны, например, «радар»). Пример использования:
function isPalindrome(str) {
let reversed = str.split('').reverse().join('');
return str === reversed;
}
console.log(isPalindrome("радар")); // true
console.log(isPalindrome("тест")); // false
isBetween, которая принимает три аргумента: value, min, max. Функция должна возвращать true, если value находится в диапазоне между min и max (включительно), и false в противном случае.
function isBetween(value, min, max) {
return value >= min && value <= max;
}
console.log(isBetween(10, 5, 15)); // true
console.log(isBetween(20, 5, 15)); // false
hasProperty, который проверяет, есть ли у объекта определённое свойство. Например:
function hasProperty(obj, prop) {
return obj.hasOwnProperty(prop);
}
let user = { name: "John", age: 30 };
console.log(hasProperty(user, "name")); // true
console.log(hasProperty(user, "address")); // false
isAdultAndCitizen, который принимает два аргумента: возраст и статус гражданства. Функция должна возвращать true, если человек взрослый (18 лет и старше) и является гражданином.
function isAdultAndCitizen(age, isCitizen) {
return age >= 18 && isCitizen;
}
console.log(isAdultAndCitizen(20, true)); // true
console.log(isAdultAndCitizen(16, true)); // false
console.log(isAdultAndCitizen(20, false)); // false
Напишите функцию filterByPredicate, которая принимает массив и предикат в качестве аргументов. Функция должна возвращать новый массив, содержащий только те элементы, которые удовлетворяют предикату.
Пример:
function filterByPredicate(array, predicate) {
return array.filter(predicate);
}
let numbers = [1, 2, 3, 4, 5, 6];
let evenNumbers = filterByPredicate(numbers, isEven);
console.log(evenNumbers); // [2, 4, 6]
Эти задания помогут вам глубже понять, как работать с предикатами в JavaScript, а также научиться комбинировать их для решения более сложных задач.
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024-2025 Все права защищены. CodeFor.
Язык сайта: