En este último ejercicio vamos a trabajar con clases en Javascript, para ello vamos a crear una clase denominada Peliculas, que englobará tanto propiedades como métodos, y será una pequeña aplicación para mostrar información acerca de películas. Veamos lo que va a contener dicha clase:
- La clase recibirá un objeto al momento de instanciarse con los siguientes datos:
- id de la película en IMDB
- Título
- Director
- Año de estreno
- País de origen
- Género
- Calificación
- Todos los datos del objeto son obligatorios
- Hay que validar que el IMDB tenga 9 caracteres, los 2 primeros son letras y el resto números
- El título no debe rebasar los 100 caracteres
- El director no debe rebasar los 50 caracteres
- El año de estreno es un número entero de 4 dígitos
- El país o países son introducidos en forma de array
- Los géneros, igualmente introducidos en forma de array
- Dichos géneros deben estar dentro de los géneros aceptados
- Crear método estático que devuelva los géneros aceptados
- La calificación sea un número entre 1 y 10, pudiendo ser decimal de una posición
- Método que devuelva toda la ficha técnica de la película
- A partir de un array con la información de 3 películas, generar 3 instancias de la clase de forma automatizada, e imprimir la ficha técnica de cada película
Los géneros aceptados son los siguientes: Action, Adult, Adventure, Animation, Biography, Comedy, Crime, Documentary, Drama, Family, Fantasy, Film Noir, Game-Show, History, Horror, Musical, Music, Mystery, News, Reality-TV, Romance, Sci-Fi, Short, Sport, Talk-Show, Thriller, War, Western
Este es el ejm completo
Ejm
<!DOCTYPE html> <html lang="es"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Clase Películas</title> </head> <body> <h1>Clase Películas</h1> <script> class Pelicula { constructor({ id, titulo, director, estreno, pais, generos, calificacion, }) { this.id = id; this.titulo = titulo; this.director = director; this.estreno = estreno; this.pais = pais; this.generos = generos; this.calificacion = calificacion; this.validarIMDB(id); this.validarTitulo(titulo); this.validarDirector(director); this.validarEstreno(estreno); this.validarPais(pais); this.validarGeneros(generos); this.validarCalificacion(calificacion); } // Atributo estático obtenedor static get listaGeneros() { return [ "Action", "Adult", "Adventure", "Animation", "Biography", "Comedy", "Crime", "Documentary", "Drama", "Family", "Fantasy", "Film Noir", "Game-Show", "History", "Horror", "Musical", "Music", "Mystery", "News", "Reality-TV", "Romance", "Sci-Fi", "Short", "Sport", "Talk-Show", "Thriller", "War", "Western", ]; } // Método estático que consume el atributo estático listaGeneros static generosAceptados() { return console.log( `Los géneros aceptados son: ${Pelicula.listaGeneros.join(", ")}` ); } // Función que valida cadenas validarCadena(propiedad, valor) { if (!valor) return console.log(`${propiedad} "${valor}" está vacío`); if (typeof valor !== "string") return console.log( `${propiedad} "${valor}" ingresado no es una cadena de texto` ); // Si todo va bien le decimos que es true (todo ok) return true; } // Función que valida cadena y longitud de la misma validarLongitudCadena(propiedad, valor, longitud) { if (valor.length > longitud) return console.log( `${propiedad} "${valor}" excede el número de caracteres permitidos (${longitud}).` ); // Si todo va bien le decimos que es true (todo ok) return true; } // Función para validar número validarNumero(propiedad, valor) { if (!valor) return console.log(`${propiedad} "${valor}" está vacío`); if (typeof valor !== "number") return console.log( `${propiedad} "${valor}" ingresado no es un número` ); // Si todo ok, devuelve true return true; } // Función que valida arrays validarArray(propiedad, valor) { if (!valor) return console.log(`${propiedad} "${valor}" está vacío`); if (!(valor instanceof Array)) return console.log( `${propiedad} "${valor}" ingresado no es un array` ); if (valor.length === 0) return console.log(`${propiedad} "${valor}" no tiene datos`); for (let cadena of valor) { if (typeof cadena !== "string") return console.log( `El valor "${cadena}" ingresado no es una cadena de texto` ); } // Si todo ok, devuelve true return true; } // Función que valida el IMDB validarIMDB(id) { if (this.validarCadena("IMDB id", id)) { if (!/^([a-z]){2}([0-9]){7}$/.test(id)) { return console.log(`IMDB id "${id}" no es válido, debe tener 9 caracteres , los 2 primeros letras minúsculas, los 7 restantes números`); } } } // Función que valida el título validarTitulo(titulo) { if (this.validarCadena("Título", titulo)) { this.validarLongitudCadena("Título", titulo, 100); } } // Función que valida el director validarDirector(director) { if (this.validarCadena("Director", director)) { this.validarLongitudCadena("Director", director, 50); } } // Función que valida un dígito de 4 dígitos validarEstreno(estreno) { if (this.validarNumero("Año de estreno", estreno)) { if (!/^([0-9]){4}$/.test(estreno)) { return console.log( `Año de estreno "${estreno}" no es válido, debe tener 4 dígitos.` ); } } } // Función que valida el país validarPais(pais) { this.validarArray("País", pais); } // Función que valida los géneros validarGeneros(generos) { if (this.validarArray("Géneros", generos)) { for (let genero of generos) { // console.log(genero, Pelicula.listaGeneros.includes(genero)); if (!Pelicula.listaGeneros.includes(genero)) { console.log(`Género(s) incorrecto(s) "${generos.join(", ")}"`); Pelicula.generosAceptados(); } } } } // Función que valida la calificación validarCalificacion(calificacion) { if (this.validarNumero("Calificación", calificacion)) { return calificacion < 0 || calificacion > 10 ? console.log( "La calificación tiene que estar en un rango entre 0 y 10" ) : (this.calificacion = calificacion.toFixed(1)); } } // Función que muestra la ficha técnica de una película fichaTecnica() { console.log( `Ficha técnica:\nTítulo: ${this.titulo}\nDirector: ${ this.director }\nAño: ${this.estreno}\nPaís: ${this.pais.join( " - " )}\nGéneros: ${this.generos.join(", ")}\nCalificación: ${ this.calificacion }\nIMDB id: ${this.id}` ); } } // Pelicula.generosAceptados(); const pelicula = new Pelicula({ id: "tt1234567", titulo: "Título de la película", director: "Director de la película", estreno: 1987, pais: ["España", "Francia"], generos: ["Sport", "Comedy"], calificacion: 9, }); pelicula.fichaTecnica(); const misPeliculas = [ { id: "tt01234567", titulo: "Mazapan", director: "Almodovar", estreno: 1984, pais: ["España"], generos: ["Horror"], calificacion: 2, id: "tt1234567", }, { id: "tt01234567", titulo: "Hola", director: "Almodovar", estreno: 1984, pais: ["España"], generos: ["Horror"], calificacion: 2, id: "tt1234567", }, { id: "tt01234567", titulo: "Adios", director: "Almodovar", estreno: 1984, pais: ["España"], generos: ["Horror"], calificacion: 2, id: "tt1234567", }, ]; misPeliculas.forEach((el) => new Pelicula(el).fichaTecnica()); </script> </body> </html>