Ограничения на методы кодирования
От: Finder_b  
Дата: 09.09.10 19:30
Оценка:
Предположим гипотетическую ситуацию — на проекте запрещены не константные локальные переменные и больше одного return на функцию, одновременно. Я видел много рекомендаций, либо не использовать множество точек возврат, либо не использовать не константные локальные переменные. Во некоторых средах разработки даже анализаторы кода есть на эту тему.

Но как можно переписать, например, такой код, если следовать обоим рекомендациям одновременно?
Item findItem(int criteria1, Criterion criteria2) {
    for (Item current: items) {
       if (equalsByCriteria1(current, criteria1)
               && equalsByCriteria2(current, criteria2)) {
           return current;
       }
    }
    return DEFAULT;
}


Или например такой:
Color getComponentColor() {
    Color result;

    if (isSelected()) {
        result = getSelectedColor();
    } else if (isAlert()) {
        result = getAlertColor();
    } else {
        result = getNormalColor();
    }
    if (!isEnabled()) {
        result = makeDisabledColor(result);
    }
    return result;
}



Что-то мне не один вариант, как это можно переписать без сильного ухудшения читабильности кода, в голову не приходит (зашоренный взгляд?). Множественные return неплохо заменят "изменяемые" локальные переменные, и наоборот, а вот как быть если нельзя использовать оба варианта. И вообще стоит ли в ситуациях, похожих на вышеприведенные, избегать множественных ruturn и изменяемых локальных переменных?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.