Autor Tema: JavaScript ¿Arrays asociativos? Definición de funciones y operaciones CU01146E  (Leído 3480 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Solución del ejercicio CU01146E del curso JavaScript desde cero.

Citar
EJERCICIO

El siguiente código hace uso de la notación tipo array para invocar propiedades. También crea objetos únicos (los objetos plus, minus, operaciones y calcular). Analiza el código y trata de comprender todo lo que hace.

Se pide realizar los siguientes cambios:

a) Reemplaza toda la notación basada en sintaxis tipo array para el acceso a propiedades por sintaxis basada en notación de punto. Ejecuta el código y comprueba su funcionamiento.

b) Sobre el código de la opción a), cambia la definición de objetos para que no sean objetos únicos, sino que plus, minus y calcular sean funciones simples, y operaciones un objeto instanciable (que tendrás que instanciar si es necesario). Ejecuta el código y comprueba su funcionamiento.

c) Sobre el código de la opción c), añade la posibilidad de hacer cálculos de multiplicación y división de la misma forma que se hacen cálculos de suma y resta. Muestra un mensaje por cada tipo de operación. Ejecuta el código y comprueba su funcionamiento.

Código original:

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

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

<script type="text/javascript">

var plus = function(x,y){ return x + y };

var minus = function(x,y){ return x - y };

var operaciones = {

  '+': plus,

  '-': minus

};

var calcular = function(x, y, operacion){ return operaciones[operacion](x, y); }

function ejemploObjetos() {

alert ('Resultado de calcular(3, 15, \'+\') es '+ calcular(3,15, '+'));

}

</script>

</head>

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

<div style="color:blue;" id ="pulsador" onclick="ejemploObjetos()"> Probar </div>

</body>
</html>

1) Solución del primer subpunto:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
var plus=function(x,y){return x + y};
var minus=function(x,y){return x - y};
var operaciones={
sumar:plus,
'-':minus
};

var calcular=function(x,y){return operaciones.sumar(x,y);}

//La única manera que se me ha ocurrido de reemplazar la notación basada en sintaxis tipo array por sintaxis basada en notación de punto era cambiar el parámetro '+' por otro que no fuera símbolo reservado por JavaScript. En este caso lo sustituí por el parámetro "sumar". Si mantuvieramos el nombre de la propiedad '+' no tendríamos más remedio que invocarla mediante el sintaxis: operaciones.['+'], pero de este modo también conservaríamos la notación basada en sintaxis tipo array y no es lo que pide el ejercicio.

function ejemploObjetos(){
alert('Resultado de calcular(3,15\'+\')es: '+calcular(3,15));

}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsar" onclick="ejemploObjetos()">Probar</div>
</body>
</html>

2) Solución del segundo subpunto:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function plus(x,y){
return(x+y);
}

function minus(x,y){
return(x-y);
}

function operaciones(x,y){
this.sumar=plus(x,y);
this.restar=minus(x,y);
};

function calcular(x,y){
var operacionesMat= new operaciones(x,y);
alert(x+' más '+y+' es igual a: '+operacionesMat.sumar);
}


function ejemploObjetos(){
calcular(3,5)

}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsar" onclick="ejemploObjetos()">Probar</div>
</body>
</html>

3)Tercer subpunto:

Código: [Seleccionar]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Ejemplo aprenderaprogramar.com</title>
<script type="text/javascript">
function plus(x,y){
return(x+y);
}

function minus(x,y){
return(x-y);
}

function por(x,y){
return(x*y);
}

function entre(x,y){
return(x/y);
}

function operaciones(x,y){
this.sumar=plus(x,y);
this.restar=minus(x,y);
this.multiplicar=por(x,y);
this.dividir=entre(x,y);
};

function calcular(x,y){
var operacionesMat= new operaciones(x,y);
alert(x+' más '+y+' es igual a: '+operacionesMat.sumar);
alert(x+' menos '+y+' es igual a: '+operacionesMat.restar);
alert(x+' multiplicado por '+y+' es igual a: '+operacionesMat.multiplicar);
alert(x+' dividido entre '+y+' es igual a: '+operacionesMat.dividir);
}


function ejemploObjetos(){
calcular(3,5)

}
</script>
</head>
<body>
<div id="cabecera">
<h2>Cursos aprenderaprogramar.com</h2>
<h3>Ejemplos JavaScript</h3>
</div>
<div style="color: blue;" id="pulsar" onclick="ejemploObjetos()">Probar</div>
</body>
</html>

Como podemos observar, en todo el ejercicio he intentado utilizar sintaxis basada en notación de punto. Observarán que en algunos puntos el código se hace muy repetitivo, pero era la única manera de no utilizar notación basada en sintaxis tipo array.
« Última modificación: 25 de Febrero 2016, 10:34 por César Krall »

bermartinv

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 298
    • Ver Perfil
Re:CU01146E JavaScript ¿Arrays asociativos?
« Respuesta #1 en: 13 de Febrero 2016, 10:14 »
Funcionan Ok

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:CU01146E JavaScript ¿Arrays asociativos?
« Respuesta #2 en: 13 de Febrero 2016, 16:51 »
Gracias por mirarte el código bermartinv.

Algún comentario sobre el punto a) ?

He encontrado este enlace (foro):

https://www.aprenderaprogramar.com/foros/index.php?topic=3167.msg14092#msg14092

y no sé. Yo lo he podido invocar mediante el sintaxis de anotación de punto (o por lo menos eso creo, jejeje).

Alguna sugerencia?

Gracias

paramonso

  • Intermedio
  • ***
  • Mensajes: 241
  • El ignorante afirma, el sabio duda y reflexiona.
    • Ver Perfil
Hola Dimitar Stefanov.

No se si es ya un poco tarde para esta respuesta.

He repasado el código del ejercicio y veo que funciona invocando mediante la sintaxis de anotación de punto.

Pero en este caso la función dejaría de ser tal ya que las funciones sirven para trabajar dinámicamente sin que el usuario tenga que tocar el código y en este caso cada vez que quieras realizar alguna operación diferente a la suma tendremos que retocar el codigo.

Yo estoy rompiendome la cabeza intentando hacerlo pero por lo visto no se puede.

Espero no ser impertinente con este comentario.

Gracias por tu código porque aunque no esté del todo bien siempre sirve para aprender algo.
 ;)
« Última modificación: 04 de Junio 2018, 19:08 por Ogramar »

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".