> urlString =+ "http:"
>
> Would anyone else find it useful?
Well, I mean, maybe sometimes, in terms of expressiveness. But there are a few
problems:
* It's kind of misleading, because this is very likely to be *far* less
efficient than `+=`. Rather than appending to the existing string buffer, it
will probably have to completely rebuild it.
* The whole expression is backwards. It probably *ought* to be something more
like `"http:" =+ urlString`, but that looks funny because assignment always
flows to the left. Perhaps it would be better to define a left-to-right
assignment operator, like `->`, and then use `->+` for this, except that'd be
kind of ridiculous.
In theory, this construct would be equally useful for other non-commutative
operators, like `-` and `/` in arithmetic. In practice, I've never seen any
language do this. It just doesn't seem to be an operation people need that
often, from what I can tell.
> var urlString = self.urlString
> if urlString.hasPrefix("//") {
> urlString = "http:" + urlString // urlString needs to be typed twice
> }
Well, you *can* do this:
urlString.replaceSubrange(urlString.startIndex ..<
urlString.startIndex, with: "http:")
Okay, so maybe that's not better by itself. But with a couple extension
methods, we can do better:
extension String {
mutating func insert(_ string: String, at index: Index) {
replaceSubrange(index..<index, with: string)
}
mutating func prepend(_ string: String) {
insert(string, at: startIndex)
}
}
Now we have:
urlString.prepend("http:")
Much better—and without the issues of `=+`.
--
Brent Royal-Gordon
Architechies
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution