[swift-evolution] [Pitch] Introducing the "Unwrap or Die" operator to the standard library

Paul Cantrell cantrell at pobox.com
Tue Jun 27 14:00:36 CDT 2017


> it gives me the creeps to leave something like ‘fatalError’ in a shipping application


Agreed, and I would use it for _exactly_ this reason.

I avoid force unwrapping in production code, looking first for ways to gracefully handle the situation. Whenever I do use !, there is careful reasoning behind its use: “this is safe because p → q, and there is no reasonable way to handle this error because it cannot happen.” I take care to note this reasoning in a same-line comment, e.g.:

   paramString.data(using: String.Encoding.ascii)!  // ASCII safe because paramString already URL escaped

Such reasoning will, of course, eventually fail somewhere. It would be helpful to get runtime diagnostics on such a failure:

   paramString.data(using: String.Encoding.ascii) !! "URL escaped paramString must be ASCII"

So Rien, I endorse this idea from the perspective of one who is !-averse.

Cheers, P


> On Jun 27, 2017, at 12:44 PM, Rien via swift-evolution <swift-evolution at swift.org> wrote:
> 
> I would not use it.
> Somehow it gives me the creeps to leave something like ‘fatalError’ in a shipping application.
> During development it could make sense, but then again I like to keep development and shipping the same as much as possible.
> 
> Regards,
> Rien
> 
> Site: http://balancingrock.nl
> Blog: http://swiftrien.blogspot.com
> Github: http://github.com/Balancingrock
> Project: http://swiftfire.nl - An HTTP(S) web server framework in Swift
> 
> 
> 
> 
> 
> 
> 
>> On 27 Jun 2017, at 19:16, Erica Sadun via swift-evolution <swift-evolution at swift.org> wrote:
>> 
>> Using an operator to provide feedback on the context of a failed unwrap has become a commonly implemented approach in the Swift developer Community. What are your thoughts about adopting this widely-used operator into the standard library?
>> 
>> guard !lastItem.isEmpty else { return }
>> let lastItem = array.last !! "Array must be non-empty"
>> 
>> Details here:  https://gist.github.com/erica/423e4b1c63b95c4c90338cdff4939a9b
>> 
>> Thank you for your thoughtful feedback, -- E
>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org
>> https://lists.swift.org/mailman/listinfo/swift-evolution
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution at swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution



More information about the swift-evolution mailing list