[swift-evolution] !? operator for ternary conditional unwrapping
Maxim Veksler
maxim at vekslers.org
Wed Feb 8 12:48:17 CST 2017
Hi Martin, please see reply inline.
On Wed, Feb 8, 2017 at 4:47 PM Martin R <martinr448 at gmail.com> wrote:
> Isn't that exactly what the nil-coalescing operator ?? does?
>
> func query(name: String?) -> String {
> return "{ param: \(name ?? "null") }"
> }
>
>
No, because
func query(name: String?) -> String {
return "{ param: \(name ?? "null") }"
}
print(query(name: nil)) //=> { param: null }
print(query(name: "Max")) //=> { param: Max }
The output I'm expecting from the second call should be is { param: "Max" }
> If you use the JSONSerialization class from the Foundation library then
> `nil` is bridged to `NSNull` and translated to "null" automatically (see
> SE-0140).
>
>
I agree that in this case JSONSerialization might be a fitting solution, I
also agree that any required output can be solved by a Utility class.
What I would like to argue is that there is a place for such syntactic
sugar because it simplifies readability, for ex. what if I've want to wrap
my non optional name parameter using %20%, and co.
JSONSerialization is specific solution, I think that there is a generic
case to have in the language some syntactic sugar for a 1 liner composition
of unwrap and ternary conditional operation.
Regards,
> Martin
>
> > Am 08.02.2017 um 15:04 schrieb Maxim Veksler via swift-evolution <
> swift-evolution at swift.org>:
> >
> > Hello,
> >
> > Let's assume I have an optional "name" parameter, based on the optional
> status of the parameters I would like to compose string with either the
> unwrapped value of name, or the string "null". The use case for is
> syntactic sugar to compose a GraphQL queries.
> >
> > A (sampled) illustration of the code that currently solves it looks as
> following:
> >
> > func query(name: String?) {
> > let variables_name = name != nil ? "\"\(name!)\"" : "null"
> > return "{ param: \(variables_name) }"
> > }
> >
> > Based on optional status the following output is expected
> >
> > let name = "Max"
> > query(name: name)
> > // { param: "Max" }
> >
> > let name: String? = nil
> > query(name: name)
> > // { param: null }
> >
> > I think it might be useful to have an conditional unwrap operator !?
> that would enable syntax sugar uch as the following built into the language:
> >
> > func query(name: String?) {
> > return "{ param: \(name !? "\"\(name)\"": "null") }"
> > }
> >
> > This expression is expected to produce same output as the examples
> above. It means check the Optional state of name: String?, in case it has a
> value, unwrap it and make the unwrapped value accessible under the same
> name to the true condition part of the expression, otherwise return the
> false condition part of the expression.
> >
> > The effectively removes the need to have the "if != nil" and the forced
> unwrap syntactical code, and IMHO improves code readability and
> expressiveness.
> >
> > I'm wondering what the community thinks of the displayed use case, and
> proposed solution?
> >
> >
> > -m
> > _______________________________________________
> > swift-evolution mailing list
> > swift-evolution at swift.org
> > https://lists.swift.org/mailman/listinfo/swift-evolution
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20170208/e49ed755/attachment.html>
More information about the swift-evolution
mailing list