Artículos
Javascript

Factorial Javascript

13/Ago/2015

Hoy, nuestro objetivo es calcular el factorial Javascript de un número. El concepto de factorial, en matemáticas, es una operación que implica multiplicar un número dado por todos los números enteros menores que él hasta llegar a uno. Por convención, se ha establecido que el factorial de cero es uno.

Este resultado se suele representar de forma abreviada utilizando el símbolo de cierre de exclamación (!), que se coloca detrás del número del que estamos calculando su factorial.

Con esta explicación en mente, procedamos a calcular el factorial del número 5, lo cual nos permite poner en práctica y entender mejor el concepto que acabamos de explicar:

5! = 5 * 4 * 3 * 2 * 1

Factorial Javascript sin pensar demasiado…

Rápidamente de la definición podríamos codificar la función factorial Javascript de la siguiente forma, con un bucle decreciente del argumento hasta llegar al 1 o ascendente desde el 1 hasta el número deseado que recibimos como argumento del que queremos calcular el factorial Javascript. El cero no haría falta considerarlo pues el su factorial es 1.

function factorial (n) {
	var total = 1;
	for (i=1; i<=n; i++) {
		total = total * i;
	}
	return total;
}

Observemos la definición

Si leemos bien la definición de factorial como número resultado de multiplicarse con todos los anteriores. En el ejemplo y siendo la multiplicación una operación asociativa (también lo es conmutativa, pero no importa para lo que queremos señalar):

5! = 5 * 4 * 3 * 2 * 1
5! = 5 * (4 * 3 * 2 * 1)

el resultado entre paréntesis es precisamente el cálculo correspondiente al 4!.

5! = 5 * 4!

Observemos el ejemplo y si representamos matemáticamente la ecuación es fácil observar que el factorial de un número es dicho número multiplicado por el factorial del número anterior.

De manera genérica:

caso general:	 n! = n * (n-1)!
caso base: 	    = 1   si n=0

Así que podemos calcular el factorial Javascript como una función recursiva, es decir, que hace referencia a sí misma multiplicando el argumento por el factorial javascript del número precedente:

function factorialRecursivo (n) {
	if (n == 0){
		return 1;
	}
	return n * factorialRecursivo (n-1);
}

Resumen sobre calcular factorial Javascript

Durante nuestro estudio, hemos adquirido la habilidad de calcular el factorial de un número. Este concepto, fundamental en el campo de la matemática, ha sido dominado a través de dos enfoques distintos y valiosos. Primero, hemos implementado un bucle, una técnica comúnmente utilizada en programación y que resulta efectiva para este tipo de cálculos. La otra técnica que hemos practicado es el uso de funciones recursivas, un concepto más avanzado que nos permite resolver problemas de una manera más eficiente y elegante. Ambos métodos nos han proporcionado una comprensión más profunda de cómo manejar este tipo de cálculos matemáticos.

Código Fuente

Descárgate el código fuente de Factorial Javascript
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Factorial Javascript

Vídeos sobre Javascript

Disfruta también de nuestros artículos sobre Javascript en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test Javascript

¿Te atreves a probar tus habilidades y conocimiento en Javascript con nuestro test?

Test Javascript
Artículos
jQuery

Copiar elementos entre listas con jQuery

06/Ago/2015

Hoy vamos a ejercitar de nuevo el manejo de listas con jQuery. Para ello vamos a ver cómo podemos copiar elementos entre listas con jQuery.

El objetivo es conseguir mover elementos de una lista Origen a otra lista Destino. Esta vez moveremos el elemento sobre el que hagamos click en la lista origen y añadiremos ese elemento a la lista destino.

Seguramente todos vamos intuyendo que haremos lo siguiente:

  1. Definir una lista origen y sobre cada uno de sus elementos de forma individual les vincularemos el evento click para que reaccionen ante él.
  2. Pasarle una función que tome el elemento seleccionado y lo mueva a otra lista con Jquery appendTo

Nuestro código HTML que represente a las listas será así:

Lista origen

  1. Elemento 1
  2. Elemento 2
  3. Elemento 3
  4. Elemento 4

Lista destino

Vemos que utilizamos el elemento ol para representar las listas desordenadas, el cual contiene elementos li para representar cada uno de los items de la lista.

Además hemos utilizados dos identificadores «listaOrigen» y «listaDestino» los cuales vamos a emplear desde el código jQuery.

En el código jQuery asignaremos el evento click a cada elemento li de #listaOrigen.

$('#listaOrigen li')

Con el selector ‘#listaOrigen li’ seleccionamos todos los li de #listaOrigen y les vinculamos el evento.

$('#listaOrigen li').on('click', function (){
  ...
});

Fijémonos en que cuando se produce el evento queremos actuar sobre el elemento li seleccionado y no sobre todos. Para eso usamos this. This es la palabra clave reservada de Javascript que hace referencia al objeto que provoca la ejecución; es el objeto en donde el método está siendo invocado.

$('#listaOrigen li').on('click', function (){
  $(this).appendTo('#listaDestino');
});

El método .appendTo() será el que nos permita copiar elementos entre listas con jQuery ya que realiza el movimiento de la listaOrigen a la listaDestino.

Con ese código sería suficiente pero para estar seguros de qué elemento estamos seleccionando con el ratón y que recibirá el evento click resaltaremos en naranja el elemento. Así mismo con jQuery onmouseout haremos que recupere su estilo original en fondo blanco y así deje de estar resaltado.

$('#listaOrigen li').on('mouseover', function (){
  $(this).css('background', 'orange');
});

$('#listaOrigen li').on('mouseout', function (){
  $(this).css('background', 'white');
});

El resultado no parece el esperado. Veamos por qué

Si ejecutamos el código tal cual está observaremos varias cosas. Cuando hacemos click el elemento está resaltado y su estilo está en color de fondo naranja. El elemento se mueve en el DOM pero su CSS permanece. Es decir, no nos ha dado tiempo a ejecutar el mouseout pues en cuanto hagamos click el elemento se mueve a lista Destino y cuando quitemos el ratón de su posición -que es cuando se lanza el evento mouseout -ya tendremos debajo de nosotros a otro elemento de la lista Origen o ninguno si la lista ya se ha quedado sin elementos. Tendremos que pasar de nuevo encima de él en la lista Destino para volver a ejecutar mouseover y mouseout y recuperar su color blanco.

Este comportamiento puede resultar más o menos obvio a algunos. ¿Te lo parece? Aquí es donde debemos darnos cuenta de una cosa. Nosotros habíamos asignado un comportamiento a todos los elementos li de listaOrigen que consistía en ponerse naranja al posicionar el ratón sobre él y recuperar el blanco al irnos. Pero ahora el elemento está en listaDestino. ¿Por qué se ejecuta? Muy sencillo. Los eventos se vinculan sobre los elementos últimos del DOM no sobre la jerarquía completa. Es decir, para vincular inicialmente seleccionamos todos los li de ListaOrigen pero son solo esos li los que tienen el evento. Si se mueven en el DOM y ocupan otras posiciones siguen poseyendo sus comportamientos, textos y estilos y todas sus propiedades.

Además, si hacemos click sobre los elementos en listaDestino se vuelve a ejecutar su función asignada a click y la lista se comporta algo así como la lista circular que definimos en el ejercicio anterior. En realidad, el elemento seleccionado (this) se mueve al final de la lista.

¿Cómo lo solucionamos?

  1. Antes de ejecutar el movimiento del elemento a la lista destino volveremos a ponerle fondo blanco
  2. Queremos que el appendTo que mueve el elemento al final de la listaDestino se ejecute una única vez. Para ello tenemos dos opciones. Una vez usado desvincular el evento llamando a jQuery off. O vincularemos el evento con jQuery.one en lugar de jQuery.on que vincula el evento pero permite que se ejecute una sola vez y sólo una. Una vez en la lista destino li ya no tendrá ese comportamiento.

El código llamando a jQuery.off sería el siguiente:

$(document).on('ready', function(){
  $('#listaOrigen li').on('click', function (){
    $(this).css('background', 'white');
    $(this).appendTo('#listaDestino');
    $(this).off('click');
  });

  $('#listaOrigen li').on('mouseover', function (){
    $(this).css('background', 'red');
  });

  $('#listaOrigen li').on('mouseout', function (){
    $(this).css('background', 'white');
  });
});

Y su queremos ejecutar el jQuery.one sería:

$(document).on('ready', function(){
  $('#listaOrigen li').one('click', function (){
    $(this).css('background', 'white');
    $(this).appendTo('#listaDestino');
  });

  $('#listaOrigen li').on('mouseover', function (){
    $(this).css('background', 'red');
  });

  $('#listaOrigen li').on('mouseout', function (){
    $(this).css('background', 'white');
  });
});

Conclusiones de copiar elementos entre listas con jQuery

En este ejercicio hemos repasado y explicado la vinculación de eventos, a usar el método one, cambiar el estilo de los elementos con la función JQuery css y el uso de eventos click, mouseover y mouseout para explicar cómo copiar elementos entre listas con jQuery.

Código Fuente

Descárgate el código fuente de Copiar elementos entre listas con jQuery
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Artículos
NodeJS

Hola Mundo en Node.js

24/Mar/2013

Todos conocemos a Javascript como un lenguaje que se ejecuta «en cliente». Aprendimos Javascript para programar y dar dinamismo a nuestras primeras páginas HTML y se ha convertido en un lenguaje potentísimo orientado a eventos que ha ido evolucionando con colaboraciones de usuarios de librerías como Modernizr o varios frameworks como jQuery. Ahora veremos como utilizar Javascript para hacer un Hola Mundo en Node.js.

Y es Node.js el que nos cambia el concepto. Node.js es un intérprete de Javascript en el lado servidor, de hecho ejecuta el engine V8 Javascript. Ahora podemos ejecutar Javascript fuera del navegador. Esto aporta algunas ventajas que ya veremos y no son objeto de este artículo. REPL es el entorno de depuración interactivo que proporciona Node.js.

Lo primero que tenemos que hacer es descargarnos e instalarnos Node.js.

Ahora veamos cómo escribir fácilmente el código de bienvenida Hola Mundo en Node.js. Para ello lo que haremos sera crear un fichero que se llame HolaMundo.js. Es decir, nuestro Hola Mundo en Node.js es un fichero Javascript.

Lo que va a hacer el Hola Mundo en Node.js es crear un servidor web sobre el que ejecutemos el código Javascript.

Lo primero será indicar que necesitamos el módulo «http». Para ello lo cargamos mediante el método require.

var http = require('http');

La variable http es la que nos permite crear el servidor mediante el método .createServer()

http.createServer(function (request, response) {
  ...
}).listen(8081);

De igual manera el método .listen() nos ayudará a indicar el puerto sobre el que se ejecute el servidor.

El contenido del método .createServer() es una función la cual suelta el contenido a la página web. Es importante indicar una cabecera con un código de retorno 200 de OK. El texto de Hola Mundo lo hacemos mediante el objeto response.

http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('¡Hola Mundo!\n');
}).listen(8081);

El código completo de Hola Mundo en Node.js será el siguiente:

var http = require('http');
http.createServer(function (request, response) {
    response.writeHead(200, {'Content-Type': 'text/plain'});
    response.end('¡Hola Mundo!\n');
}).listen(8081);

console.log('Servidor ejecutándose en http://127.0.0.1:8081/');

Para ejecutar nuestro Hola Mundo en Node.js utilizaremos el interprete:

node holamundo.js

Ahora se puede ir al navegador web y escribir…

http://127.0.0.1:8081/

Veremos ¡Hola Mundo! en pantalla. Este mismo ejemplo podría devolver HTML y el ¡Hola Mundo! en un encabezado <h1> con el estilo que más nos guste. ¿Te atreves?

Artículos
jQuery

Lista circular con jQuery appendTo

05/Mar/2013

Hoy vamos a hacer otro ejemplo sencillísimo con listas en jQuery. Esta vez practicaremos la función de utilidad jQuery appendTo. Si seleccionamos el primer elemento de una lista con first y lo añadimos a los elementos de dicha lista con JQuery appendTo haremos que funcione de forma circular.

Nuestro HTML contiene únicamente una lista y un botón.


Lista origen: 
  1. Elemento ordenado 1
  2. Elemento ordenado 2
  3. Elemento ordenado 3
  4. Elemento ordenado 4

Primero vincularemos un evento al botón para que cada vez que se haga click en él se ejecute la función deseada. Podemos usar la función jQuery on que recibe como argumento el nombre del evento ante el cual reaccionará, en este caso ‘click,’ o usar la función reducida jQuery click. Hay que decir que la función ‘on’ vincula eventos y reemplaza a la antigua función jQuery ‘bind’ que se utilizaba antes de la versión 1.7 de jQuery.

$(document).on('ready', function(){
  $('#miBoton').on('click', function() {
    // Código sobre el click
  });
});

O bien en formato reducido:

$(document).on('ready', function(){
  $('#miBoton').click(function() {
    // Código sobre el click
  });
});

Cuando se produzca ese evento ejecutaremos nuestro sencillo código. Veremos que es tan simple que se programa con una sola línea gracias a JQuery appendTo que permite mover elementos en el DOM.  El método JQuery appendTo se aplica sobre un elemento a otro elemento como parámetro. Es decir, añade el elemento seleccionado al elemento argumento de la función.

En nuestro caso:

$(document).on('ready', function(){
  $('#miBoton').on('click', function() { 
    $('ol li:first').appendTo('ol');  
    });
});

Lo que hacemos es obtener la referencia al primer elemento de la lista «ol li:first» y moverlo con el JQuery appendTo al final de la lista.

Otra forma de codificar este movimiento, ajustando al nombre de la lista, sería:

$('#listaOrigen li:first').appendTo('#listaOrigen');

Y con este sencillo ejemplo hemos practicado selecciones básicas de jQuery, vinculación de eventos y práctica de la función de utilidad JQuery appendTo.

Código Fuente

Descárgate el código fuente de Lista circular con jQuery appendTo
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Artículos
jQuery

Utilizar jQuery each para recorrer una lista o array

24/Feb/2013

Vamos a ver un ejemplo de la función jQuery each para recorrer una lista de elementos o un array Javascript. Es algo que se puede hacer de forma muy sencilla mediante este método que nos proporciona la librería.

Lo primero de todo no olvides incluir la librería jQuery:

Si tenemos la siguiente lista ordenada en HTML:

  1. Elemento 1
  2. Elemento 2
  3. Elemento 3
  4. Elemento 4

Haremos los siguientes pasos:

  1. Primero vamos a seleccionar la lista.
  2. Una vez seleccionada llamamos a la función jQuery each que nos recorre los elementos de la selección.
  3. Por cada elemento que seleccione jQuery each ejecuta la función que le pasamos como argumento. Dicha función tiene dos parámetros para dar acceso tanto al índice como al elemento seleccionado y realizamos su escritura por consola.

Veamos el código:

$('ol li').each(function(indice, elemento) {
  console.log('El elemento con el índice '+indice+' contiene '+$(elemento).text());
});

Como ves:

  • Hemos seleccionado la lista con $(‘ol li’).
  • Llamamos a jQuery each.
  • Por cada selección ejecuta la función que tiene acceso al índice y al elemento y lo imprimimos por consola.
  • Date cuenta de que hemos aplicado a element la función text() para sacar su contenido.

Lo interesante es que la función jQuery each puede usarse directamente sobre $. En ese caso habrá que pasarle también como parámetro lista correspondiente de elementos seguida de la función tal como hacíamos en el ejemplo anterior. En el siguiente ejemplo lo vamos a usar para recorrer un vector de Javascript de personas y saludarlas. Veamos cómo quedaría:

var vectorPersonas = ['Elena', 'Isabel', 'Ana']; 

$.each(vector, function (ind, elem) { 
  console.log('¡Hola :'+elem+'!'); 
}); 

Ahora ya sabemos recorrer listas con jQuery gracias a la función each.

Código Fuente

Descárgate el código fuente de Utilizar jQuery each para recorrer una lista o array
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star