Szukaj…


Uwagi

Dart jest prawdziwym językiem zorientowanym obiektowo, więc nawet funkcje są obiektami i mają typ Funkcji. Oznacza to, że funkcje można przypisać do zmiennych lub przekazać jako argumenty do innych funkcji. Możesz także wywołać instancję klasy Dart, tak jakby to była funkcja.

Funkcje o nazwanych parametrach

Podczas definiowania funkcji użyj {param1, param2,…}, aby określić nazwane parametry:

void enableFlags({bool bold, bool hidden}) {
  // ...
}

Podczas wywoływania funkcji można podać nazwane parametry za pomocą parametru paramName: wartość

enableFlags(bold: true, hidden: false);

Określanie zakresu funkcji

Funkcje Dart mogą być również deklarowane anonimowo lub zagnieżdżone. Na przykład, aby utworzyć funkcję zagnieżdżoną, wystarczy otworzyć nowy blok funkcyjny w istniejącym bloku funkcyjnym

void outerFunction() {
  
    bool innerFunction() {
        /// Does stuff
    }
}

Funkcji innerFunction można teraz używać wewnątrz i tylko w funkcji outerFunction . Żadne inne funkcje nie mają do niego dostępu.

Funkcje w Dart mogą być również deklarowane anonimowo, co jest powszechnie używane jako argumenty funkcji. Typowym przykładem jest metoda sort obiektu List . Ta metoda pobiera opcjonalny argument z następującym podpisem:

int compare(E a, E b)

Państwa dokumentacji, że funkcja musi powrócić 0 jeśli i a b są równe. Zwraca -1 jeśli a < b oraz 1 jeśli a > b .

Wiedząc o tym, możemy posortować listę liczb całkowitych za pomocą anonimowej funkcji.

List<int> numbers = [4,1,3,5,7];

numbers.sort((int a, int b) {
   if(a == b) {
      return 0;
   } else if (a < b) {
      return -1;
   } else {
      return 1;
   }
});

Funkcja anonimowa może być również powiązana z takimi identyfikatorami:

Function intSorter = (int a, int b) {
   if(a == b) {
      return 0;
   } else if (a < b) {
      return -1;
   } else {
      return 1;
   }
}

i używane jako zwykła zmienna.

numbers.sort(intSorter);


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow