Autor Tema: Javascript Funcion dentro de otra evitar la repetición de código con parámetros  (Leído 4045 veces)

joher60

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Saludos Cordiales chicos dejaré un fragmento de código que me gustaría simplificar pero la lógica aplicada creo que no es la correcta, a ver si alguno me brinda una clarificación del error.

El error es que siempre tcv da como resultado "Litros de" en vez de aplicar el analisis de la funcion liquido.

Si quito los // de las variables tcv dentro de la funcion prueba funciona perfectamente, pero me gustaria hacerla funcionar con la estructura presentada ya que poseo varias funciones con la estructura de la funcion prueba y la idea es simplificar el codigo no solo con la variable tcv si no tambien con las variables agu texa y otras 45 variables aprox.
Gracias de Antemano a quienes puedan brindar parte de sus conocimientos.


*/
Código: [Seleccionar]

var a="1.- ";
var b="2.- ";
var c="3.- ";
var d="4.- ";
var e="5.- ";
var f="6.- ";
var g="7.- ";
var h="8.- ";
var i="9.- ";
var j="10.- ";
var k="11.- ";
var l="12.- ";
var m="13.- ";
var n="14.- ";
var o="15.- ";


var br="<br>";
var ml=" Mililitros";
var li=" Litros";
var gr=" Gramos";
var mg=" Miligramos";
var kl=" Kilogramos";


var tca="Para hacer ";
var tcc=" se requieren:"




var nagu = "Agua - H2O = ";
var ntexa = "Texapon N-70 Lauril Sulfato de Sodio = ";




function entrada(){
if(UI=document.getElementById('entradaPrueba')){prueba();}
else if(UI=document.getElementById('entradaPruebaB')) {pruebaB();}
else if(UI=document.getElementById('entradaPruebaC')) {pruebaC();}
}


function liquido(){
if (UI<=1){
tcb=" Litro de ";}
else {tcb=" Litros de ";}
}


function prueba() {
var UI=document.getElementById('entradaPrueba').value;
if(isNaN(UI)){return false;}
var producto = "Producto de Prueba";
var agu = UI*91.8/100;
var texa = UI*3/100;
liquido();
if (UI<=1){
//tcb=" Litro de ";
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else{
//tcb=" Litros de ";
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;}
if (texa*1000>=1000){texa=texa+kl;}else{texa=texa*1000+gr;}
}
var resul =
tca+UI+tcb+producto+tcc+br+
a+nagu+agu+br+
b+ntexa+texa+br;


var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";


document.getElementById('salida').innerHTML=resul,
document.getElementById('procedimiento').innerHTML=procedimiento;
}




/*
Lo que busco es simplificar de las funciones prueba, pruebab, pruebac los fragmentos de codigo:
*/


if (UI<=1){
//tcb=" Litro de ";
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else{
//tcb=" Litros de ";
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;}
if (texa*1000>=1000){texa=texa+kl;}else{texa=texa*1000+gr;}
}
« Última modificación: 12 de Agosto 2017, 11:46 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #1 en: 23 de Julio 2017, 12:07 »
Hola joher60

Para poder ayudarte sería bueno que pegases el código completo y explicases que es lo que debe de hacer.

Saludos. ;D

joher60

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #2 en: 24 de Julio 2017, 04:19 »
Gracias por tomerse tiempo Sr. Pedro.


Las aplicacion hace lo siguiente:


Toma de un HTML el valor de UI que es la cantidad de producto a procesarse EJEMPLO una torta, segun el valor de UI (Cantidad de Kilos de Torta a fabricar) se calcula automaticamente valor porcentual de cada variable (Harina, Leche, Huevos, Azucar, Mantequilla), hay productos que son tratados como Litros o Mililitros si es Liquido o Kilos o Gramos si son Solidos.


Que quiero hacer:

Deseo crear una funcion que analice si es un liquido y los valores a tratar son menos de la unidad e medida de como resultados Mililitros y si es 1 sea tratado como Litro o si es mas de 1 el resultado sea tratado como Litros, yo ya tengo la funcion por producto que hace ese trabajo la funcion de 1 producto es:


Código: [Seleccionar]
// Este producto Prueba puede ser un Jugo que lleva agua y saborizante
// Utiliza 91.8% de Agua y 3 % de Saborizante

function prueba() {
var UI=document.getElementById('entradaPrueba').value;
if(isNaN(UI)){return false;}
var producto = "Producto de Prueba";
var agu = UI*91.8/100;
var texa = UI*3/100;
if (UI<=1){
tcb=" Litro de ";
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else{
tcb=" Litros de ";
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;}
if (texa*1000>=1000){texa=texa+kl;}else{texa=texa*1000+gr;}
}
var resul =
tca+UI+tcb+producto+tcc+br+
a+nagu+agu+br+
b+ntexa+texa+br;


var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";


document.getElementById('salida').innerHTML=resul,
document.getElementById('procedimiento').innerHTML=procedimiento;
}

Asi como esta el codigo funciona perfectamente, pero poseo mas de 40 productos y se procesaran como 80 mas, y copiar y modificar cada linea de codigo no es muy practico que se diga, entonces he pensado en hacer algo como una funcion liquido donde se efectue el analisis de seleccion de variables segun la cantidad de producto indicado desde el HTML, algo como esto:


Código: [Seleccionar]

function liquido(){
if (UI<=1){
tcb=" Litro de ";}
else {tcb=" Litros de ";}
}


[Si se fijan es tal cual como esta funcionando dentro de la funcion prueba pero en una funcion aparte que se llama liquido, la finalidad de hacerlo asi es que en cada funcion nueva de un producto nuevo ya se analice que resultado debe indicar Javascript en la salida HTML segun el numero que se le indique en el HTML.
Haciendo dentro de la funcion prueba una inclusion de la funcion liquido de la siguiente forma:

Código: [Seleccionar]
function prueba() {
var UI=document.getElementById('entradaPrueba').value;
if(isNaN(UI)){return false;}
var producto = "Producto de Prueba";
var agu = UI*91.8/100;
var texa = UI*3/100;

liquido();

if (UI<=1){
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else{
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;}
if (texa*1000>=1000){texa=texa+kl;}else{texa=texa*1000+gr;}
}
var resul =
tca+UI+tcb+producto+tcc+br+
a+nagu+agu+br+
b+ntexa+texa+br;


var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";


document.getElementById('salida').innerHTML=resul,
document.getElementById('procedimiento').innerHTML=procedimiento;
}

Siempre la salida es LITROS DE no opera como estaba anteriormente aplicando el IF.
« Última modificación: 25 de Julio 2017, 01:13 por pedro,, »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 985
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #3 en: 24 de Julio 2017, 14:18 »
Hace años que no hago nada de JavaScript..

Y tengo una duda, cuando usas tu función liquido(), ¿donde está declarada la variable tcb?
Es que no la veo y tengo la duda de si tal vez la función liquido está modificando una variable que, aunque se llame tcb, no es la misma tcb de la funcion principal, sino una tcb local de la funcion liquido()... ya sabes, el ámbito (scope) de una variable depende de donde esté declarada.

En cualquier caso, puedes probar a modificar tu función liquido() para que en lugar de modificar directamente la variable tcb, devuelva un String con el texto que te interese.

Es decir:

Código: [Seleccionar]
function liquido(){
if (UI<=1){
return " Litro de ";}
else { return " Litros de ";}
}


Y luego en la funcion principal:

Citar
function prueba() {
var UI=document.getElementById('entradaPrueba').value;
if(isNaN(UI)){return false;}
var producto = "Producto de Prueba";
var agu = UI*91.8/100;
var texa = UI*3/100;


tcb = liquido();


if (UI<=1){
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else{
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;}
if (texa*1000>=1000){texa=texa+kl;}else{texa=texa*1000+gr;}
}
var resul =
tca+UI+tcb+producto+tcc+br+
a+nagu+agu+br+
b+ntexa+texa+br;


var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";


document.getElementById('salida').innerHTML=resul,
document.getElementById('procedimiento').innerHTML=procedimiento;
}


Repito que hago mucho que no toco JavaScript y puede que haya cometido/dicho alguna incorrección.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #4 en: 25 de Julio 2017, 01:24 »
Buenas.

El problema que tiene la función liquido, es que no reconoce el valor de "UI" debido a que esta variable está en otro ámbito, esto lo puedes solucionar pasándole el valor de "UI" como parámetro cuando llames a la función.

Código: [Seleccionar]
liquido(UI);
y la función líquido debe de quedar de la siguiente forma:


Código: [Seleccionar]
function liquido(UI){
if (UI<=1){
tcb=" Litro de ";}
else {tcb=" Litros de ";}
}

En cuanto a lo que dice Kabuto, al no declarar la variable con "var" dentro de las funciones donde se encuentra,  su ámbito es global.
Habría que cambiar muchas cosas en el código, puesto que tiene como unas 25 variables declaradas con ámbito local y esto es consumir recursos innecesariamente.

Saludos.  ;D

joher60

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #5 en: 25 de Julio 2017, 06:03 »
Hola, Gracias por tomarse la molestia, muy agradecido con su valioso aporte, de hecho me ayudo a aclarar lo que en la teoria por mas que la leia no comprendia, de hecho estoy aventurandome en JS ya que me gusta mas otros lenguajes, pero este proyecto es un proyecto offline y para automatizar las operaciones me fui por un lenguaje que es nuevo para mi y asi ir aprendiendo, he tratado de complicar un poco mas la cosa pero el verificador de errores en consola me indica que la variable no esta definida, sabe usted como puedo hacer para que el codigo si una variable en la funcion Liquido no sera utilizada en Prueba simplemente no la utilice, intente asignarle valor 0 pero creo que el problema no es en el valor de la variable si no que esa nueva variable no esta siendo utilizada en la funcion prueba, proceso a colocar el ejemplo a ver si esta en sus posibilidades de brindarme un poco mas de su conocimiento.


Codigo con su aporte y con un intento de que funcione:


Código: [Seleccionar]

function liquido(UI){
if (UI<=1){
tcb=" Litro de ";
agu = agu*1000 + ml;
texa = texa*1000 + gr;
}
else {
tcb=" Litros de ";
if (agu*1000>=1000){agu=agu+li;}else{agu=agu*1000+ml;};
if (texa*1000>=1000){texa=texa+kl;}else {texa=texa*1000+gr;};
if (alcet == undefined) {alcet == 0;} if (alcet*1000>=1000){alcet=alcet+kl;}else {alcet=alcet*1000+gr;};
}
}


function prueba() {
var UI=document.getElementById('entradaPrueba').value;
if(isNaN(UI)){return false;}
producto = "Producto de Prueba";
agu = UI*91.8/100;
texa = UI*3/100;
liquido(UI);
resul =
tca+UI+tcb+producto+tcc+br+
a+nagu+agu+br+
b+ntexa+texa+br;


var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";


document.getElementById('salida').innerHTML=resul,
document.getElementById('procedimiento').innerHTML=procedimiento;
}


Quedo atento y no se como manejan aca la dinamica de darle punto a los colaboradores, pero de ser asi a usted le otorgare mi puntuacion por el aporte al momento de cerrar esta entrada ya que practicamente por el problema base por el que abri el mismo de manera directa usted ha atinado en el clavo, gracias de antemano por ello.
« Última modificación: 12 de Agosto 2017, 11:41 por Ogramar »

pedro,,

  • Moderador Global
  • Experto
  • *******
  • APR2.COM
  • Mensajes: 1292
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #6 en: 25 de Julio 2017, 10:13 »
Buenas joher60.

El problema que te ocurre es debido a que estás intentado comparar en el if de la función liquido una variable que no ha sido declarada anteriormente, que es "alcet".

La solución sería declararla antes.

Ya que no has dejado código completo, te paso el código que he elaborado para hacer las pruebas.
Código: [Seleccionar]
<!DOCTYPE html>
<html>
    <head>
        <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
        <meta charset="utf-8">
        <title>Ejemplo</title>
        <script>

          var a="1.- ";
          var b="2.- ";
          var c="3.- ";
          var d="4.- ";
          var e="5.- ";
          var f="6.- ";
          var g="7.- ";
          var h="8.- ";
          var i="9.- ";
          var j="10.- ";
          var k="11.- ";
          var l="12.- ";
          var m="13.- ";
          var n="14.- ";
          var o="15.- ";

          var br="<br>";
          var ml=" Mililitros";
          var li=" Litros";
          var gr=" Gramos";
          var mg=" Miligramos";
          var kl=" Kilogramos";

          var tca="Para hacer ";
          var tcc=" se requieren:"

          var nagu = "Agua - H2O = ";
          var ntexa = "Texapon N-70 Lauril Sulfato de Sodio = ";
          var alcet = 0;

          function entrada(){
            if(UI=document.getElementById('entradaPrueba')){
              prueba();
            } else if(UI=document.getElementById('entradaPruebaB')) {
              pruebaB();
            } else if(UI=document.getElementById('entradaPruebaC')) {
              pruebaC();
            }
          }

          function liquido(UI){
            if (UI<=1){
              tcb=" Litro de ";
              agu = agu*1000 + ml;
              texa = texa*1000 + gr;
            } else {
              tcb=" Litros de ";
              if (agu*1000>=1000){
                agu=agu+li;
              }else{
                agu=agu*1000+ml;
              };
              if (texa*1000>=1000){
                texa=texa+kl;
              }else {
                texa=texa*1000+gr;
              };
              if (alcet == undefined) {
                alcet == 0;
              } if (alcet*1000>=1000){
                alcet=alcet+kl;
              }else {
                alcet=alcet*1000+gr;
              };
            }
          }

          function prueba() {
            var UI=document.getElementById('entradaPrueba').value;
            if(isNaN(UI)){
              return false;
            }
            producto = "Producto de Prueba";
            agu = UI*91.8/100;
            texa = UI*3/100;
            liquido(UI);
            resul = tca+UI+tcb+producto+tcc+br+a+nagu+agu+br+b+ntexa+texa+br;

            var procedimiento="<h1>PROCEDIMIENTO:</h1> PRODUCTO DE PRUEBA";

            document.getElementById('salida').innerHTML=resul,
            document.getElementById('procedimiento').innerHTML=procedimiento;
          }

        </script>
    </head>
<body>
   <input type="text" id="entradaPrueba" /><input type="button" name="boton" id="boton" onclick="entrada();" value="Empezar" />
   <div id="procedimiento"></div>
   <div id="salida"></div>


</body>
</html>


Y si estás empezando con JavaScript, aquí te dejo un enlace con un gran curso gratuito para aprender desde 0.

http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=78&Itemid=206

Y si estás interesados en otros cursos, aquí te paso otro enlace donde hay más cursos:

http://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86

Saludos.  ;D
« Última modificación: 25 de Julio 2017, 10:16 por pedro,, »

joher60

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Re:Javascript Funcion dentro de otra Funcion
« Respuesta #7 en: 26 de Julio 2017, 03:19 »
Muchas Gracias Sr. Pedro.. muy Agradecido.. dejare aca el link de una prueba con algo mas de forma..!! y un poco mas elaborado, http://local.jesuministrosymas.com.ve/limpieza/ y claro que si seguire su amable invitacion sobre el curso JS. Muchas Gracias.
« Última modificación: 12 de Agosto 2017, 11:45 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".