Slt,
existe t il l'équivalent en pascal de la fonction Exit(<code d'erreur>) qui permet de sortir d'une fonction en indiquant un code d'erreur ?
Sinon peut on l'implémenter facilement ?
Merci
Version imprimable
Slt,
existe t il l'équivalent en pascal de la fonction Exit(<code d'erreur>) qui permet de sortir d'une fonction en indiquant un code d'erreur ?
Sinon peut on l'implémenter facilement ?
Merci
Code:
1
2
3
4
5
6
7 try // générère une exception avec un message personnalisé raise.Exception.Create('Mon message'); finally exit; end;
raise ne va-t-il pas lui même faire en sorte de sortir de la méthode ? En d'autres mots le exit est-il superflu ?Citation:
Envoyé par Malatar
oui bien sur on peut utiliser les exception pour y parvenir mais je trouve ça un peu "lourd" pour faire qqchose de finalement trés simple.
N'y aurait il pas une autre solution ? (un peut comme la Halt mais au niveau des fonctions)
merci
En quoi est-ce que raise est lourd ?Citation:
Envoyé par franckgar
et bien au lieu d'écrire ça :
je voudrais écrire ça :Code:
1
2
3
4
5 try if <Erreur> then raise MonException.Create(<code d'erreur>); except On E: MonException do Result := MonException.<code d'erreur>; end;
ce qui me parrait plus simple d'écriture (.... mais on est d'accord ça fait la même chose).Code:if <Erreur> then Exit(<code d'erreur>);
Peut-être est-ce que tu pourrais t'inspirer de Abort qui soulève une exception silencieuse. J'imagine une classe dérivée de EAbort qui conserverait un numéro d'erreur et une fonction Abort(Code: integer) qui la soulèverait.
Je n'utilises pas souvent cette méthode donc je ne pourrais pas te répondre.Citation:
Envoyé par slimjoe
Mais bon, ca depend où il veut intercepter l'erreur : à l'interrieur de la fonction ou à l'extérieur ?
Ok je comprends mieux... toutes tes méthodes sont des fonctions et toutes ces fonctions retournent des entiers c'est ça ?Citation:
Envoyé par franckgar
En gros, tu voudrais que Result := 123 te sorte de la fonction c'est ça ? Un peu comme le return de d'autres langages ?
Et ça est-ce que ça t'irais ce code ?
Pour l'appeller :Code:
1
2
3
4
5 procedure Exit(out Result: integer; const Code: integer); begin Result := Code; Abort; end;
J'ai rien testé tout est improvisé alors il est possible que ça plante ;).Code:
1
2
3
4 function MaFonction: integer; begin if <erreur> then Exit(Result, 123); end;
[EDIT]
Bon je viens de tester et Abort semble être une mauvaise idée....
Result étant un mot réservé, je doute de la fiabilité de ce code et des problèmes qu'il pourrait entrainer.Citation:
Envoyé par slimjoe
Effectivement, ça ne fonctionne pas mais c'est plus à cause du Abort que du Result (Result ne semble pas être un mot réservé au même titre que type, procedure ou begin. Ça ressemblerait plus une variable déclarée implicitement à l'intérieur des fonctions. On ne peut pas déclarer un 2e Result à l'intérieur d'une fonction par exemple.)Citation:
Envoyé par Malatar
Dans ma suggestion, Abort semble faire sortir de toutes les fonctions ce qui n'est pas l'objectif de notre ami.
Retour à la case départ.
si si, on peutCitation:
Envoyé par slimjoe
Tant que le code n'est pas exécuté completement (en clair qu'il n'arrive aps sur le end final de la fonction), tu peux modifier le Result autant de fois que tu le souhaites.Code:
1
2
3
4
5
6
7
8 function Montest (bTest : Boolean) : Boolean; begin Result := False; if bTest then Result := True; end;
Oui, Abort ca tue toutCitation:
Dans ma suggestion, Abort semble faire sortir de toutes les fonctions ce qui n'est pas l'objectif de notre ami.
et pourquoi pas ca:Citation:
Envoyé par franckgar
C'est pas Exit(code) mais bon, c'est toujours moin pire que try-raise-except?Code:
1
2 if <Erreur> then begin result:=<Code erreur>;Exit; End;
Citation:
Envoyé par slimjoe
Mais...Citation:
Envoyé par Malatar
...va planter ;).Code:
1
2
3
4
5
6
7
8
9 function Montest (bTest : Boolean) : Boolean; var Result: boolean; begin Result := False; if bTest then Result := True; end;
J'adore cette expression :)Citation:
Envoyé par slimjoe
[EDIT]
Typo