[swift-evolution] Proposal to change Logical NOT Operator from exclamation mark ( ! ) to something else

Nicolas Fezans nicolas.fezans at gmail.com
Wed Feb 15 16:44:31 CST 2017


> 3: maybe ~ is a better fit?

just for information this is in line with Matlab in which the following
three "not"-related syntax exist:
a) ~ as a prefix operator for not
b) not as a function
c) ~= as an infix operator for "is not equal to"

I see pros and cons for each option and have a very slight preference for ~
over !.

I would however avoid ¬ because I would not like to have a character that
is not directly accessible on most keyboards for something as simple as a
not operation, even if I like these maths notations very much.

If it would be decided to keep ! I could imagine that  adding syntax
coloration in code editors to make both uses of ! look a bit different
would help beginners and newcomers. This is more complicated to do than the
typical syntax coloration logic in text editors (syntax must be understood
for doing that), but this should not be a problem in Xcode.

If ~ would be preferred, I would recommend to continue accepting ! for one
or more versions of swift but with a warning recommending to change it (we
do not need to make a source breaking change when it is possible to
continue accepting it and to mark it as obsolete)


Nicolas


On Wed, 15 Feb 2017 at 22:55, André “Zephyz” Videla via swift-evolution <
swift-evolution at swift.org> wrote:

> As of today, this is possible:
>
> prefix operator ¬
> prefix func ¬ (value: Bool) -> Bool {
>     return !value
> }
>
> let t = true
> let f = ¬t
>
> I have to admit that I quite like this but it has a couple drawbacks:
> 1: if you've never seen the ¬ operator in math it makes no more sense than
> "!"
> 2: It's quite tricky to find on your keyboard depending on your layout
> 3: maybe ~ is a better fit?
>
> Seems like a lot of work for a very small improvement. But I'm all for it.
>
> André
>
>
> On 15 Feb 2017, at 22:28, Derrick Ho via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> There is no need to change it
>
> Since the context basically disambiguates the meaning of !
>
> The next best thing is to compare it to false
>
> (val == false) // same as !val
> On Wed, Feb 15, 2017 at 3:02 PM David Waite via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> If someone came with a nice syntax I’d be for this. I can’t imagine what
> that would be.
>
> I doubt there is an alternate prefix or postfix operator that would pass
> muster, due to ‘!’ already meaning the appropriate thing in so many
> languages, and swift only supporting symbolic operators.
>
> I can’t think of a method on boolean which would read properly either, e.g.
>
> if isValid.not() {…}
>
> The closest I could think to a decent bike shed color would be a global
> function:
>
> if not(isValid) {…}
>
> -DW
>
> On Feb 15, 2017, at 11:10 AM, Robert Widmann via swift-evolution <
> swift-evolution at swift.org> wrote:
>
> So you've identified the problem, but what do you propose as a solution
> here?
>
> It should be noted that a (non-stdlib) language-level answer to this
> question has already been discussed and rejected (
> https://lists.swift.org/pipermail/swift-evolution/2015-December/000032.html
> ).
>
> ~Robert Widmann
>
> 2017/02/15 9:02、Sadiq via swift-evolution <swift-evolution at swift.org>
> のメッセージ:
>
> Hello,
>
> I would like to suggest to change Logical NOT Operator from ! to something
> else.
> It will increase the readability of the code and will avoid any confusion
> with the symbol used for force unwrapping of optional values.
> It would be easier for new programmers to learn Swift as the first
> language.
> I don't understand the rational behind using the same operator for two
> different purposes.
>
> Thanks and Regards,
> Mohammad Sadiq
>
> _______________________________________________
> 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
>
>
> _______________________________________________
> 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
>
>
> _______________________________________________
> 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/20170215/6b2d5e76/attachment.html>


More information about the swift-evolution mailing list