Привет, я написал небольшую функцию, например
public void foo(MyClassA paraA) {
if (paraA == null) return;
MyClassB paraB = doSomeStuff(paraA);
if (paraB == null) return;
MyClassC paraC = doMoreStuff(paraB);
if (paraC == null) return;
....
}
Вышеупомянутое быстро терпит неудачу и приятно читать (т.е. намерение вернуться к нулевым значениям ясно). Но теперь вместо того, чтобы просто вернуться, я хочу вести журнал ошибок, поэтому я перешел на
public void foo(MyClassA paraA) {
if (paraA == null) {doLog(); return;}
MyClassB paraB = doSomeStuff(paraA);
if (paraB == null) {doLog(); return;}
MyClassC paraC = doMoreStuff(paraB);
if (paraC == null) {doLog(); return;}
....
}
Приведенное выше также чисто и легко читается, но мне приходится пару раз повторять doLog(). Поэтому я снова меняю на
public void foo(MyClassA paraA) {
if (paraA != null) {
MyClassB paraB = doSomeStuff(paraA);
if (paraB != null) {
MyClassC paraC = doMoreStuff(paraB);
if (paraC != null) {
....
return;
}
}
}
doLog();
}
Вышеупомянутый вызов doLog() только один раз, но я закончил с некоторыми глубоко вложенными операторами if, которые очень уродливы и трудно читаемы. Итак, как мне сохранить ту же чистоту, что и раньше, и использовать doLog() только один раз? Обратите внимание, что возврат чего-то другого вместо void для foo() не допускается. И я также читал, что использование try/catch вместо нулевой проверки является антишаблоном.
Если я попытаюсь, я хочу написать что-то вроде
public void foo(MyClassA paraA) {
while(true) {
if (paraA == null) break;
MyClassB paraB = doSomeStuff(paraA);
if (paraB == null) break;
MyClassC paraC = doMoreStuff(paraB);
if (paraC == null) break;
....
return;
}
doLog();
}
Вышеприведенное удовлетворяет всем моим потребностям (сбой быстро, чистый, без вложенных, если), но является ли использование цикла while здесь анти-шаблоном, поскольку цикл while здесь никогда не предназначен для запуска более одного раза?
doLog
? Можете ли вы изменить его, чтобы принимать параметры? - person shree.pat18   schedule 13.02.2015doLog
один раз в конце, вам не пришлось бы делать к ней повторные вызовы. - person shree.pat18   schedule 13.02.2015paraA, paraB, paraN
в массив. Затем переберите массив (проверьте на нуль). Если его значение равно null, создайте экземпляр значения вindex[n]
и передайте его в допустимых параметрах. - person benscabbia   schedule 13.02.2015