New feature request: syntactic sugar for "if let" scoped self assignment


(Nicholas Exner) #1

Dear Swift Evolution Group Members,
         Recently, as I was reviewing some code that I wrote, I was wondering what the community’s thoughts are on the possible value of having a special “if let” self-assignment operator added to the language (such as =? ). A sort of syntactic sugar that allows for optional unwrapping into a scoped variable of the same name as the variable in the larger scope. Here is some before and after code of what I am contemplating:

Current:
var str:String?
str = "Hello"

if let str = str {
    print(str)
}

Abbreviated:
var str:String?
str = “Hello” // Output is Hello, not Optional(“Hello”)

if let str =? {
    print(str) // Output is also Hello, not Optional(“Hello”)
}

The value that I perceive of adding this to the language would be to allow a short-hand way to unwrap in a “if let" conditional and allowing developers to reduce duplication when a unique variable name is not needed. By the way, I’m a big fan of ternary operators which the community already sees of value.

Let me know your thoughts. Is this something that could be put into a proposal?

Cheers,
—Nick—
.


(Jacob Bandes-Storch) #2

For context, some prior discussions on this topic:

"Reconsidering SE-0003 Removing var from Function Parameters and Pattern
Matching"
(couldn't find one representative message — search it yourself
https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160125/thread.html
)

The bind thread
<https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160201/008649.html>

···

On Sun, Aug 28, 2016 at 12:54 PM, Nicholas Exner via swift-evolution < swift-evolution@swift.org> wrote:

Dear Swift Evolution Group Members,
         Recently, as I was reviewing some code that I wrote, I was
wondering what the community’s thoughts are on the possible value of having
a special “if let” self-assignment operator added to the language (such as
=? ). A sort of syntactic sugar that allows for optional unwrapping into a
scoped variable of the same name as the variable in the larger scope. Here
is some before and after code of what I am contemplating:

*Current:*
var str:String?
str = "Hello"

if let str = str {
    print(str)
}

*Abbreviated:*
var str:String?
str = “Hello” // Output is Hello, not Optional(“Hello”)

if let str =? {
    print(str) // Output is also Hello, not Optional(“Hello”)
}

The value that I perceive of adding this to the language would be to allow
a short-hand way to unwrap in a “if let" conditional and allowing
developers to reduce duplication when a unique variable name is not
needed. By the way, I’m a big fan of ternary operators which the community
already sees of value.

Let me know your thoughts. Is this something that could be put into a
proposal?

Cheers,
—Nick—
.

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(Xiaodi Wu) #3

As Jacob has just touched on, this suggestion (in various forms) has been
proposed before and is proposed often. However, syntactic sugar is out of
scope for this phase of Swift 4 evolution.

···

On Sun, Aug 28, 2016 at 2:54 PM, Nicholas Exner via swift-evolution < swift-evolution@swift.org> wrote:

Dear Swift Evolution Group Members,
         Recently, as I was reviewing some code that I wrote, I was
wondering what the community’s thoughts are on the possible value of having
a special “if let” self-assignment operator added to the language (such as
=? ). A sort of syntactic sugar that allows for optional unwrapping into a
scoped variable of the same name as the variable in the larger scope. Here
is some before and after code of what I am contemplating:

*Current:*
var str:String?
str = "Hello"

if let str = str {
    print(str)
}

*Abbreviated:*
var str:String?
str = “Hello” // Output is Hello, not Optional(“Hello”)

if let str =? {
    print(str) // Output is also Hello, not Optional(“Hello”)
}

The value that I perceive of adding this to the language would be to allow
a short-hand way to unwrap in a “if let" conditional and allowing
developers to reduce duplication when a unique variable name is not
needed. By the way, I’m a big fan of ternary operators which the community
already sees of value.

Let me know your thoughts. Is this something that could be put into a
proposal?

Cheers,
—Nick—
.

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution


(Chris Lattner) #4

Dear Swift Evolution Group Members,
         Recently, as I was reviewing some code that I wrote, I was wondering what the community’s thoughts are on the possible value of having a special “if let” self-assignment operator added to the language (such as =? ). A sort of syntactic sugar that allows for optional unwrapping into a scoped variable of the same name as the variable in the larger scope. Here is some before and after code of what I am contemplating:

This is out of scope for Swift 4 stage 1, but is also a commonly proposed feature (and we should probably add it to the commonly proposed feature list). It is often rejected because it is favoring terseness over clarity by introducing new magic syntactic sugar.

-Chris

···

On Aug 28, 2016, at 12:54 PM, Nicholas Exner via swift-evolution <swift-evolution@swift.org> wrote:

Current:
var str:String?
str = "Hello"

if let str = str {
    print(str)
}

Abbreviated:
var str:String?
str = “Hello” // Output is Hello, not Optional(“Hello”)

if let str =? {
    print(str) // Output is also Hello, not Optional(“Hello”)
}

The value that I perceive of adding this to the language would be to allow a short-hand way to unwrap in a “if let" conditional and allowing developers to reduce duplication when a unique variable name is not needed. By the way, I’m a big fan of ternary operators which the community already sees of value.

Let me know your thoughts. Is this something that could be put into a proposal?

Cheers,
—Nick—
.

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution