Buenas tardes, tengo la siguiente parte de un codigo que se repite varias veces, quisiera saber que alternativa podria usar para mejorar el codigo. El programa funciona perfecto, pero quisiera hacerlo mas limpio.
es parte de un menu en un LCD manejado mediante un encoder y un pulsador.
gracias
saludos
else if (aState1 != aLastState1 && buttonPushCounter == 1) {
if ((digitalRead(outputB1) != aState1) == LOW) {
if ( tempset <= 36 ) {
tempset ++;
if (tempset == 36) {
tempset = 0;
}
}
}
else if (tempset > 0) {
tempset --;
}
}
[/nocode]
Desconozco el contexto del fragmento, por eso lo más "limpio" que se me ocurre sería lo siguiente;
else if (aState1 != aLastState1 && buttonPushCounter) {
if (digitalRead(outputB1) == aState1) {
tempset ++;
if (tempset > 36) tempset = 0;
} else if (tempset > 0) tempset--;
}
Ahí lo que hice fue eliminar redundancias en las operaciones lógicas.
Si buttonPushCounter de verdad es un contador, entonces por ahí me equivoqué; si lo usas solo para dos posibles valores, entonces no hay problema.
¿Qué entendemos por limpio? ¿Legible o pocas líneas? Porque cuando se trata de legibilidad esto depende del usuario que lo crea o bien para quienes puedan leerlo.
Esa línea en tu código es confusa:
if ((digitalRead(outputB1) != aState1) == LOW)
Estas diciendo: Si el pin tiene un valor distinto al estado y de nuevo lo comparas preguntando si es LOW (false)
Osea estás diciendo if (true == false) o if(false == false) cuando puedes resumirlo en if(true) y ya.
Te complicaste la vida ahí. Es mejor tal cual lo puso Lucario.
Te pongo todo tu código en una sola una línea, ¿Pero es más legible? Bueno, depende de cuan acostumbrado se esté a los operadores ternarios.
Lucario448:
Desconozco el contexto del fragmento, por eso lo más "limpio" que se me ocurre sería lo siguiente;
else if (aState1 != aLastState1 && buttonPushCounter) {
if (digitalRead(outputB1) == aState1) {
tempset ++;
if (tempset > 36) tempset = 0;
} else if (tempset > 0) tempset--;
}
Ahí lo que hice fue eliminar redundancias en las operaciones lógicas.
Si *buttonPushCounter* de verdad es un contador, entonces por ahí me equivoqué; si lo usas solo para dos posibles valores, entonces no hay problema.
el button push counter realmente es un contador, cuando esta en 1, me modifica la variable tempset, cuando está en 2, la variable humset, en 3 la variable sethora, etc, el contador button push counter se reinicia cuando llega a 8 (son 8 las variables a modificar, con posibilidad de mas a futuro), cuando me referia a mas limpio quise decir que si el dia de mañana tengo 36 variables a modificar, no tenga que repetir 36 veces esas lineas en el codigo.
voy a tratar de crear una funcion, veremos como me va!
Vaya, me ganaron :I
Yo antes solía hacer las cosas así, pero no sé por qué perdí esa costumbre...
mngallo:
cuando me referia a mas limpio quise decir que si el dia de mañana tengo 36 variables a modificar, no tenga que repetir 36 veces esas lineas en el codigo.
Entonces "empaqueta" la secuencia de instrucciones que se repite, en una función.
Si en todos los casos las variables son modificadas por los mismos botones, y tienen los mismos umbrales; entonces la función recibe el valor de esa variable y retorna el nuevo valor.
Lucario448:
Vaya, me ganaron :I
Yo antes solía hacer las cosas así, pero no sé por qué perdí esa costumbre...
No te equivoques, yo no compito, menos contigo. Apenas llevo meses con este lenguaje. Yo me empapo los códigos de noter, de surbyte y los tuyos. Para cualquier otro lenguaje cuenta conmigo (pero C, Pascal y esos así los tengo casi olvidados) Por eso a veces Arduino me da dolor de cabeza (como con los punteros).
Se nota leyendo quien hace un "juguete" y quien programa.
Sólo quise exponer cómo definimos código limpio ¿Por número de líneas? ¿Por lo simple que sea de leer? Un código puede tener 10 líneas y ser limpio y otro 1 y ser una locura.
Después está el caso de código que se comprime usando operadores u otras formas de sintaxis que no es que sean menos "limpios" sino que con un nivel bajo de programación no se entiende y con otros con cierta práctica lo ven ideal.
En resumen... la limpieza del código desde mi punto de vista depende del creador y de quienes lo lean.
Yo pienso que el código debe ser un término medio entre eficiencia/número de líneas/legible (Y si es muy raro comentarlo todo lo posible).
Un saludo, Lucario, y de verdad que yo no compito, yo aprendo.
Yo he echado de menos el resto del código, pues me hubiera gustado atacar a la raíz del problema; es decir, intentar evitar que ese trozo de código se tenga que repetir.
noter:
Yo he echado de menos el resto del código, pues me hubiera gustado atacar a la raíz del problema; es decir, intentar evitar que ese trozo de código se tenga que repetir.
Si pone el valor a retornar en una función ¿No sería suficiente? A fin de cuenta su código con independencia de las líneas que use sólo asigna un valor a una variable.
Claro que puede ser que de entrada el planteamiento de ese código pudiera hasta omitirse o variarse de otra forma (pero eso es ya hacerle todo el proyecto) : ???
Arduinito:
No te equivoques, yo no compito, menos contigo.
Pues... yo tampoco hablaba de competencia. Lo que quise decir es que yo hubiera propuesto lo mismo, solo que la pérdida de la costumbre hizo que tal idea nunca pasara por mi cabeza...
Cuando un mismo código se repite, este esta pidiendo ser encampsulado en un metodo o función. Se escribe una vez y cuando es necesitado se llama al meto o función necesario.