Pull to refresh

В Dart 3.0 появились Switch expressions, что позволяет сразу получить значение на основе выражения. Это может выглядеть так:

var x = switch (y) { ... };
print(switch (x) { ... });
return switch (x) { ... };

Сейчас я расскажу, какие преимущества даст новый подход. ?

habr...
habr...

Теперь, когда мы получили погодные данные (Pop.medium и temp = 17.0 ) из приложения Weather Today, наш код будет выглядеть следующим образом:

/// Probability of precipitation
enum Pop { low, medium, high }

enum Things {
  umbrella, // зонт
  raincoat, // дождевик
  windbreaker, // ветровка
  glasses, // очки
  ;

  List<Things> takeExtra(double temp /*Celsius*/, Pop pop) {
    return ...;
  }
}

Для удобства я определил метод takeExtra внутри enum, чтобы иметь доступ к значениям без использования Things. всякий раз. Подумайте, как бы вы реализовали данный метод.

У меня получился вот такой код:

List<Things> takeExtra(double temp /*Celsius*/, Pop pop) => 
    switch (pop) {
      Pop.low when temp >= 10 => [glasses, windbreaker],
      Pop.low when temp < 10 => [windbreaker],
      Pop.medium when temp > 24 => [windbreaker],
      Pop.medium => [umbrella, windbreaker],
      Pop.high => [umbrella, raincoat],
      _ => [glasses],
    };

Заметьте, это выглядит достаточно ёмко и выразительно. Страшно представить, какая цепочка switch case и if'ов могла выстроиться в этом методе. И всё же, используйте с умом данное новшество – лучше написать понятней, чем вычурней.

А в завтрашний поход я возьму зонт и ветровку. ?

Total votes 7: ↑7 and ↓0+7
Comments1

Articles