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
-
Solución del ejercicio CU01146E del curso JavaScript desde cero.
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:
<!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:
<!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:
<!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:
<!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.
-
Funcionan Ok
-
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
-
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.
;)