codestory

Funktionen in Dart

  1. Was ist Funktion?
  2. Die reguläre Funktion:
  3. Closure (Schließung)
  4. Optionaler Parameter
  5. Optionaler benannter Parameter

1. Was ist Funktion?

In der Programmiersprache Dart ist eine Funktion ein benannter Codeblock, der Parameter annehmen und einen Wert oder Rückgabewert zurückgeben kann und nur ausgeführt wird, wenn er aufgerufen wird. Funktionen unterteilen große Aufgaben in kleine Teile und führen bestimmte Operationen dieses Programms aus. Dieser Prozess erhöht die Wiederverwendbarkeit des Codes und verbessert den modularen Ansatz des Programms.
return_type function_name(arguments)  {
   // Statements
}
Hinweis: Ähnlich wie bei JavaScript erlaubt Dart keine zwei gleichnamigen Funktionen, auch wenn diese unterschiedliche Parameter haben.

2. Die reguläre Funktion:

Die Syntax zum Deklarieren einer regulären Funktion:
return_type function_name(data_type1 arg1, data_type2 arg2, data_typeN argN)  {
   // Statements
}
Verwenden Sie das Schlüsselwort void (oder empty) als Rückgabetyp, wenn die Funktion nichts zurückgibt.
void function_name(data_type1 arg1, data_type2 arg2, data_typeN argN)  {
   // Statements
}
// Same as:
function_name(data_type1 arg1, data_type2 arg2, data_typeN argN)  {
   // Statements
}
Beispiel: Die Funktion sum nimmt zwei Argumente vom Typ int und gibt einen Wert vom Typ int zurück.
function_ex1.dart
int sum(int a, int b)  {
  return a + b;
}
void main()  {
   var result  = sum(100, 200); // 300
   print('result = $result');  
}
Beispiel: Die Funktion greeting akzeptiert einen Parameter String und gibt nichts zurück.
function_ex2.dart
void greeting(String name)  {
   var s = 'Hello $name';
   print(s);
}
void main()  {
   // Call the function:
   greeting('Tom'); // Hello Tom
}

3. Closure (Schließung)

In der Programmiersprache Dart ist ein Closure eine spezielle Funktion.
  • Ähnlich wie eine Funktion ist eine Closure ein Block von Anweisungen mit Parametern und kann einen Wert oder nichts zurückgeben.
  • Im Gegensatz zu einer Funktion hat eine Closure keinen Namen. Sie können es jedoch durch eine Variable identifizieren
Sehen Sie den ausführlichen Artikel über Closure:

4. Optionaler Parameter

Wie oben erwähnt, erlaubt Dart keine Funktionen mit demselben Namen, aber eine Funktion kann optionale Parameter enthalten, die die letzten Parameter in der Parameterliste sein müssen.
Die Syntax:
return_type function_name(typeM argM, typeN argN, [typeP? argP, typeQ? argQ]) {  
     // statement(s)  
}
Oder Syntax - Optionaler Parameter mit Standardwert:
return_type function_name(typeM argM, typeN argN,
                          [typeP? argP = defaultValueP, typeQ? argQ]) {  
     // statement(s)  
}
Zum Beispiel:
function_optional_args_ex1.dart
String concat(String s1, String s2, [String? s3]) {
  if (s3 != null) {
    return s1 + s2 + s3;
  }
  return s1 + s2;
}
double sum(double v1, double v2, [double? v3, double? v4]) {
  return v1 + v2 + (v3 ?? 0) + (v4 ?? 0);
}
void main() {
  String result1 =  concat('One', 'Two');
  print('result1: $result1');
  String result2 =  concat('One', 'Two', 'Three');
  print('result2: $result2');
 
  double value1 =  sum(1, 2, 3, 4);
  print('value1: $value1');
  double value2 = sum(1, 2, 3);
  print('value2: $value2');
  double value3 = sum(1, 2);
  print('value3: $value3');
}
Output:
result1: OneTwo
result2: OneTwoThree
value1: 10.0
value2: 6.0
value3: 3.0

5. Optionaler benannter Parameter

Optionale benannte Parameter (Optional Named Parameters) sind Parameter, die in geschweifte Klammern { } eingeschlossen und am Ende der Parameterliste der Funktion platziert werden. Alle diese Parameter haben Standardwerte.
Die Syntax:
return_type function_name(typeM argM, typeN argN,
                                   {typeP argP = defaultValueP, typeQ argQ = defaultValueQ}){  
     // statement(s)  
}
Zum Beispiel:
function_optional_named_args_ex1.dart
String concatAndTrim(String s1, String s2, {bool trimLeft = true, bool trimRight = true}) {
  var s = s1 + s2;
  if (trimLeft && trimRight) {
    return s.trim();
  } else if (trimLeft) {
    return s.trimLeft();
  } else if (trimRight) {
    return s.trimRight();
  }
  return s;
}
void main() {
  var s1 = '  One  ';
  var s2 = '  Two  ';

  var result1 = concatAndTrim(s1, s2); // trim left and right
  print('result1: -->$result1<-- (Trim left and right)');

  var result2 = concatAndTrim(s1, s2, trimLeft: false); // trim right only
  print('result2: -->$result2<-- (Trim right only)');

  var result3 = concatAndTrim(s1, s2, trimRight: false); // trim left only
  print('result3: -->$result3<-- (Trim left only)' );

  var result4 =
      concatAndTrim(s1, s2, trimLeft: false, trimRight: false); // no trim
  print('result4: -->$result4<!-- (No Trim)');
}
Output:
result1: -->One    Two<-- (Trim left and right)
result2: -->  One    Two<-- (Trim right only)
result3: -->One    Two  <-- (Trim left only)
result4: -->  One    Two  <!-- (No Trim)