Informationen zu Werttypen

Abgeschlossen

In dieser Lerneinheit erfahren Sie mehr über die wichtigsten Werttypen in Solidity. Werttypen werden nach Wert übergeben und bei Verwendung kopiert. Zu den primären Werttypen, die Sie beim Schreiben von Verträgen verwenden werden, gehören: integer, boolean, string literal, address und enum (ganze Zahlen, boolesche Werte, Zeichenfolgenliterale, Adressen und Enumerationen).

Ganze Zahlen

Integer werden in jeder Solidity-Quelldatei verwendet. Sie stellen ganze Zahlen dar und können entweder signiert oder nicht signiert sein. Die Speichergröße von ganzen Zahlen reicht von 8 Bit bis 256 Bit.

  • Mit Vorzeichen: Enthält negative und positive Zahlen. Kann als int dargestellt werden.
  • Nicht signierte Integer (Ganze Zahl ohne Vorzeichen): können nur positive Zahlen enthalten. Kann als uint dargestellt werden.

Ohne Angabe der Bitanzahl wird der Standardwert 256 Bits verwendet.

Die folgenden Vorgänge können auf Integer angewendet werden:

  • Vergleiche: <=, <, ==, !=, >=, >
  • Bit-Operatoren: & (and), | (or), ^ (bitwise exclusive), ~ (bitwise negation)
  • Arithmetische Operatoren: + (addition),- (subtraction), * (multiplication), / (division), % (modulo), ** (exponential)

Im Folgenden finden Sie einige Beispiele für Integerdefinitionen:

int32 price = 25; // signed 32 bit integer
uint256 balance = 1000; // unsigned 256 bit integer

balance - price; // 975
2 * price; // 50
price % 2; // 1

Boolesche Werte

Boolesche Werte werden mit dem Schlüsselwort bool definiert. Sie weisen immer einen der Werte true oder false auf.

Sie können wie folgt definiert werden:

bool forSale; //true if an item is for sale
bool purchased; //true if an item has been purchased

Boolesche Werte werden häufig in Vergleichsanweisungen verwendet. Beispiel:

if(balance > 0 & balance > price) {
    return true;
}

if(price > balance) {
    return false;
}

Boolesche Werte können außerdem in Funktionsparametern und Rückgabetypen verwendet werden.

function buy(int price) returns (bool success) {
    // ...
}

Zeichenfolgenliterale

String literals werden auch in den meisten Vertragsakten verwendet. Dabei handelt es sich um Zeichen oder Wörter in doppelten oder einzelnen Anführungszeichen.

    String shipped = "shipped"; // shipped
    String delivered = 'delivered'; // delivered
    String newItem = "newItem"; // newItem

Zusätzlich können die folgenden Escape-Zeichen mit string literals verwendet werden.

  • \<newline> maskiert eine neue Zeile.
  • \n gibt eine neue Zeile an.
  • \r gibt einen Wagenrücklauf an.
  • \t steht für einen Tabstopp.

Adresse

Eine Adresse ist ein Typ mit einem Wert mit 20 Bytes, der ein Ethereum-Benutzerkonto darstellt. Bei diesem Typ kann es sich um address oder address payable handeln.

Der Unterschied zwischen diesen Typen besteht darin, dass adress payable eine Adresse darstellt, an die Ether gesendet werden kann. Diese Adresse enthält die zusätzlichen Member transfer und send.

address payable public seller; // account for the seller
address payable public buyer; // account for the user

function transfer(address buyer, uint price) {
    buyer.transfer(price); // the transfer member transfers the price of the item
}

Enumerationen

In Solidity können Sie mithilfe von Enumerationen einen benutzerdefinierten Typ erstellen. Dies wird als benutzerdefiniert bezeichnet, da die Person entscheidet, die den Vertrag erstellt, welche Werte eingefügt werden sollen. Mit Enumerationen lassen sich zahlreiche auswählbare Optionen präsentieren, von denen eine erforderlich ist.

Eine Enumeration könnte beispielsweise dazu verwendet werden, verschiedene Status für ein Element darzustellen. Sie können sich Enumerationen als Auswahl mit mehreren Optionen vorstellen, bei denen alle Werte im Voraus definiert werden, und eine der Optionen muss ausgewählt werden. Enumerationen können in Vertrags- oder Bibliotheksdefinitionen deklariert werden.

enum Status { 
    Pending,
    Shipped,
    Delivered 
}

Status public status;

constructor() public {
    status = Status.Pending;
}