Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 05 de Abril 2016, 16:06

Título: JavaScript calcular el intervalo de tiempo que falta para una fecha CU01167E
Publicado por: Dimitar Stefanov en 05 de Abril 2016, 16:06
Buenas tardes. Con este hilo propondré una posible solución del ejercicio de la entrega CU01167E del curso JavaScript desde cero.

Citar
EJERCICIO

Analiza este código JavaScript y responde a las preguntas:

Código: [Seleccionar]
<!DOCTYPE html>

<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">

<script type="text/javascript">

var target_date = new Date("Jan 1, 2089").getTime();

var days, hours, minutes, seconds;

function ejemplo() {

var countdown = document.getElementById("countdown");

setInterval(function () {

    var current_date = new Date().getTime();

    var seconds_left = (target_date - current_date) / 1000;

    days = parseInt(seconds_left / 86400);

    seconds_left = seconds_left % 86400;

    hours = parseInt(seconds_left / 3600);

    seconds_left = seconds_left % 3600;

    minutes = parseInt(seconds_left / 60);

    seconds = parseInt(seconds_left % 60);

    countdown.innerHTML = 'Para el 1 de enero de 2089 faltan '  +days+ ' días, ' + hours + " horas, "

    + minutes + " minutos, " + seconds + " segundos";

                }, 1000);

}

</script>

</head>

<body onload="ejemplo()" >

<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3>

<span id="countdown"></span></div>
</body></html>

Citar
a) Haz una lista de las variables que intervienen indicando para cada variable cuál es su nombre, cuál es su tipo, cuál es su cometido y si está definida como variable global o variable local.
Ejemplo: la variable target_date es de tipo Date, su cometido es almacenar la fecha futura respecto de la cual el script va a mostrar los días, horas, minutos y segundos que faltan para alcanzar dicha fecha, y está definida como variable global.

1) La variable days es de tipo Number, su cometido es almacenar los días que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

2) La variable hours es de tipo Number, su cometido es almacenar las horas que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

3) La variable minutes es de tipo Number, su cometido es almacenar los minutos que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

4) La variable seconds es de tipo Number, su cometido es almacenar los segundos que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.

5) La variable current_date es de tipo Date, su cometido es almacenar la fecha actual (en milisegundos), y está definida como variable local.

6) La variable seconds_left es de tipo Number, su cometido es almacenar los segundos restantes después de sacar los segundos que forman los días, horas y minutos. El resto son los segundos que quedan hasta la fecha futura. Está definida como variable local.

7) La variable countdown es de tipo Object, su cometido es acceder al elemento span. Está definida como variable global.

Citar
b) ¿Qué ocurre si definimos la variable current_date en el ámbito global en vez de dentro de la función? ¿Por qué ocurre esto?


Si definimos la variable current_date como variable global sólo se almacenará una vez la fecha actual (y el tiempo). De esta manera, al no llamarse continuamente mediante la función setInterval(funcion(){..},1000), no se almacenará cada segundo el tiempo y sólo nos mostrará el tiempo que queda hasta la fecha futura cuando carguemos la página, solamente una vez.

Citar
c) ¿Podríamos definir todas las variables como locales a la función y prescindir de las variables globales? Si se pudiera hacer, ¿crees que sería positivo para el diseño del código, su mantenimiento y ampliabilidad, o por el contrario, que sería negativo?

Sí se pondrán definir todas las variables como locales. Normalmente, en programación, cada función tiene su cometido y si definimos todas las variables como locales la función hará dos cometidos a la vez. Lo negativo sería que cargaremos mucho la memoria del compilador, porque cada vez que se invoque la función creará las variables, cuando podemos prescindir de ello y las variables que no se tengan que cambiar definirlas como globales.

Citar
d) ¿Qué métodos de los empleados en el código devuelven valores en milisegundos?

Los métodos que devuelven los valores en milisegundos son: .getTime(). Tanto en la variable global target_date como en la variable local current_date.

Gracias.
Título: Re:JavaScript calcular el intervalo de tiempo que falta para una fecha CU01167E
Publicado por: César Krall en 07 de Abril 2016, 13:40
Hola! En general bien

Aspectos a tener en cuenta:

Esto no se entiende: si definimos todas las variables como locales la función hará dos cometidos a la vez.

Esto no es correcto: Lo negativo sería que cargaremos mucho la memoria del compilador. Con JavaScript no tenemos un compilador, tenemos un intérprete que es el propio navegador. JavaScript no es un lenguaje compilado, sino interpretado. Puede encontrarse información en internet sobre esto.

Saludos!
Título: Re:JavaScript calcular el intervalo de tiempo que falta para una fecha CU01167E
Publicado por: Dimitar Stefanov en 08 de Abril 2016, 09:35
Buenos días, César.

Gracias por corregir el ejercicio.

Tienes razón, es un lenguaje interpretado, no compilado. Quería decir que está consumiendo muchos recursos de la memoría del navegador.

Sobre que una función hace dos cometidos, quería decir que normalmente en programación cada función tiene su objetivo, meta, cometido. Cuando hacemos un código, habitualmente, intentamos que cada función tenga su objetivo, para así, después poder reutilizarse el código de dicha función si lo necesitamos. Si una función hace dos o más objetivos, posteriormente es difícil que necesitemos en otro caso justo estos dos objetivos. Por lo tanto, es mejor cada función con un cometido.

Gracias