Skip to content

Latest commit

 

History

History
126 lines (105 loc) · 11.6 KB

fundamentos_js_II.org

File metadata and controls

126 lines (105 loc) · 11.6 KB

Fundamentos de JavaScript II

El objetivo de esta práctica es seguir profundizando en los conceptos fundamentales de JavaScript. En concreto, trataremos sobre los arrays y funciones avanzadas.

Repositorio de la práctica

El repositorio base de la práctica está disponible en: https://github.com/pedroprieto/practica_dwec_gestor_presupuesto

Se supone que ya está configurado el repositorio personal y el remoto secundario (profesor). Si no es así, revisa las instrucciones de las prácticas anteriores. En el apartado de Preparación se indica cómo proceder.

Requisitos de software

Para poder realizar esta práctica y que funcione adecuadamente el entorno de test será necesario instalar el siguiente software en el equipo:

Desarrollo guiado por test

Para realizar la práctica se seguirán los principios del Desarrollo Guiado por Test. Para ello se proporciona en el repositorio una serie de ficheros que permiten ejecutar tests. Dichos tests comprobarán que el programa cumple con algunos de los requisitos de la práctica.

El repositorio se ha configurado para que se ejecuten los tests automáticamente en la nube de GitHub cuando se realice un push o una pull request. Para ello se hará uso del servicio GitHub Actions.

Preparación

  1. Instalar los requisitos de software indicados
  2. Abrir un terminal
  3. Situarse en la carpeta del repositorio personal de la práctica
  4. Incorporar a tu repositorio personal los cambios realizados por el profesor correspondientes a los archivos de esta práctica. Para ello hay que ejecutar:
    git pull profesor master
        
  5. Este comando descarga los cambios que ha realizado el profesor en el repositorio base y los integra en tu repositorio personal. Tras realizar este paso, seguramente git abra el editor configurado por defecto para que introduzcas un mensaje para crear un nuevo commit que integre tus cambios y los cambios del profesor. Debes introducir el texto y guardar los cambios.
  6. En principio no deben producirse conflictos. En caso de que se produzcan (por ejemplo, porque has editado el fichero .gitignore y yo también porque lo exigía la práctica), resuélvelos y notifícamelo a través de un Issue.
  7. Ejecuta el comando git push para subir los cambios a tu repositorio personal (el remoto principal) en GitHub y que queden guardados ahí también.
  8. Ejecutar el comando npm install. Este comando instalará todas las librerías de Node necesarias para ejecutar los tests. Dichas librerías se guardarán en una carpeta con nombre node_modules dentro del repositorio. Nótese que dicha carpeta está excluida del repositorio en el archivo .gitignore.
  9. Ejecutar el comando npm run test2 para lanzar los tests de esta práctica. Este comando podrá ejecutarse tantas veces como sea necesario. Por pantalla se mostrarán los tests que se pasan y los que no, de manera que se tendrá información sobre las acciones que hay que realizar. Los tests también se ejecutarán automáticamente en GitHub Actions al subir los cambios al repositorio y al realizar la pull request.
  10. Si se está utilizando VS Code se puede lanzar la ejecución de los tests desde el propio editor y utilizar breakpoints para interrumpir la ejecución y depurar el programa. Las configuraciones de lanzamiento creadas para ello están en el archivo .vscode/launch.json. ./imagenes/depurar.png
  11. Opcionalmente (recomendable), ejecutar el comando npm test para lanzar todos los tests presentes en el repositorio. Se deberá comprobar que se pasan los tests de las prácticas anteriores a la que se esté realizando. Lógicamente, si el repositorio incluye los tests de prácticas posteriores a la que se esté realizando, dichos tests no se pasarán (ya que el trabajo está todavía por hacer). Este último caso puede darse si la persona no está realizando la práctica propuesta en la semana actual (va con “retraso”, por así decirlo). En GitHub Actions se ejecutarán todos los tests en tareas independientes: así se podrá comprobar si el test de la práctica que se está realizando se ha pasado.

Tareas a realizar

Lectura

Lee atentamente los siguientes artículos y sus correspondientes subsecciones en caso de que las tengan:

Fichero de la aplicación

Utilizaremos el fichero llamado gestionPresupuesto.js en la carpeta js del repositorio. A no ser que se indique lo contrario, todo el código que se cree deberá guardarse en este fichero.

Variables globales

Añade las siguientes variables globales:

  • gastos - Almacenará el listado de gastos que vaya introduciendo el usuario. Inicialmente contendrá un array vacío.
  • idGasto - Se utilizará para almacenar el identificador actual de cada gasto que se vaya añadiendo. Su valor inicial será 0. Se irá incrementando con cada gasto que se añada.

Modificación de export

Añade las funciones listarGastos, anyadirGasto, borrarGasto, calcularTotalGastos y calcularBalance al objeto export del final del fichero.

Define las funciones vacías (sin parámetros y sin cuerpo) en el fichero gestionPresupuesto.js para que los tests no den error de sintaxis y se puedan ir comprobando conforme se vaya avanzando en la práctica.

Funciones

Función listarGastos

Función sin parámetros que devolverá la variable global gastos.

Función CrearGasto

Actualiza la función constructora para que incluya la fecha y las etiquetas (ver apartado de Objeto gasto). Los parámetros adicionales de la función deben ir a continuación de los existentes.

  • Si no se indican los parámetros de etiquetas, se almacenará en la propiedad etiquetas un array vacío.
  • Si no se indica el parámetro fecha, se almacenará en la propiedad fecha la fecha actual.
  • El parámetro fecha deberá ser un string con formato válido que pueda entender la función Date.parse. Si la fecha no es válida (no sigue el formato indicado), se deberá almacenar la fecha actual en su lugar.
  • Tal como se indica en la sección de objeto gasto, la fecha se almacenará en formato timestamp.
  • Las etiquetas se pasarán como una lista de parámetros de número indeterminado.
  • Para añadir las etiquetas se utilizará el método anyadirEtiquetas explicado en la sección de objeto gasto.

Algunos ejemplos de llamadas de función CrearGasto podrían ser:

let gasto1 = new CrearGasto("Gasto 1");
let gasto2 = new CrearGasto("Gasto 2", 23.55);
let gasto3 = new CrearGasto("Gasto 3", 23.55, "2021-10-06T13:10" );
let gasto4 = new CrearGasto("Gasto 4", 23.55, "2021-10-06T13:10", "casa" );
let gasto5 = new CrearGasto("Gasto 5", 23.55, "2021-10-06T13:10", "casa", "supermercado" );
let gasto6 = new CrearGasto("Gasto 6", 23.55, "2021-10-06T13:10", "casa", "supermercado", "comida" );

Función anyadirGasto

Función de 1 parámetro que realizará tres tareas:

  • Añadir al objeto gasto pasado como parámetro una propiedad id cuyo valor será el valor actual de la variable global idGasto.
  • Incrementar el valor de la variable global idGasto.
  • Añadir el objeto gasto pasado como parámetro a la variable global gastos. El gasto se debe añadir al final del array.

Función borrarGasto

Función de 1 parámetro que eliminará de la variable global gastos el objeto gasto cuyo id haya sido pasado como parámetro. Si no existe un gasto con el id proporcionado, no hará nada.

Función calcularTotalGastos

Función sin parámetros que devuelva la suma de todos los gastos creados en la variable global gastos. De momento no los agruparemos por período temporal (lo haremos en sucesivas prácticas).

Función calcularBalance

Función sin paràmetros que devuelva el balance (presupuesto - gastos totales) disponible. De momento no lo obtendremos por período temporal (lo haremos en sucesivas prácticas). Puede utilizar a su vez la función calcularTotalGastos.

Objeto gasto

Propiedades

Añade las siguientes propiedades al objeto gasto:

  • fecha - Almacenará la fecha en que se crea el gasto en forma de timestamp (ver https://es.javascript.info/date#creacion).
  • etiquetas - Almacenará en un array el listado de etiquetas (categorías) asociadas al gasto.

Métodos

Añade o modifica los siguientes métodos del objeto gasto:

  • mostrarGastoCompleto - Función sin parámetros que devuelva el texto multilínea siguiente (ejemplo para un gasto con tres etiquetas):
    Gasto correspondiente a DESCRIPCION con valor VALOR €.
    Fecha: FECHA_EN_FORMATO_LOCALIZADO
    Etiquetas:
     - ETIQUETA 1
     - ETIQUETA 2
     - ETIQUETA 3
        

    Para mostrar la fecha en formato localizado puedes utilizar el método toLocaleString() (referencia de toLocaleString()).

  • actualizarFecha - Función de 1 parámetro que actualizará la propiedad fecha del objeto. Deberá recibir la fecha en formato string que sea entendible por la función Date.parse. Si la fecha no es válida, se dejará sin modificar.
  • anyadirEtiquetas - Función de un número indeterminado de parámetros que añadirá las etiquetas pasadas como parámetro a la propiedad etiquetas del objeto. Deberá comprobar que no se creen duplicados.
  • borrarEtiquetas - Función de un número indeterminado de parámetros que recibirá uno o varios nombres de etiquetas y procederá a eliminarlas (si existen) de la propiedad etiquetas del objeto.

Formato de la entrega

  • Cada persona trabajará en su repositorio personal que habrá creado tras realizar el fork del repositorio base.
  • Todos los archivos de la práctica se guardarán en el repositorio y se subirán a GitHub periódicamente. Es conveniente ir subiendo los cambios aunque no sean definitivos. No se admitirán entregas de tareas que tengan un solo commit.
  • Como mínimo se debe realizar un commit por cada elemento de la lista de tareas a realizar (si es que estas exigen crear código, claro está).
  • Para cualquier tipo de duda o consulta se pueden abrir Issues haciendo referencia al profesor mediante el texto @pedroprieto dentro del texto del Issue. Los issues deben crearse en tu repositorio: si no se muestra la pestaña de Issues puedes activarla en los Settings de tu repositorio.
  • Una vez finalizada la tarea se debe realizar una Pull Request al repositorio base indicando tu nombre y apellidos en el mensaje.