FI Je suis actuellement en train de restructurer mon programme pour être plus OO et de mieux mettre en œuvre des modèles connus, etc.Comment éviter plusieurs imbriquées
J'ai assez nombreuses déclarations imbriquées-IF et veulent se débarrasser d'eux. Comment puis-je m'y prendre? Ma première approche consistait à le faire avec des exceptions, par exemple.
public static Boolean MyMethod(String param) {
if (param == null)
throw new NullReferenceException("param may not be null");
if (param.Equals("none") || param.Equals("0") || param.Equals("zero"))
throw new ArgumentNullException("param may not be zero");
// Do some stuff with param
// This is not executed if param is null, as the program stops a soon
// as one of the above exceptions is thrown
}
La méthode est utilisée dans la classe principale de la demande, par ex.
static void Main() {
try {
Boolean test = MyClass.MyMethod(null); // Will throw an exception
} catch (Exception ex) {
MessageBox.Show(ex.Message, "Error");
}
Je pense que cela est tout à fait agréable, car il empêche les déclarations imbriquées et la quasi-totalité des actions méthodes sont bien disposées sur un seul niveau.
Comme IF-déclarations, la méthode devrait ressembler à ceci
public Boolean MyMethod(String param) {
if (param != null) {
if (!param.Equals("none") && !param.Equals("0") && !param.Equals("zero")) {
// Do some stuff with param
} else {
MessageBox.Show("param may not be zero", "Error");
} else {
MessageBox.Show("param may not be null", "Error");
}
}
que je trouve très, très laid et difficile à maintenir.
Maintenant, la question est; est cette approche bon? Je sais, cela peut être subjectif, mais comment surmontez-vous IFs imbriqués (1 ou 2 niveaux ne sont pas si mauvais, mais cela devient pire après cela ...)
Cela peut être juste un exemple de code, mais vous devriez vraiment éviter de lancer Exception. Utilisez ArgumentNullException etc. –
Et peut-être plus important encore, vous ne devriez pas lancer et ensuite attraper des exceptions comme ça. –
Il est un exemple de code, j'essaie toujours de mieux jeter des exceptions nommées pour le cas. Et la capture ne se fait évidemment pas dans la même méthode, elle est faite à un niveau beaucoup plus élevé de l'application, plus ou moins juste avant qu'ils ne montent en flèche chez l'utilisateur. –