Dart-Erweiterungen | Komentor

Laufzeittyp

Einführung

Dart-Erweiterungen wurden erstmals in Dart 2.6 als Vorschau eingeführt. Später wurden sie offiziell in Dart 2.7 veröffentlicht. Die Erweiterungsfunktion ist die Möglichkeit, Funktionalität zu bestehenden Bibliotheken hinzuzufügen.

Manchmal möchten Sie möglicherweise Dienstprogrammmethoden in einer Bibliothek eines Drittanbieters oder in einer Kernklasse wie hinzufügen Schnur Für Ihren Komfort. Es ist jedoch möglicherweise nicht möglich, Ihre Methoden immer in diesen Klassen hinzuzufügen. Die nächstmögliche Lösung besteht darin, Hilfs- und/oder Wrapper-Klassen mit zu schreiben static Methoden und Mitglieder. Diese zusätzlichen Klassen können Ihre Codebasis aufblähen und die Anzahl der Objekte im Allgemeinen erhöhen.

In solchen Szenarien kann die Erweiterungsfunktion nützlich sein. Es mag wie Wrapper-Klassen aussehen, aber sie unterscheiden sich von Wrapper-Klassen. In Wrapper-Klassen wird Objekt explizit als Argument an die statischen Methoden übergeben. Erweiterungen erweitern jedoch implizit den Typ.

Es gibt drei Arten von Dart-Erweiterungen:

  • Erweiterungsmethoden
  • Erweiterungsoperatoren
  • Erweiterungseigenschaften

Erweiterungen definieren

In Dart sind alle drei Arten von Erweiterungen innerhalb eines Codeblocks definiert. Der Codeblock beginnt mit extension gefolgt von einem optionalen Namen für die Erweiterung und on Schlüsselwort und dann den Typ.

Zum Beispiel, wenn ich eine benutzerdefinierte Funktionalität hinzufügen möchte List Datentyp, dann würde der Erweiterungscodeblock wie folgt aussehen:

extension<T> MyList on List<T> {
  //extension methods

  //extension operators

  //extension properties
}

Das MyList es ist optional. Es wird nur benötigt, wenn Erweiterungen in eine separate Datei geschrieben und in eine andere dart-Datei importiert werden. Wenn Sie jedoch eine andere ähnliche lokale/private Nebenstelle haben, werden möglicherweise Konflikte angezeigt. Um solche Konflikte zu vermeiden, möchten Sie möglicherweise die externe Erweiterung wie folgt ausblenden:

//extensions2.dart has MyList extension definition
import 'extensions2.dart' hide MyList;

Lassen Sie uns im folgenden Abschnitt einige Beispiele für die Verwendung untersuchen.

Verwendungszweck

Beginnen wir mit der Definition eines Locals extension<T> Block on List<T> Typ. Wir werden verschiedene Arten von Datentypen untersuchen, also den generischen Typ verwenden T.

extension<T> on List<T> {
  //extension methods

  //extension operators

  //extension properties
}

Erweiterungsmethoden

In diesem Abschnitt fügen wir zwei Erweiterungsmethoden hinzu. Wir haben eine Preisliste.

#1. Verlängerung:

Lassen Sie uns zunächst eine Erweiterungsmethode hinzufügen priceList() um die Preisliste zurückzugeben. Diese Methode macht nichts Wichtiges, zeigt aber, wie Erweiterungen den Typ using implizit erweitern this.

extension<T> on List<T> {
  //Extension Method: demo
  List<T> priceList() => this.map((item) => item).toList();

}

Verwendung:

void main() {
  //List of prices
  List prices = [1, 1.99, 4];

  print("Price listing:");

  //priceList() is being called on `prices`
  print(prices.priceList());
}

Ausgabe:

Price listing:
[1, 1.99, 4]

#2. Verlängerung:

Das priceLabels(String symbol) Die Erweiterungsmethode durchläuft die Preisliste und hängt a an symbol Präfix für jeden Preis.

extension<T> on List<T> {

  //Extension Method: Adding $ prefix
  List<String> priceLabels(String symbol) =>
      this.map((item) => "$symbol ${item}").toList();

}

Verwendung:

void main() {
  //List of prices
  List prices = [1, 1.99, 4];

  print("\nPrice listing with \$ prefix");

  //The $ symbol is passed
  print(prices.priceLabels("\$"));
}

Ausgabe:

Price listing with $ prefix
[$ 1, $ 1.99, $ 4]

Erweiterungsoperatoren

In diesem Abschnitt fügen wir zwei Erweiterungsoperatoren hinzu. Wir haben eine Preisliste ähnlich dem letzten Beispiel.

#3. Verlängerung:

Lassen Sie uns eine Operatorerweiterung für definieren ^ Operator. Ich möchte diesen Operator verwenden, um den Preis um den zu erhöhen n Mal, wo n ist das darin übergebene Argument.

extension<T> on List<T> {
  //Extension Operator: Hike up the price by n
  List<num> operator ^(int n) =>
    this.map((item) => num.parse("${item}") * n).toList();

}

Verwendung:

void main() {
  //List of prices
  List prices = [1, 1.99, 4];

  print("\nPrice listing after hiking up prices 3x of the original value");

  //argument is passed after the operator sign
  print(prices ^ 3);
}

Ausgabe:

Price listing after hiking up prices 3x of the original value
[3, 5.97, 12]

#4. Verlängerung:

Definieren Sie als Nächstes eine weitere Vermittlungsstellenerweiterung für - Operator. Ich möchte diesen Operator verwenden, um den Artikelpreis auf die Hälfte zu reduzieren, wenn dieser Operator verwendet wird.

extension<T> on List<T> {
  //Extension Operator: Reduce all prices by half
   List<num> operator -() =>
       this.map((item) => num.parse("${item}") / 2).toList();
}

Verwendung:

void main() {
  //List of prices
  List prices = [1, 1.99, 4];

  print(
      "\nSale Price listing: prices are reduced by half of the original value");

  //no-arg operator is put before the list variable
  print(-prices);
}

Ausgabe:

Sale Price listing: prices are reduced by half of the original value
[0.5, 0.995, 2.0]

Erweiterungseigenschaft

In diesem Abschnitt fügen wir eine Erweiterungseigenschaft hinzu. Wir haben eine Preisliste ähnlich dem letzten Beispiel.

#5. Verlängerung:

In dieser Erweiterung fügen wir eine Eigenschaft hinzu, um die Gesamtzahl der gedruckten Preisschilder zurückzugeben, die für die Preisliste benötigt werden, wobei 3 Schilder pro Artikel benötigt werden. Wir haben eine Preisliste ähnlich dem letzten Beispiel.

extension<T> on List<T> {
  //Extension Property: 3 printed labels for each price.
  int get numPrintedPriceTags => length * 3;
}

Verwendung:

void main() {
  //List of prices
  List prices = [1, 1.99, 4];

  print("\nNumber of total price tags");
  print(prices.numPrintedPriceTags);
}

Ausgabe:

Number of total price tags
9

Begleitvideo

Sehen Sie sich das begleitende YouTube-Video an hier

Quellcode

Bitte überprüfen Sie den Quellcode auf Github hier

Verweise

  1. Erweiterungsmethoden

  2. Grundlagen der Dart-Erweiterungsmethoden

Fröhliches Darting 😃

_Der Artikel hat Ihnen gefallen? Konnten Sie ein Thema Ihres Interesses nicht finden? Bitte hinterlassen Sie einen Kommentar oder wenden Sie sich an zwitschern über die Themen, die Sie mir mitteilen möchten !

Übrigens liebe ich Cupcakes und Kaffee beides 😃_

Folgen Sie mir auf Mittel

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *