Допустимо ли повторять переменные при перечислении переменных для определенных объектов?

Вот пример:

public list getPizzaIngredients(pizzaName)
{
    if pizzaName = HAWAIIAN
       return [
              CHEESE,
              TOMATO SAUCE,
              PINEAPPLE, 
              HAM];
    if pizzaName = ITALIAN
       return [
               CHEESE,
               TOMATO SAUCE,
               PEPPERONI,
               OLIVES]; 

    if pizzaName = MEATLOVERS
       return [
               CHEESE,
               TOMATO SAUCE,
               PEPPERONI,
               BACON,
               SAUSAGE,
               OLIVES]; 

    return null;  
}

Здесь мы повторяем ингредиенты в каждом списке. Альтернативный способ сделать это:

public list getPizzaIngrediants(pizzaName)
{
    ing = [];
    ing.add(CHEESE) 
    ing.add(TOMATO SAUCE); 
    if pizzaName in (HAWAIIAN)            ing.add(PINEAPPLE);
    if pizzaName in (HAWAIIAN)            ing.add(HAM);  
    if pizzaName in (ITALIAN, MEATLOVERS) ing.add(PEPPERONI);
    if pizzaName in (ITALIAN, MEATLOVERS) ing.add(OLIVES);
    if pizzaName in (MEATLOVERS)          ing.add(BACON);   
    if pizzaName in (MEATLOVERS)          ing.add(SAUSAGE); 

return ing; 

или мы могли бы сделать это более кратким:

public list getPizzaIngrediants(pizzaName)
{
    ing = []; 
    ing.add(CHEESE,TOMATO SAUCE) 
    if pizzaName in (HAWAIIAN)            ing.add(PINEAPPLE, HAM);
    if pizzaName in (ITALIAN, MEATLOVERS) ing.add(PEPPERONI, OLIVES);
    if pizzaName in (MEATLOVERS)          ing.add(BACON, SAUSAGE);   

return ing; 

Теперь лично - хотя первый пример более многословен и включает в себя повторение переменных, он гораздо более читаем и легче модифицируется, чем два других решения.

Существует ли соглашение об этом стиле/проблеме программирования?


person dwjohnston    schedule 20.09.2013    source источник
comment
Поскольку этот вопрос в первую очередь основан на мнении, на этот вопрос нет одного ответа, и поэтому его следует закрыть.   -  person Joren    schedule 20.09.2013
comment
Я не согласен - это не вопрос, на который можно ответить только через мнение. Вопрос в том, существует ли соглашение относительно таких стандартных задач программирования. Я бы сказал, что, хотя стандарта нет, вы обнаружите, что то, как вы реализуете такое решение, довольно часто определяется вашей средой. На рабочем месте у вас могут быть стандарты, которые диктуют эффективность или удобочитаемость; это к ситуации, в которой вы находитесь, я думаю. Тем не менее, я думаю, что в приведенном выше случае правильный способ справиться с этим больше зависит от того, ищете ли вы эффективность, удобочитаемость или что-то среднее между ними.   -  person Jay Taplin    schedule 20.09.2013


Ответы (1)


Если у вас есть только константы HAWAIIAN ITALIAN MEATLOVERS, поместите их в перечисление, желательно в первом формате — красиво и читабельно.

Если пицца и начинки, что весьма вероятно, станут реальными понятиями с потенциалом для будущих изменений (ВЕГГИ?!? виды сыра?), все это сломается, в том смысле, что в ваш код не нужно вносить никаких изменений. Все, что требуется, — это второе свойство пиццы помимо ингредиентов (цена()? вкусно()?), и для каждой новой пиццы вы должны написать код в нескольких местах. Затем вы должны использовать правильный объектно-ориентированный дизайн, иерархию классов с подклассами абстрактов Пицца и Ингредиенты.

В главе «Фабрика» книги Head First Design Patterns есть длинный пример магазина пиццы, охватывающий очень похожую тему.

person clwhisk    schedule 20.09.2013