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

in #programming5 years ago (edited)

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/

Sort:  

Bążur @vuko!


Witamy na #polish, czyli polskim tagu Steem! Moim zadaniem jest wprowadzenie Cię w tajniki sieci.

    - Użytkownicy sieci nie lubią plagiatów, oszustw, promowania piramid finansowych i obrażania innych. Warto mieć to na uwadze publikując wpis.
    - Jeśli wpis zawiera duże dawki wulgaryzmów, pornografii i treści dla dorosłych, rozważ użycie tagu nsfw.
    - Uważaj na oszustwa! Różne osoby mogą próbować wyciągnąć od Ciebie tokeny lub delegacje (prośby, klikanie w linki, próby przejęcia Twojego hasła do konta). W razie wątpliwości wejdź na Chat Polskiej społeczności i zapytaj o zaistniałą sytuację.
    - Chat Steemit Polska to otwarty chat całej polskiej społeczności. Kliknij w ten link aby go uruchomić. Chat nie jest zintegrowany ze Steem - zakładasz tam zwykłe konto, podobnie jak w wielu usługach sieciowych. Wygodnie jest jednak użyć takiego samego nicka jak na Steem.
    - Zachęcamy Cię do odwiedzenia FAQ na steemweb.pl, gdzie możesz dowiedzieć się mnóstwa rzeczy związanych ze Steemem. Jest to wybór najlepszych poradników stworzonych przez doświadczonych użytkowników platformy.
    - Nie wiesz jakich tagów użyć do wpisu? Zajrzyj na listę tagów lub wybierz coś z drzewa tagów.. Odpowiednie tagi zwiększą zasięg twoich postów i nagrody z nich!
    - Zapisz hasło w bezpiecznych miejscach! Jeśli je utracisz, to nigdy już nie odzyskasz konta!

Baw się dobrze!

Congratulations @vuko! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You got a First Vote

You can view your badges on your Steem Board and compare to others on the Steem Ranking
If you no longer want to receive notifications, reply to this comment with the word STOP

Vote for @Steemitboard as a witness to get one more award and increased upvotes!

Dzięki, zobaczę później co i jak ;)