Далее на странице...
Продолжается практическая работа с кодом JavaScript.
Код из предыдущей задачи будет оптимизироваться и дорабатываться при помощи функций.
Первая часть задания не требует самостоятельного решения и заключается в оптимизации кода. При этом, при ответе на 1-ый вопрос будет добавлена проверка на НЕ число с использованием функции isNaN.
Пункты №2 и №3 задания желательно выполнить самостоятельно.
Условие задачи:
1) Оптимизация кода
2) Создать функцию showMyDB, которая будет проверять свойство privat. Если стоит в позиции false (значит база данных НЕ приватная/частная/скрытая) - выводит в консоль главный объект программы.
3) Создать функцию writeYourGenres в которой пользователь будет 3 раза отвечать на вопрос "Ваш любимый жанр под номером ${номер по порядку}". Каждый ответ записывается в массив данных genres
1-я часть задания - Оптимизация кода
Оптимизация этого кода - используем функции.
// Объявляем переменную numberOfFilms глобально, чтобы работать с ней внутри функции
let numberOfFilms;
// 1. Функция для проверки введенных данных при ответе на 1-ый вопрос
function start(){
numberOfFilms = +prompt('Сколько фильмов вы уже посмотрели?');
/* Проверка: на пустое поле для ввода ИЛИ на кнопку Отмена ИЛИ
на НЕ число, то снова задаем вопрос... */
while(numberOfFilms == '' || numberOfFilms == null || isNaN(numberOfFilms)){
numberOfFilms = +prompt('Сколько фильмов вы уже посмотрели?');
}
}
start(); // Вызов функции
// --------- Главный объект программы ---------
const personalMovieDB = {
count: numberOfFilms,
movies: {},
actors: {},
genres: [],
private: false
};
// 2. Функция заносит в главный объект программы информацию о фильмах
function rememberMyFilms(){
for (let i = 0; i < 2; i++) {
const a = prompt('Один из последних просмотренных фильмов?'),
b = prompt('На сколько оцените его?');
/* Проверка на пустое поле для ввода ИЛИ на кнопку Отмена ИЛИ на количество символов */
if(a != '' && b != '' && a != null && b != null && a.length < 50) {
personalMovieDB.movies[a] = b;
console.log('done');
}
else{
console.log('error');
i--;
}
}
}
rememberMyFilms(); // Вызов функции
// 3. Функция анализа уровня Киномании
function detectPersonalLevel(){
if (personalMovieDB.count < 10) {
console.log('Просмотрено довольно мало фильмов');
} else if (personalMovieDB.count > 10 && personalMovieDB.count < 30) {
console.log('Вы классический зритель');
} else if (personalMovieDB.count > 30) {
console.log('Вы киноман');
} else {
console.log('Произошла ошибка');
}
}
detectPersonalLevel(); // Вызов функции
console.log(personalMovieDB); // Выводим главный объект программы
Результат - 1-я часть задания
2-я и 3-я часть задания
Выполнение 2-ой и 3-ей части задания - смотрите функции №4 и №5.
/* Объявляем переменную numberOfFilms глобально, чтобы работать с ней внутри функции */
let numberOfFilms;
// 1. Функция для проверки введенных данных при ответе на 1-ый вопрос
function start(){
numberOfFilms = +prompt('Сколько фильмов вы уже посмотрели?');
/* Проверка: на пустое поле для ввода ИЛИ на кнопку Отмена ИЛИ
на НЕ число, то снова задаем вопрос... */
while(numberOfFilms == '' || numberOfFilms == null || isNaN(numberOfFilms)){
numberOfFilms = +prompt('Сколько фильмов вы уже посмотрели?');
}
}
start(); // Вызов функции
// --------- Главный объект программы ---------
const personalMovieDB = {
count: numberOfFilms,
movies: {},
actors: {},
genres: [],
private: false
};
// 2. Функция заносит в главный объект программы информацию о фильмах
function rememberMyFilms(){
for (let i = 0; i < 2; i++) {
const a = prompt('Один из последних просмотренных фильмов?'),
b = prompt('На сколько оцените его?');
/* Проверка на пустое поле для ввода ИЛИ на кнопку Отмена ИЛИ на количество символов */
if(a != '' && b != '' && a != null && b != null && a.length < 50) {
personalMovieDB.movies[a] = b;
console.log('done');
}
else{
console.log('error');
i--;
}
}
}
rememberMyFilms(); // Вызов функции
// 3. Функция анализа уровня Киномании
function detectPersonalLevel(){
if (personalMovieDB.count < 10) {
console.log('Просмотрено довольно мало фильмов');
} else if (personalMovieDB.count > 10 && personalMovieDB.count < 30) {
console.log('Вы классический зритель');
} else if (personalMovieDB.count > 30) {
console.log('Вы киноман');
} else {
console.log('Произошла ошибка');
}
}
detectPersonalLevel(); // Вызов функции
// 4. Функция Жанров - 3-я часть задания
function writeYourGenres(){
for(let i = 1; i <= 3; i++){
const genres = prompt(`Ваш любимый жанр номер ${i}`);
personalMovieDB.genres[i - 1] = genres;
// [i - 1], т.к. 1-ый элемент массива имеет Индекс 0
}
}
writeYourGenres(); // Вызов функции
// 5. Функция проверки приватности БД - 2-я часть задания
function showMyDB(){
if(personalMovieDB.private == false){
console.log(personalMovieDB); // Выводим главный объект программы
}
}
showMyDB(); // Вызов функции
Результат - 2-я и 3-я часть задания
2-я и 3-я часть задания - Оптимизация кода
Оптимизируем и сократим код для функций из 2-ой и 3-ей части задания.
// 4. Функция Жанров - 3-я часть задания
function writeYourGenres(){
for(let i = 1; i <= 3; i++){
personalMovieDB.genres[i - 1] = prompt(`Ваш любимый жанр номер ${i}`);
}
}
writeYourGenres(); // Вызов функции
// 5. Функция проверки приватности БД - 2-я часть задания
function showMyDB(hidden){
if(!hidden){
console.log(personalMovieDB); // Выводим главный объект программы
}
}
showMyDB(personalMovieDB.private); // Вызов функции
Чего коснулись изменения в коде?
1) В решении для 3-ей части задания не обязательно использовать переменную genres, как это было в предыдущем исполнении. Здесь информация введенная пользователем сразу заносится в массив:
personalMovieDB.genres[i - 1] = prompt(`Ваш любимый жанр номер ${i}`);.
2) В решении для 2-ой части задания в функцию showMyDB() добавлен аргумент hidden, значением которого является свойство private объекта personalMovieDB. Как вы помните: аргументы функции указываются при объявлении функции в круглых скобках.
При значении false свойства private в условии if(!hidden) будет истина - true. И тогда будет выполняться действие в фигурных скобках:
console.log(personalMovieDB); --> выводится главный объект программы.