Sobes.tech
Junior

Na co se používají pojmenované parametry ve funkcích a konstruktorech?

sobes.tech AI

Odpověď od AI

Názvové parametry ve funkcích a konstruktorech Dart/Flutter řeší několik úkolů:

  1. Zlepšení čitelnosti kódu: Názvy parametrů jasně uvádějí jejich účel při volání. To je obzvlášť užitečné, když funkce nebo konstruktor má mnoho argumentů stejného typu.

    // Bez názvových parametrů není ihned jasné, co znamenají 1.0 a 5.0
    Widget buildContainer(1.0, 5.0, Colors.blue);
    
    // S názvovými parametry je přiřazení argumentů zřejmé
    Widget buildContainer({double? padding, double? margin, Color? color});
    Widget container = buildContainer(padding: 1.0, margin: 5.0, color: Colors.blue);
    
  2. Zajištění flexibility volání: Umožňují volat funkce nebo konstruktor pouze s těmi parametry, které jsou potřeba, ostatní ignorovat, pokud nejsou povinné (s použitím required nebo výchozích hodnot).

    // Volání s předáním pouze potřebných parametrů
    Widget container = buildContainer(color: Colors.red);
    
  3. Zabránění chybám v pořadí argumentů: Protože jsou parametry uváděny jménem, jejich pořadí při volání není důležité, což eliminuje chyby spojené s nesprávným pořadím.

    // Pořadí názvových parametrů není důležité
    Widget container1 = buildContainer(padding: 1.0, color: Colors.blue);
    Widget container2 = buildContainer(color: Colors.blue, padding: 1.0); // Ekvivalent
    
  4. Vylepšení podpory kódu: Názvové parametry usnadňují přidávání nových volitelných parametrů v budoucích verzích funkce nebo třídy bez nutnosti měnit stávající volání.

V Flutteru většina widgetů používá názvové parametry, což činí jejich API intuitivnější a flexibilnější.

Jsou deklarovány v závorkách {} v seznamu parametrů funkce nebo konstruktoru. Povinné názvové parametry jsou označeny klíčovým slovem required.

// Povinný názvový parametr
void printRequiredName({required String name}) {
  print(name);
}

// Nepovinný názvový parametr s výchozí hodnotou
void printOptionalAge({int age = 30}) {
  print(age);
}