Sometimes we need to combine logical operators to evaluate more complex conditions. For example:
7 >= 10 && (5 == 7 || 9 < 12) // Evaluates to false
Notice that we used parentheses to group 5 == 7 and 9 < 12 together. The computer interprets this line of code as condition1 && condition2
where:
condition1
is 7 >= 10, which is falsecondition2
is (5 == 7 || 9 < 12), which is truecondition1
and condition2
is false, so the entire condition is false.
It is very important to use parentheses to tell the computer how to group the conditions together. If we change the parantheses in the example above to:
(7 >= 10 && 5 == 7) || 9 < 12 // Evaluates to true
Now the computer interprets this line of code as condition1 || condition2
where:
condition1
is (7 >= 10 && 5 == 7), which is falsecondition2
is 9 < 12, which is truecondition1
and condition2
is true, so the entire condition is true.
Assignment
Follow the Coding Tutorial and let's combine some logical operators.
Hint
Look at the examples above if you get stuck.
In programming, logical operators are used to form complex conditions by combining multiple simple conditions. This is particularly useful in decision-making processes where multiple criteria need to be evaluated. Logical operators such as &&
(AND), ||
(OR), and !
(NOT) are fundamental in controlling the flow of a program.
Logical operators allow us to combine multiple boolean expressions. The three main logical operators are:
&&
(AND): Returns true if both operands are true.||
(OR): Returns true if at least one of the operands is true.!
(NOT): Returns true if the operand is false.For example:
true && false // Evaluates to false
true || false // Evaluates to true
!true // Evaluates to false
Combining logical operators allows us to create more complex conditions. Parentheses are used to group conditions and control the order of evaluation. For example:
let a = 5;
let b = 10;
let c = 15;
if ((a < b && b < c) || c > 20) {
console.log("Condition is true");
} else {
console.log("Condition is false");
}
// Evaluates to "Condition is true"
In this example, the condition (a < b && b < c) || c > 20
is evaluated. Since a < b
and b < c
are both true, the entire condition evaluates to true.
Let's look at some practical examples:
let age = 25;
let hasLicense = true;
let isSober = true;
if (age >= 18 && hasLicense && isSober) {
console.log("You can drive");
} else {
console.log("You cannot drive");
}
// Evaluates to "You can drive"
In this example, all conditions must be true for the person to be allowed to drive.
Common mistakes include:
Best practices include:
Advanced techniques involve combining logical operators with other control structures like loops and functions. For example:
function canVote(age, citizenship) {
return age >= 18 && citizenship === 'USA';
}
let voters = [
{ name: 'Alice', age: 30, citizenship: 'USA' },
{ name: 'Bob', age: 17, citizenship: 'USA' },
{ name: 'Charlie', age: 25, citizenship: 'Canada' }
];
voters.forEach(voter => {
if (canVote(voter.age, voter.citizenship)) {
console.log(voter.name + " can vote");
} else {
console.log(voter.name + " cannot vote");
}
});
// Evaluates to:
// Alice can vote
// Bob cannot vote
// Charlie cannot vote
Here is a well-commented code snippet demonstrating the use of logical operators:
// Function to check if a person can enter a club
function canEnterClub(age, isMember) {
// Person can enter if they are at least 21 years old or if they are a member
return age >= 21 || isMember;
}
let people = [
{ name: 'John', age: 20, isMember: true },
{ name: 'Jane', age: 22, isMember: false },
{ name: 'Jim', age: 19, isMember: false }
];
people.forEach(person => {
if (canEnterClub(person.age, person.isMember)) {
console.log(person.name + " can enter the club");
} else {
console.log(person.name + " cannot enter the club");
}
});
// Evaluates to:
// John can enter the club
// Jane can enter the club
// Jim cannot enter the club
When debugging logical conditions, use console.log to print intermediate results. For example:
let a = 5;
let b = 10;
let c = 15;
console.log(a < b); // true
console.log(b < c); // true
console.log(a < b && b < c); // true
console.log(c > 20); // false
console.log((a < b && b < c) || c > 20); // true
Testing logical conditions can be done using unit tests. For example, using a testing framework like Jest:
const canEnterClub = require('./canEnterClub');
test('Person can enter the club', () => {
expect(canEnterClub(21, false)).toBe(true);
expect(canEnterClub(20, true)).toBe(true);
expect(canEnterClub(19, false)).toBe(false);
});
When approaching problems involving logical operators:
Mastering logical operators is crucial for making complex decisions in your code. By understanding how to combine and evaluate conditions, you can write more efficient and effective programs. Practice regularly to improve your skills and explore more advanced applications.
For further reading and practice, check out these resources: