+1. The force unwrap operator is basically a runtime assert that enforces the invariant that "this value should not be nil at this point of use, and if it is nil the programmer made a mistake". It is a perfectly legitimate tool for writing code that can't otherwise be expressed (cleanly or at all) using the other type system constructs.
Likewise for all the other postfix-! keywords ('as!', 'try!', etc). Austin > On May 2, 2016, at 11:53 PM, Rod Brown via swift-evolution > <swift-evolution@swift.org> wrote: > > I’m on the side of the ‘!’ at the moment. > > I see a lot of heat here going into hatred of the force unwrap operator, as > if it should be avoided like the plague. I simply don’t see the need for such > absolutism. It’s there for a reason. > > There are definitely use cases where use of the force unwrap operator is > unsafe. Specifically, a lot of direct property access shouldn’t be done with > it because of the fact that even if you check, another thread may come in, > switch the variable to “nil” and all of a sudden you have a crash despite > your best efforts. > > That said, if you properly reason about your code, the ! operator is a useful > and reasonable access tool to unwrap the optional you know about. > > I certainly don't agree that we need a language construct purely so we can > write verbose things as a big scary warning. > > >> On 3 May 2016, at 4:41 PM, Dominik Pich via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >> >> ;) yes. I know I can write let x = y! but IMHO THAT is too brief again. >> I like the fact that guard makes you look what you do… it is a little bit >> like assert(x != nil) >> >> guard! let x = y >> >> it reads awesome and everybody can more easily see it is a potentially fatal >> & important call >> >>> On May 3, 2016, at 1:38 AM, Jordan Rose <jordan_r...@apple.com >>> <mailto:jordan_r...@apple.com>> wrote: >>> >>> We have that; it’s just ‘!’. :-) >>> >>> Jordan >>> >>>> On May 2, 2016, at 12:09, Dominik Pich via swift-evolution >>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote: >>>> >>>> Hello, >>>> often the guard statement is used to only unwrap optionals. multiple >>>> guards will cause a lot of ‘overhead’. >>>> also often if it doesn’t work. there is no easy way we can gracefully >>>> recover ;) >>>> >>>> so how about we do the same as with try/catch where you can use try! and >>>> have a guard! >>>> >>>> the guard! could just throw an exception … >>>> >>>> regards >>>> Dominik >>>> _______________________________________________ >>>> swift-evolution mailing list >>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >>>> https://lists.swift.org/mailman/listinfo/swift-evolution >>>> <https://lists.swift.org/mailman/listinfo/swift-evolution> >>> >> >> _______________________________________________ >> swift-evolution mailing list >> swift-evolution@swift.org <mailto:swift-evolution@swift.org> >> https://lists.swift.org/mailman/listinfo/swift-evolution > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution