Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Matriz invalida (C++)

Iniciado por Neodivert, 22 de Febrero de 2009, 04:47:21 PM

« anterior - próximo »

Vicente

Bueno, en Java las checked exceptions tienen el mismo problema: realmente solo pones las excepciones que tu sabes que van a salir (porque las lances tú o porque estén especificadas en algún método al que llamas) pero no tienen porque ser todas las excepciones que te pueden salir de ese método y te obligan a ensuciar el código de mala manera, además de que mucha gente que se dedica a capturarlas las silencia sin darse cuenta o se carga la pila de llamadas al relanzarlas (esto último no sé si es 100% seguro, hace años que no toco Java).

Un saludo,

Vicente

Neodivert

#16
Cita de: lemoniac en 24 de Febrero de 2009, 06:04:17 PM
Sobre el warning, fíjate en el #include"E_Matrices.cpp".

Realmente te está diciendo que el método what de E_Matrices no siempre devuelve un valor.

Que sería de la vida del programador sin esos errores estúpidos que se convierten en totalmente invisibles a nuestros ojos.  :-[ ¡Justamente era eso!. ¡Muchísimas gracias a todos!  :D

PD. Y davidgf, me serviste de inspiración, lo voy a hacer como una plantilla.  :P ;)

shephiroth

Cita de: Vicente en 24 de Febrero de 2009, 09:00:13 PM... además de que mucha gente que se dedica a capturarlas las silencia sin darse cuenta o se carga la pila de llamadas al relanzarlas (esto último no sé si es 100% seguro, hace años que no toco Java)...

Ya que se encontro el problema, creo q no importa tanto si cambio el tema del post..........esto que comentas me intriga......que es eso de silenciarlas, y relanzarlas??

Vicente

Silenciar una excepción: a veces la gente hace lo siguiente:


try
{
     ...
}
catch (LaExcepcion e)
{
     ...
}


Y se olvida del throw. Es una chorrada pero en proyectos grandes es un dolor de cabeza que no veas.

Relanzar una excepción (esto no estoy 100% seguro, en C# es así pero no recuerdo si es lo mismo en Java): a veces la gente hace:


try
{
     ...
}

catch (LaExcepcion e)
{
    .... // Logs o cosas así
    throw e;
}


Cuando en vez de "throw e;" deberían hacer "throw;" a secas. Al hacer throw e relanzas la excepción desde ese punto y te cargas toda la pila de llamadas de la excepción original. Al menos en C#, no sé si ocurre lo mismo en Java :)

Son dos "chorradas" pero a la hora de depurar son una putada. Además, que como dice Davur eso de poner las excepciones en la firma del método al final es poco más que un comentario glorificado que encima acopla el código.

Un saludo!

Vicente

shephiroth

Yo he tratado lo justo con excepciones, solamente las q java lanza por defecto, asi que mi coinocimiento quizás sea limitado.

Respecto a silenciar, en java hasta ahora no me he encontrado con ese problema, porque como tienes q decir implicitamente que excepciones puede lanzar un metodo si en un metodo que tiene try{}catch{} no le dices implicitamente que tiene q relanzarlas no puede, quieras o no, por lo q te ves obligado a responder a la excepcion. En el caso de que quieras que la excepcion vaya para abajo, con no poner el catch{} y definir a excepcion en el metodo es automatico, la excepcion pasa a quien llamo al metodo actual.

No se si me explico, realmente no le veo el uso..........quizas sea como comentaron y en java esto es un tema diferente y estoy hablando de mas.

Sobre relanzarlas......no estoy demasiado seguro, pero o manejas tu la excepcion o delegas en quien llamo a la funcion, pero creo q no puedes hacer ambas a la vez.  No le veo mucho uso, pero me imagino que si en c no hay que defiicir implicitamente las excepciones de un metodo....puede q sea de utilidad.

De todos modos es "reconfortante" ver diferencias entre java y c (para bien o para mal, eso ya depende de cada uno) xDD

SALU2






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.