# Function Return

As mentioned previously, a function automatically returns whatever value the topmost block evaluates to. As such, it is possible to omit the return statement from a function:

    Str makeGreeting(Str name) {
        StrBuf out; // Use a string buffer:
        out << "Hello ";
        out << name;
        out << "!";
        out.toS; // implicitly returned
    }

This does, however, mean that instead of an error stating that a `return` statement is forgotten, the error states that the types were incompatible. For example, if the last line in the `makeGreeting` function above is omitted, a type error is returned since the last expression (`out << "!"`) evaluates to a `StrBuf` object.

It is also possible to use the `return` keyword to exit the execution of a function early. The syntax resembles that of C++ and Java:

    Str makeGreeting(Str name) {
        if (name.empty)
            return "Hello there!";

        StrBuf out; // Use a string buffer:
        out << "Hello ";
        out << name;
        out << "!";
        out.toS; // implicitly returned
    }

For `void` functions, the expression after `return` can simply be omitted.