Skip to content

Commit 1bfa00a

Browse files
authored
Merge pull request #807 from hexlet-basics/update-45-logic
feat(45-logic): adapt content from Python version
2 parents 3201a15 + 8afd449 commit 1bfa00a

6 files changed

Lines changed: 49 additions & 96 deletions

File tree

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
// BEGIN
2-
const isPensioner = (age) => age >= 60;
2+
function isPensioner(age) {
3+
return age >= 60;
4+
}
35
// END
46

57
export default isPensioner;
Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
1-
2-
Напишите функцию `isPensioner()`, которая принимает один параметр — возраст человека, и проверяет, является ли он пенсионным. Пенсионером считается человек, достигший возраста 60 лет и больше.
3-
4-
Примеры вызова:
1+
Напишите функцию `isPensioner(age)`, которая возвращает `true`, если возраст `age` равен 60 или больше, и `false` в противном случае.
52

63
```javascript
7-
isPensioner(75); // true
8-
isPensioner(18); // false
4+
isPensioner(65); // => true
5+
isPensioner(30); // => false
96
```
Lines changed: 22 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,34 @@
1+
В JavaScript есть специальный тип данных — **boolean** (булев тип). Он содержит только два значения: `true` (истина) и `false` (ложь).
12

2-
Кроме арифметических операций со школы нам известны операции сравнения. Например, `5 > 4`. Это звучит как вопрос: «5 больше 4?». В данном случае ответ «да». В других случаях ответом может быть «нет», например, для `3 < 1`.
3+
## Операторы сравнения
34

4-
Операции сравнения не имеют привязки к числам. Сравнивать можно практически всё что угодно, например, строки. Каждый раз, когда мы входим на какой-то сайт, внутри происходит сравнение введенных логина и пароля с теми, какие есть в базе. И только если они есть, нас пускают внутрь (авторизируют).
5-
6-
Языки программирования адаптировали все математические операции сравнения практически в неизменном виде. Единственное серьезное отличие – операторы равенства и неравенства. В математике для этого используется обычное равно `=`, но в программировании такое встречается не часто. Во многих языках символ `=` используется для присваивания значений переменным, поэтому для сравнения взяли `==` или `===`.
7-
8-
Список операций сравнения в JavaScript:
9-
10-
* `<` меньше
11-
* `<=` меньше или равно
12-
* `>` больше
13-
* `>=` больше или равно
14-
* `===` равно
15-
* `!==` не равно
16-
17-
_Небольшая ремарка: для равенства и неравенства также существуют операторы `==` и `!=`, которые мы не будем использовать из-за потенциальной опасности. Мы поговорим об этом в будущих уроках._
18-
19-
Логическая операция типа `5 > 4` или `password === text` — это выражение, и его результат — специальное значение `true` («истина») или `false` («ложь»). Это новый для нас тип данных — boolean. Он содержит всего лишь два этих значения.
5+
Операторы сравнения возвращают булево значение:
206

217
```javascript
22-
const result = 5 > 4;
23-
console.log(result); // => true
24-
console.log('one' !== 'one'); // => false
8+
console.log(5 > 3); // => true
9+
console.log(5 < 3); // => false
10+
console.log(5 === 5); // => true
11+
console.log(5 !== 3); // => true
2512
```
2613

27-
Наряду со строками (string), целыми и рациональными числами (number), логический тип (boolean) — это один из примитивных типов данных в JavaScript.
28-
29-
---
30-
31-
Попробуем написать примитивную функцию, которая принимает на вход возраст ребенка и определяет, младенец ли он. Младенцами считаются дети до года:
32-
33-
```javascript
34-
const isInfant = (age) => age < 1;
35-
```
14+
| Оператор | Смысл |
15+
|----------|-------|
16+
| `>` | больше |
17+
| `<` | меньше |
18+
| `>=` | больше или равно |
19+
| `<=` | меньше или равно |
20+
| `===` | строго равно |
21+
| `!==` | строго не равно |
3622

37-
Пользуемся тем фактом, что любая операция — это выражение, поэтому единственной строчкой функции пишем «вернуть то значение, которое получится в результате сравнения `age < 1`».
23+
## Функции, возвращающие boolean
3824

39-
В зависимости от пришедшего аргумента, сравнение будет либо истинным (`true`), либо ложным (`false`), и `return` вернёт этот результат.
25+
Функции, возвращающие `true` или `false`, называют **предикатами**. По соглашению их называют с приставкой `is`, `has`, `can`:
4026

4127
```javascript
42-
const isInfant = (age) => age < 1;
43-
44-
console.log(isInfant(3));
45-
```
28+
function isPensioner(age) {
29+
return age >= 60;
30+
}
4631

47-
```textfalse```
48-
49-
А теперь проверим ребенка, которому полгода:
50-
51-
```javascript
52-
console.log(isInfant(0.5));
32+
console.log(isPensioner(65)); // => true
33+
console.log(isPensioner(30)); // => false
5334
```
54-
55-
```texttrue```
Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
1-
2-
Реализуйте функцию, которая проверяет формат указанного телефона. Если телефон начинается с *+*, значит это международный формат.
1+
Напишите функцию `isInternationalPhone(phone)`, которая принимает строку с номером телефона и возвращает `true`, если номер начинается с символа `'+'`, и `false` в противном случае.
32

43
```javascript
5-
isInternationalPhone('89602223423'); // false
6-
isInternationalPhone('+79602223423'); // true
4+
isInternationalPhone('+7 (999) 456-78-90'); // => true
5+
isInternationalPhone('8 (999) 456-78-90'); // => false
76
```
Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,12 @@
1+
Напишите функцию `isLeapYear(year)`, которая возвращает `true`, если год високосный.
12

2-
Реализуйте функцию `isLeapYear()`, которая определяет, является ли год високосным или нет. Год будет високосным, если он кратен (то есть делится без остатка) 400 или он одновременно кратен 4 и не кратен 100. Как видите, в определении уже заложена вся необходимая логика, осталось только переложить её на код:
3+
Год является високосным, если:
4+
- он делится на 4, **но не** на 100, **или**
5+
- он делится на 400.
36

47
```javascript
5-
isLeapYear(2018); // false
6-
isLeapYear(2017); // false
7-
isLeapYear(2016); // true
8-
```
9-
10-
Кратность можно проверять так:
11-
12-
```javascript
13-
// % - возвращает остаток от деления левого операнда на правый
14-
// Проверяем что number кратен 10
15-
number % 10 === 0
16-
17-
// Проверяем что number не кратен 10
18-
number % 10 !== 0
8+
isLeapYear(2000); // => true
9+
isLeapYear(1900); // => false
10+
isLeapYear(2024); // => true
11+
isLeapYear(2023); // => false
1912
```
Lines changed: 10 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,13 @@
1+
Напишите две функции:
12

2-
В этом уроке вам нужно будет реализовать две функции `isPalindrome()` и `isNotPalindrome()`
3+
1. `isPalindrome(str)` — возвращает `true`, если строка является палиндромом (читается одинаково в обоих направлениях).
4+
2. `isNotPalindrome(str)` — возвращает `true`, если строка **не** является палиндромом.
35

4-
1. Функция `isPalindrome()` определяет, является ли слово палиндромом или нет. Палиндром это слово, которое читается одинаково в обоих направлениях.
6+
```javascript
7+
isPalindrome('level'); // => true
8+
isPalindrome('hello'); // => false
9+
isNotPalindrome('level'); // => false
10+
isNotPalindrome('hello'); // => true
11+
```
512

6-
```javascript
7-
isPalindrome('шалаш'); // true
8-
isPalindrome('ага'); // true
9-
isPalindrome('хекслет'); // false
10-
11-
// Слова в функцию могут быть переданы в любом регистре
12-
// Поэтому сначала нужно привести слово в нижний регистр word.toLowerCase()
13-
isPalindrome('Ага'); // true
14-
```
15-
16-
Для определения палиндрома необходимо перевернуть строку и сравнить ее с исходной. Для этого воспользуйтесь функцией `reverse()`
17-
18-
```javascript
19-
reverse('мама'); // амам
20-
```
21-
22-
2. Функция `isNotPalindrome()` проверяет что слово НЕ является палиндромом:
23-
24-
```javascript
25-
isNotPalindrome('шалаш'); // false
26-
isNotPalindrome('ага'); // false
27-
isNotPalindrome('хекслет'); // true
28-
```
29-
30-
Для этого, вызовите функцию `isPalindrome()` внутри `isNotPalindrome()` и примените отрицание.
13+
Используйте метод `.split('')`, `.reverse()`, `.join('')` для разворота строки.

0 commit comments

Comments
 (0)