What is a typedef in Dart?

后端 未结 5 1600
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-04 15:34

I have read the description, and I understand that it is a function-type alias.

  • A typedef, or function-type alias, gives a function type a name that you can

相关标签:
5条回答
  • 2020-12-04 15:49

    Dart 1.24 introduces a new typedef syntax to also support generic functions. The previous syntax is still supported.

    typedef F = List<T> Function<T>(T);
    

    For more details see https://github.com/dart-lang/sdk/blob/master/docs/language/informal/generic-function-type-alias.md

    Function types can also be specified inline

    void foo<T, S>(T Function(int, S) aFunction) {...}
    

    See also https://www.dartlang.org/guides/language/language-tour#typedefs

    0 讨论(0)
  • 2020-12-04 15:50

    Typedef in Dart is used to create a user-defined function (alias) for other application functions,

    Syntax: typedef function_name (parameters);
    

    With the help of a typedef, we can also assign a variable to a function.

    Syntax:typedef variable_name = function_name;
    

    After assigning the variable, if we have to invoke it then we go as:

    Syntax: variable_name(parameters);
    

    Example:

    // Defining alias name
    typedef MainFunction(int a, int b);
    
    functionOne(int a, int b) {
      print("This is FunctionOne");
      print("$a and $b are lucky numbers !!");
    }
    
    functionTwo(int a, int b) {
      print("This is FunctionTwo");
      print("$a + $b is equal to ${a + b}.");
    }
    
    // Main Function
    void main() {
      // use alias
      MainFunction number = functionOne;
    
      number(1, 2);
    
      number = functionTwo;
     // Calling number
      number(3, 4);
    }
    

    Output:

    This is FunctionOne
    1 and 2 are lucky numbers !!
    This is FunctionTwo
    3 + 4 is equal to 7
    
    0 讨论(0)
  • 2020-12-04 15:59

    A common usage pattern of typedef in Dart is defining a callback interface. For example:

    typedef void LoggerOutputFunction(String msg);
    
    class Logger {
      LoggerOutputFunction out;
      Logger() {
        out = print;
      }
      void log(String msg) {
        out(msg);
      }
    }
    
    void timestampLoggerOutputFunction(String msg) {
      String timeStamp = new Date.now().toString();
      print('${timeStamp}: $msg');
    }
    
    void main() {
      Logger l = new Logger();
      l.log('Hello World');
      l.out = timestampLoggerOutputFunction;
      l.log('Hello World');
    }
    

    Running the above sample yields the following output:

    Hello World
    2012-09-22 10:19:15.139: Hello World

    The typedef line says that LoggerOutputFunction takes a String parameter and returns void.

    timestampLoggerOutputFunction matches that definition and thus can be assigned to the out field.

    Let me know if you need another example.

    0 讨论(0)
  • 2020-12-04 15:59

    Just slightly modified answer, according to the latest typedef syntax, The example could be updated to:

    typedef LoggerOutputFunction = void Function(String msg);
    
    class Logger {
      LoggerOutputFunction out;
      Logger() {
        out = print;
      }
      void log(String msg) {
        out(msg);
      }
    }
    
    void timestampLoggerOutputFunction(String msg) {
      String timeStamp = new Date.now().toString();
      print('${timeStamp}: $msg');
    }
    
    void main() {
      Logger l = new Logger();
      l.log('Hello World');
      l.out = timestampLoggerOutputFunction;
      l.log('Hello World');
    }
    
    0 讨论(0)
  • 2020-12-04 16:04
    typedef LoggerOutputFunction = void Function(String msg);
    

    this looks much more clear than previous version

    0 讨论(0)
提交回复
热议问题