miércoles, 25 de febrero de 2009

¿Cuál es el error?

Una bobada para pensar un rato, de esas que me gusta tirar en las primeras clases: ¿qué está mal en este código, y por qué?

public decimal Suma(decimal a, decimal b)
{
 return a-b;
}

Obviamente el "por qué" es lo más importante de la respuesta. No consulten ninguna fuente (pierde la gracia), sólo sigan su instinto y, si quieren, dejen un comentario (sin mirar antes los de los demás).

Actualización: el tema se resuelve (en parte) en La “respuesta” a “¿Cuál es el error?”, la ambigüedad, su resolución y, finalmente, la realidad.

12 comentarios:

Anónimo dijo...

Si lo pones en negrita es demasiado fácil :)

leonardo.sly dijo...

El nombre del metodo es Suma y devuelve una resta. Es tonto pero al programar, un error como este puede hacernos perder horas al tratar de encontrarlo y mas si el codigo es extenso

AcP dijo...

@Anónimo1: Sí, es facil... ¿y la respuesta?

@lenoardo.sly: Estamos de acuerdo en el análisis de la situación, pero ¿cuál es el error? ¿el nombre? ¿el "-" debería ser "+"? ¿por qué?

blpgirl dijo...

Pues a simple vista el error está en el "-" que debería ser un "+" para que sea una suma, claro que si siempre pasas b como negativo pero te interesa sumar su valor absoluto entonces puede que esté correcto o.O

Conclusión, como dijo Einstein: "Todo es relativo"

Anónimo dijo...

La implementacion de la funcion esta bien, lo que falla es la falta de documentacion de la misma. Un comentario explicando la intencion de la funcion, dejaria ver si es un error o no que la funcion se llame Suma y retorne una resta.

Saludos!!

Nicolas dijo...

Le veo 2 problemas... uno que no se si la función tiene que sumar y esta restando porque el programador se equivocó, o si la función tiene que restar y lo que está mal puesto es el nombre... y el otro... que no tengo garantía que la resta de dos decimales (o la suma, es lo mismo) no me devuelva un overflow... me puedo estar pasando del rango.

Anónimo dijo...

A expensas de la funcionalidad indicada Suma no seguiría las normas de codificación de nombres la S debería de ser minúscula para facilitar la lectura en otros puntos del código.

AcP dijo...

@blpgirl: ¡Jugate! ¿Qué hacemos? ¿Por qué?

@Anónimo2: Un comentario ayudaría. Pero... ¿Por qué? ¿Por qué confiarías más en un comentario que en el nombre de la función o que su implementación?

@Nicolás: bien pero... ¿Qué hacemos? Y si los argumentos hacen que se pasen de rango ¿eso es un problema de la función?

@Anónimo3: Ni. Es una posibilidad bastante utilizada. En mi trabajo utilizamos el documento de Lance Hunt, que especifica pascal-case para todos los métodos (públicos y privados). De todas maneras, siempre dije que en realidad es cuestión de gustos, y que en todo caso no importa tanto el estilo (siempre y cuando sea mínimamente prolijo) sino que se utilice consistentemente dentro de un proyecto.

Cerebrado dijo...

El error está en querer hacer una función que tome dos parámetros y devuelva una operación entre éstos dos parámetros sin hacer nada mas.

En vez de llamar a la función Suma(a,b), simplemente se puede hacer "parametroA - parametroB" y el código queda mas legible (si dice " - " QUIZO hacer una resta y no otra cosa), y me ahorro un método.

Bruno dijo...

Para mi si la funcion se llama suma y despues resta hay dos posibilidades:
1- Que este bien a fines de que el programa haga lo que se necesita aunque otra persona lo mire y no entienda nada!
2- Que este mal ya que despues lo tiene que mirar otra persona y deducir que quizo hacer este programador...
NO HAY UNA RESPUESTA JEJ
Saludos

HardBit dijo...

Segun yo la funcion es suma y el codigo resta jajaja

AcP dijo...

Gracias a todos por los comentarios. La respuesta es... La “respuesta” a “¿Cuál es el error?”, la ambigüedad, su resolución y, finalmente, la realidad.
.