Дротик чередуется много если

Я хочу заменить строку URL в Dart другой строкой. Пример:

if (url == "http://www.example.com/1") {
home = "example";
} else if (url == "http://www.example.com/2") {
home = "another example";
}

Разве нет лучшего способа с меньшим количеством кода и, возможно, быстрее? Я должен был бы сделать это более 60 раз..

5 ответов

Если вам нужно меньше кода, вы можете сделать что-то вроде этого:

homes = {
  "http://www.example.com/1": "example",
  "http://www.example.com/2": "another example",
  "http://www.example.com/3": "yet another one",
};
home = homes[url];

Мне нравится ответ Малдека, поскольку я лично считаю, что заявления о переключателях немного неудобно читать. Мне также нравится возможность иметь значение по умолчанию, чтобы вы могли "переопределить" оператор switch. Дополнительным преимуществом является то, что вы можете использовать его в качестве выражения, и он все еще безопасен для типов... вот так.

case2(myInputValue,
  {
    "http://www.example.com/1": "example",
    "http://www.example.com/2": "another example",
    "http://www.example.com/3": "yet another one",
  }, "www.google");

Код case2 может быть

TValue case2<TOptionType, TValue>(
  TOptionType selectedOption,
  Map<TOptionType, TValue> branches, [
  TValue defaultValue = null,
]) {
  if (!branches.containsKey(selectedOption)) {
    return defaultValue;
  }

  return branches[selectedOption];
}

Вы можете использовать оператор switch.

switch(variable_expression) { 
   case constant_expr1: { 
      // statements; 
   } 
   break; 

   case constant_expr2: { 
      //statements; 
   } 
   break; 

   default: { 
      //statements;  
   }
   break; 
} 

Ссылки

Карта

                    var mapper = {
                  'discountCode1': 0.5,
                  'discountCode2': 0.7,
                  'discountCode3': 0.8,
                };

Функция

                   double getDiscount(double price, String discountCode) {
                  if (mapper.containsKey(discountCode)) {
                    return mapper[discountCode]! * price;
                  } else {
                    return price;
                  }
                }

Просто сохраните значение " http://www.example.com/" в строковой переменной и объединяйте каждый раз. См. Ниже код

String originalUrl = 'https://www.example.com';
if (url == originalUrl + '/1') {

}
Другие вопросы по тегам