Cita:
Iniciado por Italico76 @dashtrash : no tiene codigo innecesario como Ud dice... Ud asume que jamas se le puede suministrar una precondicion correcta a esa funcion ? o tiene problema porque estan en distintas lineas los chequeos de cada una ?
Sino se van cumpliendo las precondiciones lo devuelve con false, eso no esta "mal" solo que como dice @guardamicorreo no cumple la recomendacion PSR de un solo return()
Por supuesto que tiene código innercesario.Es innecesario llamar 2 veces a strlen, sobre todo, cuando ya se ha forzado la precondicion.Yo entiendo que a la gente le gusten los "estándares" y las "buenas prácticas", pero no se puede responder a todo con "estándares" y "buenas prácticas", sobre todo cuando no es el tema de la pregunta.
Más poquito a poco, a ver si asi está claro:
La tercera linea es una *asignacion*, no es ningún chequeo de precondición, y es un código absolutamente innecesario, y es equivalente a $odd=0;
Esto no es una cuestión formal, ni de recomendaciones, ni de PSR.Es una cuestión de pura y sencilla lógica.
El código anterior equivale a:
Código PHP:
Ver original if ($len != 15) return FALSE;
$odd = !$len%2;
Pero, como len debe valer 15, porque si no, no estaríamos en la función, el código equivale a
Lo cual equivale a
Código *equivalente* no tiene nada que ver con las "precondiciones".No hay ningún test ahí.
Es código escrito con el único propósito de que el alumno entienda la *lógica*, y aplique la misma...no los "estándares".
No se le pide que reescriba el código lanzando excepciones.No se le pide que adapte el código al "estandar" psr, ni que haga echos, ni nada de eso.
Se pide que se encuentre la lógica de la función.
Todo el bucle se resume en
Código PHP:
Ver originalfor ($i=0; $i<$len; ++$i)
$sum+=$str[$i]*(1+$i%2);
Así que...sí, sobra bastante código