Imaginons une classe dont au passe au constructeur une string représentant
le chemin absolu vers un fichier. Au sein du constructeur, on test si le
fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que
l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:\fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
nicolas franchet
Plusieurs solutions possibles :
1. Soit par une propriete indiquant que le fichier n'est pas bon donc faire un test du style if(!testObj.Valid) {...} 2. Soit par une methode statique pour creer l'objet Test testObj=Test.Create("..."); et c'est le Test.Create qui retourne un new Test() ou null en cas d'erreur 3. Soit par un Try/Catch try { testObj=new Test("..."); //C'est le constructeur de Test qui leve une exception } catch (Exception e) { Console.WriteLine("....."); }
La "meilleure" methode est la troisieme. Mais les autres fonctionnent quand meme :)
Nicolas Franchet
Fabian Vilers wrote:
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
Plusieurs solutions possibles :
1. Soit par une propriete indiquant que le fichier n'est pas bon donc
faire un test du style if(!testObj.Valid) {...}
2. Soit par une methode statique pour creer l'objet
Test testObj=Test.Create("..."); et c'est le Test.Create qui retourne
un new Test() ou null en cas d'erreur
3. Soit par un Try/Catch
try {
testObj=new Test("..."); //C'est le constructeur de Test qui leve une
exception
} catch (Exception e) {
Console.WriteLine(".....");
}
La "meilleure" methode est la troisieme. Mais les autres fonctionnent
quand meme :)
Nicolas Franchet
Fabian Vilers wrote:
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant
le chemin absolu vers un fichier. Au sein du constructeur, on test si le
fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que
l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
1. Soit par une propriete indiquant que le fichier n'est pas bon donc faire un test du style if(!testObj.Valid) {...} 2. Soit par une methode statique pour creer l'objet Test testObj=Test.Create("..."); et c'est le Test.Create qui retourne un new Test() ou null en cas d'erreur 3. Soit par un Try/Catch try { testObj=new Test("..."); //C'est le constructeur de Test qui leve une exception } catch (Exception e) { Console.WriteLine("....."); }
La "meilleure" methode est la troisieme. Mais les autres fonctionnent quand meme :)
Nicolas Franchet
Fabian Vilers wrote:
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
Fabien Bezagu
Lancer une exception me paraît adéquat et correspond bien à l'utilisation des exceptions. Lorsqu'une exception est lancée depuis un contructeur, l'instance n'est pas contruite et la référence de l'objet reste nul. Donc pas de problème.
Par contre, il faut utiliser un bloc try...catch plutôt qu'un test de nullité.
Fabien
"Fabian Vilers" a écrit dans le message de news: 42dcc492$0$1827$
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
Lancer une exception me paraît adéquat et correspond bien à l'utilisation
des exceptions. Lorsqu'une exception est lancée depuis un contructeur,
l'instance n'est pas contruite et la référence de l'objet reste nul. Donc
pas de problème.
Par contre, il faut utiliser un bloc try...catch plutôt qu'un test de
nullité.
Fabien
"Fabian Vilers" <fvilers@REMOVME.be.keyware.com> a écrit dans le message de
news: 42dcc492$0$1827$6c56d894@reader0.news.be.easynet.net...
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant
le chemin absolu vers un fichier. Au sein du constructeur, on test si le
fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait
que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des
execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
Lancer une exception me paraît adéquat et correspond bien à l'utilisation des exceptions. Lorsqu'une exception est lancée depuis un contructeur, l'instance n'est pas contruite et la référence de l'objet reste nul. Donc pas de problème.
Par contre, il faut utiliser un bloc try...catch plutôt qu'un test de nullité.
Fabien
"Fabian Vilers" a écrit dans le message de news: 42dcc492$0$1827$
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
Pascal Soveaux
"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> wrote in message news:42dccceb$0$18769$
Lancer une exception me paraît adéquat et correspond bien à l'utilisation des exceptions. Lorsqu'une exception est lancée depuis un contructeur, l'instance n'est pas contruite et la référence de l'objet reste nul. Donc pas de problème.
Par contre, il faut utiliser un bloc try...catch plutôt qu'un test de nullité.
Fabien
"Fabian Vilers" a écrit dans le message de news: 42dcc492$0$1827$
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
A mon humble avis, j'utiliserais l'exception s'il s'agit d'une réellement d'une exception (le fichier DOIT exister). Sinon, il ne s'agit pas d'une exception et j'utiliserais plutôt une fonction du style Open(filename). D'autre part, le fichier peut exister mais ne pas pouvoir être ouvert ou exister à t et avoir été supprimé à t+1 donc un test d'existence ne suffit pas.
Pascal
"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> wrote in message
news:42dccceb$0$18769$636a15ce@news.free.fr...
Lancer une exception me paraît adéquat et correspond bien à l'utilisation
des exceptions. Lorsqu'une exception est lancée depuis un contructeur,
l'instance n'est pas contruite et la référence de l'objet reste nul. Donc
pas de problème.
Par contre, il faut utiliser un bloc try...catch plutôt qu'un test de
nullité.
Fabien
"Fabian Vilers" <fvilers@REMOVME.be.keyware.com> a écrit dans le message
de news: 42dcc492$0$1827$6c56d894@reader0.news.be.easynet.net...
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string
représentant le chemin absolu vers un fichier. Au sein du constructeur,
on test si le fichier existe. S'il existe, on continue. S'il n'existe
pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire?
Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
A mon humble avis, j'utiliserais l'exception s'il s'agit d'une réellement
d'une exception (le fichier DOIT exister). Sinon, il ne s'agit pas d'une
exception et j'utiliserais plutôt une fonction du style Open(filename).
D'autre part, le fichier peut exister mais ne pas pouvoir être ouvert ou
exister à t et avoir été supprimé à t+1 donc un test d'existence ne suffit
pas.
"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> wrote in message news:42dccceb$0$18769$
Lancer une exception me paraît adéquat et correspond bien à l'utilisation des exceptions. Lorsqu'une exception est lancée depuis un contructeur, l'instance n'est pas contruite et la référence de l'objet reste nul. Donc pas de problème.
Par contre, il faut utiliser un bloc try...catch plutôt qu'un test de nullité.
Fabien
"Fabian Vilers" a écrit dans le message de news: 42dcc492$0$1827$
Bonjour à tous,
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Test testObj = new Test("c:fichier.txt");
if (testObj == null) Console.WriteLine("Le fichier n'existe pas");
A mon humble avis, j'utiliserais l'exception s'il s'agit d'une réellement d'une exception (le fichier DOIT exister). Sinon, il ne s'agit pas d'une exception et j'utiliserais plutôt une fonction du style Open(filename). D'autre part, le fichier peut exister mais ne pas pouvoir être ouvert ou exister à t et avoir été supprimé à t+1 donc un test d'existence ne suffit pas.
Pascal
Fabian Vilers
>
Merci à tous, il s'agit bien d'une exception car le fichier doit exister.
>
Merci à tous, il s'agit bien d'une exception car le fichier doit exister.
Merci à tous, il s'agit bien d'une exception car le fichier doit exister.
Delf
Fabian Vilers wrote:
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Je vais peut être dire une bétise mais moi, je ne ferai pas de test dans le constructeur : je ferai ceci :
- j'aurais un constructeur qui initialiserait mon membre m_File avec la string en paramètre, - puis j'aurais une méthode bool DoesFileExist() qui testerait m_File... mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
-- Delf
Fabian Vilers wrote:
Imaginons une classe dont au passe au constructeur une string représentant
le chemin absolu vers un fichier. Au sein du constructeur, on test si le
fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que
l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Je vais peut être dire une bétise mais moi, je ne ferai pas de test dans
le constructeur : je ferai ceci :
- j'aurais un constructeur qui initialiserait mon membre m_File avec
la string en paramètre,
- puis j'aurais une méthode bool DoesFileExist() qui testerait
m_File... mais bon, dans ce cas, il y a création de l'objet :
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du constructeur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je faire? Utiliser des execeptions?
Je vais peut être dire une bétise mais moi, je ne ferai pas de test dans le constructeur : je ferai ceci :
- j'aurais un constructeur qui initialiserait mon membre m_File avec la string en paramètre, - puis j'aurais une méthode bool DoesFileExist() qui testerait m_File... mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
-- Delf
Fabien Bezagu
Comme l'a justement soulevé Pascal, il s'agissait de savoir si le fich ier DOIT exister. Fabian nous l'a confirmé.
Partant de là, la méthode de l'exception dans le constructeur est clairement la meilleure solution car cela induit que l'existence d'une instance dépend intimement de celle du fichier. Dans ta proposition - qui peut être bonne dans certaines situations - on peut effectivement voir que ce n'est pas le cas.
Fabien
On Tue, 19 Jul 2005 18:15:37 +0200, Delf wrote:
Fabian Vilers wrote:
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du construct eur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je fa ire? Utiliser des execeptions?
Je vais peut être dire une bétise mais moi, je ne ferai pas de tes t dans le constructeur : je ferai ceci :
- j'aurais un constructeur qui initialiserait mon membre m_File avec la string en paramètre, - puis j'aurais une méthode bool DoesFileExist() qui testerait m_File... mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
-- Delf
Comme l'a justement soulevé Pascal, il s'agissait de savoir si le fich ier
DOIT exister. Fabian nous l'a confirmé.
Partant de là, la méthode de l'exception dans le constructeur est
clairement la meilleure solution car cela induit que l'existence d'une
instance dépend intimement de celle du fichier. Dans ta proposition - qui
peut être bonne dans certaines situations - on peut effectivement voir que
ce n'est pas le cas.
Fabien
On Tue, 19 Jul 2005 18:15:37 +0200, Delf <abuse@wanadoo.fr> wrote:
Fabian Vilers wrote:
Imaginons une classe dont au passe au constructeur une string
représentant le chemin absolu vers un fichier. Au sein du construct eur,
on test si le fichier existe. S'il existe, on continue. S'il n'existe
pas, il faudrait que l'objet ne soit pas créé. Comment puis-je fa ire?
Utiliser des execeptions?
Je vais peut être dire une bétise mais moi, je ne ferai pas de tes t dans
le constructeur : je ferai ceci :
- j'aurais un constructeur qui initialiserait mon membre m_File avec
la string en paramètre,
- puis j'aurais une méthode bool DoesFileExist() qui testerait
m_File... mais bon, dans ce cas, il y a création de l'objet :
Comme l'a justement soulevé Pascal, il s'agissait de savoir si le fich ier DOIT exister. Fabian nous l'a confirmé.
Partant de là, la méthode de l'exception dans le constructeur est clairement la meilleure solution car cela induit que l'existence d'une instance dépend intimement de celle du fichier. Dans ta proposition - qui peut être bonne dans certaines situations - on peut effectivement voir que ce n'est pas le cas.
Fabien
On Tue, 19 Jul 2005 18:15:37 +0200, Delf wrote:
Fabian Vilers wrote:
Imaginons une classe dont au passe au constructeur une string représentant le chemin absolu vers un fichier. Au sein du construct eur, on test si le fichier existe. S'il existe, on continue. S'il n'existe pas, il faudrait que l'objet ne soit pas créé. Comment puis-je fa ire? Utiliser des execeptions?
Je vais peut être dire une bétise mais moi, je ne ferai pas de tes t dans le constructeur : je ferai ceci :
- j'aurais un constructeur qui initialiserait mon membre m_File avec la string en paramètre, - puis j'aurais une méthode bool DoesFileExist() qui testerait m_File... mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
-- Delf
Ambassadeur Kosh
> - j'aurais un constructeur qui initialiserait mon membre m_File avec la string en paramètre, - puis j'aurais une méthode bool DoesFileExist() qui testerait m_File... mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
que c'est se compliquer la vie.
type x = ... ... f(x) ; // x contient il = une "bonne" ou une "mauvaise" valeur ?
alors qu'avec une logique d'exception, à chaque ligne, quand on voit x, il contient une bonne valeur. si ça n'etait pas le cas, une exception aurait claqué et on ne serait pas sur cette ligne. les valeurs d'erreur obligent à multiplier les tests, augmentent la taille du code considerablement, et tout ça, en definitive, pour rien.
> - j'aurais un constructeur qui initialiserait mon membre m_File avec la
string en paramètre,
- puis j'aurais une méthode bool DoesFileExist() qui testerait m_File...
mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
que c'est se compliquer la vie.
type x = ...
...
f(x) ; // x contient il = une "bonne" ou une "mauvaise" valeur ?
alors qu'avec une logique d'exception, à chaque ligne, quand on voit x, il
contient une bonne valeur. si ça n'etait pas le cas, une exception aurait
claqué et on ne serait pas sur cette ligne.
les valeurs d'erreur obligent à multiplier les tests, augmentent la taille
du code considerablement, et tout ça, en definitive, pour rien.
> - j'aurais un constructeur qui initialiserait mon membre m_File avec la string en paramètre, - puis j'aurais une méthode bool DoesFileExist() qui testerait m_File... mais bon, dans ce cas, il y a création de l'objet :
Vous en pensez quoi ?
que c'est se compliquer la vie.
type x = ... ... f(x) ; // x contient il = une "bonne" ou une "mauvaise" valeur ?
alors qu'avec une logique d'exception, à chaque ligne, quand on voit x, il contient une bonne valeur. si ça n'etait pas le cas, une exception aurait claqué et on ne serait pas sur cette ligne. les valeurs d'erreur obligent à multiplier les tests, augmentent la taille du code considerablement, et tout ça, en definitive, pour rien.