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 13 de Febrero 2016, 00:18

Título: JavaScript ¿Arrays asociativos? Definición de funciones y operaciones CU01146E
Publicado por: Dimitar Stefanov en 13 de Febrero 2016, 00:18
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.
Título: Re:CU01146E JavaScript ¿Arrays asociativos?
Publicado por: bermartinv en 13 de Febrero 2016, 10:14
Funcionan Ok
Título: Re:CU01146E JavaScript ¿Arrays asociativos?
Publicado por: Dimitar Stefanov 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 (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
Título: Re:JavaScript ¿Arrays asociativos? Definición de funciones y operaciones CU01146E
Publicado por: paramonso en 23 de Noviembre 2017, 11:41
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.
 ;)