1

以下に例を示します。

公開リスト getPizzaIngredients(pizzaName)
{
    PizzaName = HAWAIIAN の場合
       戻る [
              チーズ、
              トマトソース、
              パイナップル、
              ハム];
    PizzaName = ITALIAN の場合
       戻る [
               チーズ、
               トマトソース、
               ペパロニ、
               オリーブ];

    PizzaName = MEATLOVERS の場合
       戻る [
               チーズ、
               トマトソース、
               ペパロニ、
               ベーコン、
               ソーセージ、
               オリーブ];

    null を返します。  
}

ここでは、各リストで成分を繰り返しています。別の方法は次のとおりです。

公開リスト getPizzaIngrediants(pizzaName)
{
    ing = [];
    ing.add(チーズ)
    ing.add(トマトソース);
    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);

返す;

または、より簡潔にすることもできます。

公開リスト getPizzaIngrediants(pizzaName)
{
    ing = [];
    ing.add(チーズ、トマトソース)
    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);   

返す;

個人的には、最初の例は冗長で、変数の繰り返しが含まれていますが、他の 2 つのソリューションよりもはるかに読みやすく、変更も容易です。

この種のプログラミングスタイル/問題に関する規則はありますか?

4

1 に答える 1

2

定数 HAWAIIAN ITALIAN MEATLOVERS だけがある場合は、それらを列挙型に入れます。できれば最初の形式にします - 素晴らしく読みやすい形式です。

ピザとトッピングが将来の変化の可能性を秘めた真のコンセプトになるとしたら (VEGGIE?!? 種類のチーズ?)、変更する必要がないという意味で、これらはすべて壊れてしまいます。あなたのコードに。必要なのは、材料 (price()? Tasty()?) 以外のピザの 2 番目のプロパティだけであり、新しいピザごとに複数の場所にコードを記述する必要があります。次に、適切なオブジェクト指向設計、抽象化された Pizza および Ingredients のサブクラスを持つクラス階層を使用する必要があります。

Head First Design Patterns の Factory の章に、非常によく似た分野をカバーする長いピザ店の例があります。

于 2013-09-20T02:44:01.727 に答える