«Единственный способ творить великие дела – это любить то, что ты делаешь»
JavaScript


Игра на «Морской Бой» на JavaScript: Простая Игра и Игра для Двоих


Продолжается практическая работа с кодом 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); --> выводится главный объект программы.





Отзывы и комментарии:

Комментариев нет...

Оставить отзыв:

Ваше Имя:

Текст комментария:

Ответьте на вопрос:

Сколько дней в Високосном году?


Рунет - Часть 2
Практика часть 3 - Используем функции
80
Условия if else - Конструкция switch case - Тернарный оператор
68
Циклы while и for - Операторы break и continue
86
Практика часть 2 – Циклы и Условия
92
Объявление функций – Стрелочные функции ES6
104
Методы и свойства строк и чисел - Метод substr - Индекс строки
37
Что такое callback-функция - Аргумент другой функции
53
Свойства и методы объектов - Деструктуризация объектов ES6
66
Методы массивов - Перебор элементов массива - Псевдомассивы
75
Передача данных по ссылке и по значению – Клонирование объекта
52
Метод assign() – Копирование исходных объектов в целевой объект
41
Копирование массивов - Оператор spread
64
Прототипное Программирование - Прототип и Экземпляр Объекта
43
Свойство proto - Методы Object.create и Object.setPrototypeOf
64
Практика часть 4 - Используем функции как методы объекта
7
Помощь сайту
Yandex-деньги/Ю-Money
410011236419322
Перевод на карту СБ
4276 1300 1671 5819
WebMoney
R711879515665 Z861169301432

Тематические публикации
Популярные заметки
Последние заметки