Skip to content

Swift-like guard statement #4

Description

@ngsilverman

A few people have been comparing parts of Belay to the Swift guard statement so I looked to see if there was any inspiration to be found there.

Here in its own basic form:

guard condition else {
    // statements
    // exit
}

It is very similar to:

expect.isTrue(condition) {
    // statements
    // exit
}

Belay also provides a variant that is very useful when a false condition can be handled without exiting from the parent:

expect(condition) {
    // statements
    // does not need to exit
}

And of course if one doesn't need to handle expectations globally it's just as easy to write:

if (!condition) {
    //
}

The Swift guard also supports an "optional binding declaration":

guard let constantName = someOptional else {
    // …
}

Which is very similar to:

val constantName = expect.isNotNull(someOptional) {
    //
}

One major difference: Swift support multiple bindings, Belay does not in this case.

And another: the variables assigned a value from an optional binding can be used as part of the condition:

guard let constantName = someOptional, condition(constantName) else {
    // …
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions