Function - RETURN

Le
Annie L.
J'ai un "avertissement" dans VB 2005 qui se lit comme ceci :

>La fonction "ChangerDateCaractere" ne retourne pas une valeur pour tous les chemins de code. Une exception de référence Null peut se produire au moment de l'exécution lorsque le résultat est utilisé>

Voici cette fonction.

Private Function ChangerCaractereDate(ByVal strCodeDivers As String) As
String
Dim strDateCarac As String = String.Empty
Dim intCompteur As Integer = 0
Try
Do While intCompteur < 8
Select Case strCodeDivers.Substring(intCompteur, 1)
Case "a"
strDateCarac = strDateCarac & "0"
Case "b"
strDateCarac = strDateCarac & "1"
Case "c"
strDateCarac = strDateCarac & "2"
End Select
intCompteur += 1
Loop
Return strDateCarac
Catch objException As Exception
End Try
End Function


Quel est le problème de RETURN ????? par rapport à l'avertissement ????

Merci de vos réponses!
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques
Le #12226951
Bonjour,

Je crois que si tu ceci : ChangerCaractereDate = strDateCarac

devrait régler le problème

Jacques

PS ; Pas vivante cette liste ...

"Annie L." news:
J'ai un "avertissement" dans VB 2005 qui se lit comme ceci :

>La fonction "ChangerDateCaractere" ne retourne pas une valeur pour tous


les chemins de code. Une exception de référence Null peut se produire au
moment de l'exécution lorsque le résultat est utilisé>

Voici cette fonction....

Private Function ChangerCaractereDate(ByVal strCodeDivers As String) As
String
Dim strDateCarac As String = String.Empty
Dim intCompteur As Integer = 0
Try
Do While intCompteur < 8
Select Case strCodeDivers.Substring(intCompteur, 1)
Case "a"
strDateCarac = strDateCarac & "0"
Case "b"
strDateCarac = strDateCarac & "1"
Case "c"
strDateCarac = strDateCarac & "2"
End Select
intCompteur += 1
Loop
Return strDateCarac
Catch objException As Exception
End Try
End Function


Quel est le problème de RETURN ????? par rapport à l'avertissement ????

Merci de vos réponses!


Fred
Le #12226941
Dans : news:,
Annie L. disait :
J'ai un "avertissement" dans VB 2005 qui se lit comme ceci :

La fonction "ChangerDateCaractere" ne retourne pas une valeur pour
tous les chemins de code. Une exception de référence Null peut se
produire au moment de l'exécution lorsque le résultat est utilisé>



Voici cette fonction....

Private Function ChangerCaractereDate(ByVal strCodeDivers As
String) As String
Dim strDateCarac As String = String.Empty
Dim intCompteur As Integer = 0
Try
Do While intCompteur < 8
Select Case strCodeDivers.Substring(intCompteur, 1)
Case "a"
strDateCarac = strDateCarac & "0"
Case "b"
strDateCarac = strDateCarac & "1"
Case "c"
strDateCarac = strDateCarac & "2"
End Select
intCompteur += 1
Loop
Return strDateCarac
Catch objException As Exception
End Try
End Function


Quel est le problème de RETURN ????? par rapport à l'avertissement
????



Place ton Return après le End Try.
Le problème c'est qu'en cas d'erreur, ton code ne «passe» sur aucun
Return.
Ceci étant : pourquoi un Try Catch sur cette boucle ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
Annie L.
Le #12226921
J'ai compris qu'il faut placer "Return" juste avant "End Function". Mais si
je veux le placer ailleurs, il m'envoi un avertissement! Y-a-t-il un moyen de
le placer au travers du code! Peut-être le message avant a la solution :
ChangerDatecaractere = strdateCarac !!!! je vais faire des tests!!

Fred a dit : Ceci étant : pourquoi un Try Catch sur cette boucle ?

Intéressant!!!! J'aimerais avoir plus d'explications concernant le TRY
CATCH!!!
On ne doit pas s'en servir trop souvent ou seulement à des endroits
stratégiques??


Merci de vos réponses!




"Fred" wrote:

Dans : news:,
Annie L. disait :
> J'ai un "avertissement" dans VB 2005 qui se lit comme ceci :
>
>> La fonction "ChangerDateCaractere" ne retourne pas une valeur pour
>> tous les chemins de code. Une exception de référence Null peut se
>> produire au moment de l'exécution lorsque le résultat est utilisé>
>
> Voici cette fonction....
>
> Private Function ChangerCaractereDate(ByVal strCodeDivers As
> String) As String
> Dim strDateCarac As String = String.Empty
> Dim intCompteur As Integer = 0
> Try
> Do While intCompteur < 8
> Select Case strCodeDivers.Substring(intCompteur, 1)
> Case "a"
> strDateCarac = strDateCarac & "0"
> Case "b"
> strDateCarac = strDateCarac & "1"
> Case "c"
> strDateCarac = strDateCarac & "2"
> End Select
> intCompteur += 1
> Loop
> Return strDateCarac
> Catch objException As Exception
> End Try
> End Function
>
>
> Quel est le problème de RETURN ????? par rapport à l'avertissement
> ????

Place ton Return après le End Try.
Le problème c'est qu'en cas d'erreur, ton code ne «passe» sur aucun
Return.
Ceci étant : pourquoi un Try Catch sur cette boucle ?

--
Fred
http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)




ACH
Le #12226911
Une fonction peut comporter plusieurs "Return".
Mais elle ne peut pas se terminer sans.
--
Alain


"Annie L." wrote:

J'ai compris qu'il faut placer "Return" juste avant "End Function". Mais si
je veux le placer ailleurs, il m'envoi un avertissement! Y-a-t-il un moyen de
le placer au travers du code! Peut-être le message avant a la solution :
ChangerDatecaractere = strdateCarac !!!! je vais faire des tests!!

Fred a dit : Ceci étant : pourquoi un Try Catch sur cette boucle ?

Intéressant!!!! J'aimerais avoir plus d'explications concernant le TRY
CATCH!!!
On ne doit pas s'en servir trop souvent ou seulement à des endroits
stratégiques??


Merci de vos réponses!




"Fred" wrote:

> Dans : news:,
> Annie L. disait :
> > J'ai un "avertissement" dans VB 2005 qui se lit comme ceci :
> >
> >> La fonction "ChangerDateCaractere" ne retourne pas une valeur pour
> >> tous les chemins de code. Une exception de référence Null peut se
> >> produire au moment de l'exécution lorsque le résultat est utilisé>
> >
> > Voici cette fonction....
> >
> > Private Function ChangerCaractereDate(ByVal strCodeDivers As
> > String) As String
> > Dim strDateCarac As String = String.Empty
> > Dim intCompteur As Integer = 0
> > Try
> > Do While intCompteur < 8
> > Select Case strCodeDivers.Substring(intCompteur, 1)
> > Case "a"
> > strDateCarac = strDateCarac & "0"
> > Case "b"
> > strDateCarac = strDateCarac & "1"
> > Case "c"
> > strDateCarac = strDateCarac & "2"
> > End Select
> > intCompteur += 1
> > Loop
> > Return strDateCarac
> > Catch objException As Exception
> > End Try
> > End Function
> >
> >
> > Quel est le problème de RETURN ????? par rapport à l'avertissement
> > ????
>
> Place ton Return après le End Try.
> Le problème c'est qu'en cas d'erreur, ton code ne «passe» sur aucun
> Return.
> Ceci étant : pourquoi un Try Catch sur cette boucle ?
>
> --
> Fred
> http://www.cerber mail.com/?3kA6ftaCvT (enlever l'espace)
>
>


Gilles TOURREAU
Le #12226881
Le Thu, 29 Nov 2007 14:45:01 +0100, Annie L.

J'ai compris qu'il faut placer "Return" juste avant "End Function". Mais
si
je veux le placer ailleurs, il m'envoi un avertissement! Y-a-t-il un
moyen de
le placer au travers du code! Peut-être le message avant a la solution :
ChangerDatecaractere = strdateCarac !!!! je vais faire des tests!!

Fred a dit : Ceci étant : pourquoi un Try Catch sur cette boucle ?

Intéressant!!!! J'aimerais avoir plus d'explications concernant le TRY
CATCH!!!
On ne doit pas s'en servir trop souvent ou seulement à des endroits
stratégiques??


Merci de vos réponses!



La levée d'une exception signale le plus souvent une erreur de
programmation et indique que votre application devient instable (c'est à
dire que si vous continuer l'execution de votre code vous aurez des
pépins...)
On traite les exceptions uniquement :
- lorsque le code devient critique et en cas de pépin il faut faire
quelque chose (par exemple libération d'une ressource en cas de problème)
- lorsque le vous voulez en cas de problème "tuer un code" qui n'est plus
bon à executer (par exemple fermer une fenêtre car il y a un bogue)
- lorsque vous savez que vous pouvez prendre le contrôle total de
l'exception (par exemple un echec à la connexion à une base de donnée, car
le Login et/ou MP est incorrect)

Quand vous faites :

Try
....
....
Catch
....
....
End Try

Après le End Try, il faut s'assurer que votre application est stable
(c'est à dire qu'il y a toujours une bonne intégrité des
variables,...etc). Sinon il faut mieux ne pas traiter l'exception et
laisser les méthodes beaucoup "plus hautes" se charger de l'exception, et
au pire si aucun ne gère l'exception tuer votre application...). C'est le
prix à payer pour :
- au final avoir soit un programme qui fonctionne et qui produit des
résultats correct
- ou qui ne fonctionne pas et donc ne produit aucun résultat

au lieu d'avoir un programme "qui fonctionne" et qui produit n'importe
quoi comme résultats...

Dans votre cas, votre fonction n'est en aucun cas "critique" et ne
nécessite pas de traiter d'exception...

Normalement dans tout programme on traite très peu d'exception sauf au
niveau global pour générer un "rapport d'incident" et l'envoyer par e-mail
au ST du logiciel...

Il faut aussi éviter d'utiliser (question de performances) la gestion des
exceptions comme ceci :

Try
File.Open("C:.....MonFichier.txt")
Catch FileNotFound e
MsgBox "Impossible de trouver le fichier"
End Try

Préférez ce code :

If File.Exists("C:.....MonFichier.txt") Then
File.Open("C:.....MonFichier.txt")
Else
MsgBox "Impossible de trouver le fichier"
End If

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr
Annie L.
Le #12226811
Un gros MERCI! pour cette explication!



"Gilles TOURREAU" wrote:

Le Thu, 29 Nov 2007 14:45:01 +0100, Annie L.

> J'ai compris qu'il faut placer "Return" juste avant "End Function". Mais
> si
> je veux le placer ailleurs, il m'envoi un avertissement! Y-a-t-il un
> moyen de
> le placer au travers du code! Peut-être le message avant a la solution :
> ChangerDatecaractere = strdateCarac !!!! je vais faire des tests!!
>
> Fred a dit : Ceci étant : pourquoi un Try Catch sur cette boucle ?
>
> Intéressant!!!! J'aimerais avoir plus d'explications concernant le TRY
> CATCH!!!
> On ne doit pas s'en servir trop souvent ou seulement à des endroits
> stratégiques??
>
>
> Merci de vos réponses!

La levée d'une exception signale le plus souvent une erreur de
programmation et indique que votre application devient instable (c'est à
dire que si vous continuer l'execution de votre code vous aurez des
pépins...)
On traite les exceptions uniquement :
- lorsque le code devient critique et en cas de pépin il faut faire
quelque chose (par exemple libération d'une ressource en cas de problème)
- lorsque le vous voulez en cas de problème "tuer un code" qui n'est plus
bon à executer (par exemple fermer une fenêtre car il y a un bogue)
- lorsque vous savez que vous pouvez prendre le contrôle total de
l'exception (par exemple un echec à la connexion à une base de donnée, car
le Login et/ou MP est incorrect)

Quand vous faites :

Try
.....
.....
Catch
.....
.....
End Try

Après le End Try, il faut s'assurer que votre application est stable
(c'est à dire qu'il y a toujours une bonne intégrité des
variables,...etc). Sinon il faut mieux ne pas traiter l'exception et
laisser les méthodes beaucoup "plus hautes" se charger de l'exception, et
au pire si aucun ne gère l'exception tuer votre application...). C'est le
prix à payer pour :
- au final avoir soit un programme qui fonctionne et qui produit des
résultats correct
- ou qui ne fonctionne pas et donc ne produit aucun résultat

au lieu d'avoir un programme "qui fonctionne" et qui produit n'importe
quoi comme résultats...

Dans votre cas, votre fonction n'est en aucun cas "critique" et ne
nécessite pas de traiter d'exception...

Normalement dans tout programme on traite très peu d'exception sauf au
niveau global pour générer un "rapport d'incident" et l'envoyer par e-mail
au ST du logiciel...

Il faut aussi éviter d'utiliser (question de performances) la gestion des
exceptions comme ceci :

Try
File.Open("C:.....MonFichier.txt")
Catch FileNotFound e
MsgBox "Impossible de trouver le fichier"
End Try

Préférez ce code :

If File.Exists("C:.....MonFichier.txt") Then
File.Open("C:.....MonFichier.txt")
Else
MsgBox "Impossible de trouver le fichier"
End If

Cordialement

--
Gilles TOURREAU


S.A.R.L. P.O.S
Le spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr



Publicité
Poster une réponse
Anonyme