Ver Mensaje Individual
  #10 (permalink)  
Antiguo 13/05/2014, 09:22
Avatar de dashtrash
dashtrash
Colaborador
 
Fecha de Ingreso: abril-2007
Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 1 mes
Puntos: 270
Respuesta: Algoritmo en PHP

Cita:
Iniciado por Italico76 Ver Mensaje
@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:
Código PHP:
Ver original
  1. $len = strlen($str);
  2.   if ($len != 15) return FALSE;
  3.   $odd = !strlen($str)%2;
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
  1. $len = strlen($str);
  2.   if ($len != 15) return FALSE;
  3.   $odd = !$len%2;
Pero, como len debe valer 15, porque si no, no estaríamos en la función, el código equivale a
Código PHP:
Ver original
  1. $odd = !(15%2);
Lo cual equivale a
Código PHP:
Ver original
  1. $odd = 0;

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 original
  1. for ($i=0; $i<$len; ++$i)
  2.    $sum+=$str[$i]*(1+$i%2);
Así que...sí, sobra bastante código

Última edición por dashtrash; 13/05/2014 a las 09:48