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/