Implizites Casting in Ausdrücken

Beim impliziten Casting oder der impliziten Konvertierung nimmt der Architekt den impliziten Cast eines Datentyps und konvertiert den resultierenden Werttyp in einen anderen Datentyp. Architect führt nur implizite Konvertierungen für den resultierenden Werttyp des gültigen Ausdruckstextes durch. Implizites Casting nutzt bestimmte Eigenschaften von Typhierarchien oder Typrepräsentationen aus. Architect führt implizite Konvertierungen durch, wenn ein Ausdruck eines Typs im Zusammenhang mit einer bestimmten Variablen verwendet wird, die diesen Typ nicht akzeptiert.

In Architect können Flow-Autoren nur Werte von "ähnlichen" Typen zuweisen. Einer String-Variablen kann nur ein String-Wert zugewiesen werden. Der Architect-Parser wertet jedoch den Datentyp jedes Ausdrucks aus und gleicht, wenn möglich, die Ergebnisse für den Autor des Flusses durch einen impliziten Cast ab.

Im folgenden Beispiel möchte der Autor des Ablaufs, dass die Ganzzahl als Zeichenkette ausgedrückt wird. Zur Laufzeit ergibt der Ausdruck die Zeichenkette "5".

ToString(5)

Dies ist ein Beispiel für einen explicit cast, bei dem der Autor des Ausdrucks den Integer-Wert 5 in eine Zeichenkette umwandelt, indem er einen ToString-Funktionsaufruf hinzufügt und den Integer-Wert übergibt. Der resultierende Wert dieses Ausdrucks, wenn er zur Laufzeit ausgewertet wird, ist "5".

Ein Flow-Autor könnte auch den folgenden gültigen String-Ausdruck eingeben:

ToString(3+4)

Dieser Ausdruck wird als explicit castbetrachtet. Der Autor des Flusses hat den Parser angewiesen, die Ganzzahl in eine Zeichenkette umzuwandeln. Der implizite Cast erfolgt nur für den resultierenden Typ des eingegebenen Ausdruckstextes

Der Autor eines Ablaufs kann auch diesen gültigen String-Ausdruck eingeben:

3+4

Im Hinblick auf "ähnliche" Typen ist dieser Ausdruck ungültig, weil der Ausdruck versucht, einer Zeichenkette eine Ganzzahl zuzuweisen, wir aber wissen, dass eine Zeichenkettenvariable nur eine Zeichenkettenzuweisung haben kann. Aber mit implicit castingkann Architect den Ausdruck auflösen. Der Parser fügt den Wert ToString um den Ausdruck herum ein, der die Ganzzahl in eine Zeichenkette umwandelt und diesen Ausdruck zurückgibt:

ToString(3+4)

Wenn Architect einen impliziten Cast durchführt, gibt es eine Meldung mit Konvertierungsdetails im Dialogfeld "Edit Expression" des Ausdrucks zurück.

Hinweis: Diese Konvertierungsmeldungen erscheinen nur im Dialogfeld "Ausdruck bearbeiten". Sie erscheinen nicht in den Modi Feldliteral oder Ausdruck. Architect konvertiert den Ausdruck jedoch unabhängig davon, ob Sie ihn auf Feldebene oder im Dialogfeld "Ausdruck bearbeiten" eingeben.

Implizite Casts werden nur bei Typ-Cast-Funktionen durchgeführt, die einen Parameter annehmen. Type-Cast-Funktionen mit mehreren zulässigen Parametern sind keine Kandidaten für die implizite Konvertierung, da der Parser die Aktion für keinen Parameter nach dem ersten verarbeiten kann.

Im vorigen Beispiel wussten wir, dass das Ergebnis ein ganzzahliger Wert von 7 sein würde. Betrachten wir jedoch ein Beispiel, bei dem wir nicht wissen, wie hoch der Wert zur Entwurfszeit sein wird:

Flow.MyInteger + 5

In diesem Fall ist Flow.MyInteger ein ganzzahliger Datentyp. Konzeptionell wissen wir, dass der resultierende Wert "der Wert von Flow.MyInteger plus der Wert von 5″ ist. Wir wissen nicht, welchen Wert Flow.MyInteger hat, aber wir wissen , dass es sich um einen Integer-Wert plus einen weiteren Integer-Wert handelt, was einen Integer-Wert ergibt Dies ist wichtig für das implizite Casting: Das Ergebnis von Integer + Integer = Integer, und der resultierende Typ ist eine Zeichenkette.

Wenn der Parser den Ausdruck auswertet, interpretiert er, dass der resultierende Typ keine Zeichenkette ist, sondern das Ergebnis des Ausdruckstextes eine ganze Zahl ist. Daher fügt sie ToString als impliziten Cast hinzu und wandelt das Ergebnis in eine Zeichenkette um, die das gewünschte Ergebnis ist.

Wie im vorherigen Beispiel gibt Architect bei der Durchführung eines impliziten Casts eine Meldung mit Konvertierungsdetails im Dialogfeld "Ausdruck bearbeiten" zurück. Diese Konvertierungsmeldungen erscheinen nur im Dialogfeld "Ausdruck bearbeiten". Sie erscheinen nicht in den Modi Feldliteral oder Ausdruck. Architect konvertiert den Ausdruck jedoch unabhängig davon, ob Sie ihn auf Feldebene oder im Dialogfeld "Ausdruck bearbeiten" eingeben.

Der Parser führt nur dann einen impliziten Cast durch, wenn das Ergebnis ein gültiger Ausdruck ist. Aber betrachten wir ein Beispiel, bei dem das Ergebnis ungültig ist. Wir wissen, dass Architect in der ersten Version nur die Laufzeitdatenwiedergabe für drei Sprachen unterstützt: en-US, fr-CA, und es-US. Daher funktioniert der folgende Ausdruck, wenn der Fluss in en-US, fr-CA oder es-US verläuft:

ToAudioNumber(5005)

Der Architekt kann die Zahl 5005 in jeder der drei Sprachen ausdrücken. Was aber, wenn ein Flow-Autor Tschechische Republik (cs-CZ) als unterstützte Sprache hinzufügt, die nicht zu den 3 Sprachen gehört, die runtime data playback unterstützen? Die folgenden Beispiele zeigen, wie Architect mit ungültigen Ausdrücken umgeht.

Wenn der Autor des Ablaufs mit der Eingabe der Ganzzahl beginnt, gibt Architect sofort eine Fehlermeldung aus:

Wenn der Flow-Autor die Funktion ToAudioNumber als expliziten Cast hinzufügt, gibt Architect trotzdem einen Fehler zurück:

Datenwiedergabe wird nicht unterstützt