Dart & Flutter: parametry funkcji – required, positional, optional & named

Words
225
Reading
1 min
Listen
Play
7y

Parametry funkcji w Dart


Required


'Dart parameters', tj. parametry funkcji... Nic ciekawego, co? Nic bardziej mylnego!
No, chyba że mówimy o pierwszym rodzaju, czyli ‚required’ - jest to najzwyklejszy rodzaj parametru, który na pewno znasz z innych języków.

void func(int i, int j) {}

Wywołując powyższą metodę, musisz podać i oraz j.

Positional & Optional


Tu się zaczyna robić ciekawiej. Spójrz na deklarację metody:

void func([String name]) {}

Wywołując ją, możesz, ale nie musisz podać wartości ,name’. Jeśli jej nie podasz, zostanie jej przypisany domyślnie ‚null’.

void func([String name = 'Dawid']) {}

Teraz gdy wywołasz funkcję ‚func’ bez podania ‚name’, nie zostanie jej przypisany ‚null’, ale tekst ‚Dawid’.

Można mieć kilka parametrów typu ‚positional’:

void func([String name = 'Dawid', int year]) {}

‚name’ i ‚year’ są tu opcjonalne, ale jeśli chcesz podać ‚year’ to musisz podać również ‚name’ - kolejność ma znaczenie!

func('Tomek', 2020); // Poprawne użycie
func(2020); // Niepoprawne użycie

Parametry ‚required’ i ‚positional’ mogą występować razem, o ile ‚required’ znajdą się przed ‚positional’

void func(String surname, [String name = 'Dawid', int year]) {}

Named parameters


Teraz moje ulubione. Masowo wykorzystywane przez widgety Flutter.

void func({String name, String surname}) {}

W tym przypadku oba parametry są opcjonalne z domyślną wartością ‚null’. Magia dzieje się jednak przy wywoływaniu metody:

func(
  name: 'Dawid',
  surname: 'Wnukowski',
  // Mały tip: przy ostatnim parametrze można dopisać ','
  // i dzięki temu wymusić dodanie nowej lini przy formatowaniu
);

Czy to nie jest piękne!? To znaczy czytelne?

Parametry ‚named’ również można łączyć z ‚required’ oraz przypisywać im domyślne wartości, na tej samej zasadzie co w ‚optional’. Przykładzik:

void func(int currentYear, {String name, String surname = 'Abc'}) {}

func(2020, name: 'Robert');

W tym przypadku, wartości zmiennych będą następujące:
year -> 2020
name -> Robert
surname -> Abc

To by było na tyle. Artykuł ten znajdziesz na mojej stronie, gdzie dodatkowo dowiesz się o adnotacji required używanej we Flutterze:
https://dawidwnukowski.pl/dart-parameters-required-positional-optional-named-functions/

Dart & Flutter: parametry funkcji – required, positional, optional ... | Ecency