Может ли функция в flutter (Dart) возвращать разные типы данных на основе некоторых условий

#flutter #dart

#flutter #dart

Вопрос:

Например, учитывая псевдокод

 getResult(){
    List lst=[1,"5",4];
    String str="five";
    if(condition){
        return lst;
    }
    else{
        return str;
    }
}
  

может ли что-то подобное быть достигнуто в flutter.

Комментарии:

1. Вы пробовали сами?

2. нет … потому что мне нужно будет указать, какой тип она вернет перед именем функции, поэтому я запутался, на котором я укажу строку или список, например: String func(){}

Ответ №1:

Да, что-то подобное можно сделать в dart / flutter. Кстати, ваш псевдокод будет работать, если вы объявите bool condition;

пример:

 getResult(){
    List lst=[1,"5",4];
    var str = 1;
    
    if(str.runtimeType == String){
      print(lst[1]);
    } else if(str.runtimeType == int){
      print('${lst[0]}, ${lst[2]}');
    }
  }
  

В этом примере результат будет зависеть от типа переменной str. Конечно, вы также можете использовать другие типы для сравнения (double, bool)

Комментарии:

1. не могли бы вы показать мне, как определение такой функции будет выглядеть в реальном коде dart

2. Я добавил это в ответ, взгляните.

3. ваш код напечатает выходные данные.. но я хочу получить выходные данные и использовать их в других вычислениях

4. вы можете просто заменить print на return

Ответ №2:

Ответ на вопрос — да. Вы можете определить функцию как возвращающую dynamic и возвращать любой тип, который вы хотите.

Вы должны это сделать? Вероятно, нет. Посмотрите на создание типа объединения. Тип объединения, встроенный в Dart, является FutureOr классом, который может представлять будущий или разрешенный тип. Замороженный пакет может помочь генерировать типы объединения без лишней суеты.