Ist es empfehlenswert, revert() zu verwenden, falls eine Funktion bei einer Suche eine Übereinstimmung findet?

Diese Solidity-Funktion:

function findSupplierByName(string supplierName) public view returns (address id, string name) {
    for (uint idx = 0; idx < supplierAddresses.length; idx++) {
        address supplierAddress = supplierAddresses[idx];
        var supplier = suppliers[supplierAddress];

        if (keccak256(supplier.name) == keccak256(supplierName)) {
            return (
                supplier.id,
                supplier.name
            );
        }
    }

    revert();
}

Ist das richtig ? Oder sollte ich einfach die Funktion „revert();“ entfernen? -Anweisung, sodass diese Funktion eine 0 für die Adresse und ein "" für den Namen zurückgibt?

Antworten (1)

Ich denke, Sie wollten revert () verwenden, wenn die Funktion die Daten NICHT findet. Um die Konsistenz mit dem zu wahren, was die Funktion tut, würde ich sie zurückgeben lassen (address(0), "")und die aufrufende Funktion entscheiden lassen, was zu tun ist, wenn sie einen Null-Adresswert erhält.

Wenn die Funktion IMMER ein Ergebnis finden soll, sollten Sie zu revert()wechseln assert(supplier.id != address(0)).

Ist das Hinzufügen eines booleschen Werts, der anzeigt, dass er gefunden oder nicht gefunden wurde, auch eine gute Option? Funktion findSupplierByName(string supplierName) öffentliche Ansicht gibt zurück (bool gefunden, Adress-ID, String-Name) ?