Dart parameters – required, positional, optional & named

Dart parameters – required, positional, optional & named

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:
currentYear -> 2020
name -> Robert
surname -> Abc

Flutter i @required

Jeśli widziałeś gdzieś kod napisany we Flutterze, mogłeś zauważyć adnotację @required dodawaną przed parametrami ‘named’.
Problemem jest, gdy chcemy, aby dany parametr był konieczny do podania w kodzie wywołującym daną metodę. Otóż nie da się tego zrobić 🙂
Możemy za to użyć @required i od teraz analiza kodu Dart, przypomni Ci (pokaże ostrzeżenie), o tym, że nie podałeś pewnego parametru (ale pozwoli Ci odpalić aplikację, więc uważaj).

import 'package:flutter/foundation.dart';

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

——————————

Mam nadzieję, że teraz wiesz wszystko o parametrach w Dart.

Jeśli interesujesz się Flutterem i Dartem, zapisz się do newslettera, zwłaszcza jeśli (Polski > Angielski == true) i chętnie przytulisz więcej treści w języku polskim 🙂

Ten post ma 2 komentarzy

  1. Tristy

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

    currentYear 🙂

Dodaj komentarz