«Единственный способ творить великие дела – это любить то, что ты делаешь»
JavaScript
site.komp36.ru Создание сайтов. Твой сайт фотографа Что есть на сайте? Несколько фото галерей: свадебная, постановочная съемка, love story, детские фото. Договор на фотосъемку, прайс-лист.
site.komp36.ru Продающий лендинг. Создание сайтов Установка и продажа окон, установка дверей, перегородок. Одностраничный продающий сайт. Заявки прямо с сайта
site.komp36.ru Универсальный лендинг. Выбрать тему для сайта! Лендинг адаптируется под любую тему: ремонт, отделка, продажа окон, дверей, лестниц, мебели и многое другое
site.komp36.ru Создание сайтов. Сайт сервисного центра. Сайт компании. Новости и отзывы. Несколько прайс-листов – под каждый отдельная страница. Возможность размещения статей


Игра «Морской Бой» на 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); --> выводится главный объект программы.

Читайте также...

site.komp36.ruТвой сайт фотографа. Создание сайтов Что есть на сайте? Несколько фото галерей: свадебная, постановочная съемка, love story, детские фото. Договор на фотосъемку, прайс-лист.
site.komp36.ru Акция Как начать свое дело? Свой сайт «Укладка плитки» 9 000 руб. Лендинг адаптируется под любой вид отделочных работ, продажу товаров или услуг. Сайт поможет найти новых клиентов
site.komp36.ru Акция Продающий лендинг «Установка и продажа окон» 9 000 руб. Одностраничный продающий сайт. Установка и продажа окон, установка дверей, перегородок. Заявки прямо с сайта

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

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

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

Ваше Имя:

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

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

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


Рунет - Часть 2
Практика часть 3 - Используем функции
1514
Условия if else - Конструкция switch case - Тернарный оператор
714
Циклы while и for - Операторы break и continue
943
Практика часть 2 – Циклы и Условия
4567
Объявление функций – Стрелочные функции ES6
1147
Методы и свойства строк и чисел - Метод substr - Индекс строки
566
Что такое callback-функция - Аргумент другой функции
2218
Свойства и методы объектов - Деструктуризация объектов ES6
2877
Методы массивов - Перебор элементов массива - Псевдомассивы
2176
Передача данных по ссылке и по значению – Клонирование объекта
532
Метод assign() – Копирование исходных объектов в целевой объект
589
Копирование массивов - Оператор spread
2022
Прототипное Программирование - Прототип и Экземпляр Объекта
522
Свойство proto - Методы Object.create и Object.setPrototypeOf
722
Практика часть 4 - Используем функции как методы объекта
10989
Тематические публикации
site.komp36.ru Как начать свое дело? Свой сайт «Укладка плитки» 9 000 руб. Лендинг адаптируется под любой вид отделочных работ, продажу товаров или услуг. Сайт поможет найти новых клиентов
site.komp36.ru Продающий лендинг «Установка и продажа окон» 9 000 руб. Одностраничный продающий сайт. Установка и продажа окон, установка дверей, перегородок. Заявки прямо с сайта
Популярные заметки
Последние заметки