Si tengo una función llamada desde algunos lugares, y requiere que se cumpla alguna condición para todo lo que ejecuta, ¿dónde debería verificarse esa condición? En mi caso, es para dibujar: si el botón del mouse está presionado, ejecuta la lógica de dibujo (esto se hace en el controlador de movimiento del mouse para cuando lo arrastres).Práctica recomendada: cuándo evaluar los condicionales de la ejecución de la función
La opción uno dice ponerlo en la función que está garantizado para ser verificado. Abstraído, si quieres.
public function Foo() {
DoThing();
}
private function DoThing() {
if (!condition) return;
// do stuff
}
El problema que tengo con esto es que cuando se lee el código de Foo
, que puede estar muy lejos de DoThing
, se ve como un error. Lo primero que se piensa es que la condición no se está controlando.
La segunda opción, entonces, es verificar antes de llamar.
public function Foo() {
if (condition) DoThing();
}
Esto lee mejor, pero ahora tiene que preocuparse acerca de la comprobación de todas partes se llame.
La tercera opción es cambiar el nombre de la función para que sea más descriptiva.
public function Foo() {
DoThingOnlyIfCondition();
}
private function DoThingOnlyIfCondition() {
if (!condition) return;
// do stuff
}
¿Es esta la solución "correcta"? ¿O esto va demasiado lejos? Siento que si todo fuera así, los nombres de las funciones comenzarían a duplicar su código.
Acerca de esto, es subjetivo: por supuesto que lo es, y puede que no haya una respuesta correcta, pero creo que todavía se siente como en casa. Obtener consejos de mejores programadores que yo es la segunda mejor manera de aprender. Las preguntas subjetivas son exactamente el tipo de cosas que Google no puede responder.
Responde a la pregunta de la estructura. En cuanto al nombre, pensar un poco más debería proporcionar una alternativa que sea adecuadamente descriptiva y no repetitiva. Quizás algo en la línea de 'DrawOnDrag()' para 'DoThing()'. – Novelocrat