Предикаты — мощный инструмент в 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 Все права защищены. CodeFor.