Edit report at https://bugs.php.net/bug.php?id=40296&edit=1
ID: 40296
Comment by: email at philsturgeon dot co dot uk
Reported by: mail at tobyinkster dot co dot uk
Summary: "unless" control structure
Status: Wont fix
Type: Feature/Change Request
Package: *General Issues
Operating System: All
PHP Version: 5.2.0
Block user comment: N
Private report: N
New Comment:
In regards to double negatives, I agree. If I see a developer do this unless a
!=
7 then I would block their PR and instantly go and have a talk with them about
writing sane code.
As for else it really shouldn't be used that much but it should be possible.
unless (foo === 'bar') {
// do something
}
else {
// do something else
}
Is that really a confusion?
Unlesselse might become a dog though, not sure about that:
unless (foo === 'bar') {
// do something
}
unlesselse (foo === 'baz') {
// do something
}
else {
// do something else
}
At that point you'd just want to be using a switch, but that is the same for
if's.
As I said unless should not really use an else, otherwise you'd be better off
just
using an if and swapping it around, but having it doesn't hurt.
Previous Comments:
------------------------------------------------------------------------
[2012-07-29 21:35:45] kinghfb+php at gmail dot com
The structure adds sugar without necessarily breaking anything (with the
exception of existing unless() functions, as Rasmus mentioned). I really don't
think the double-negatives argument works here, as we're already doing that
with 'if', meaning that the readability is quite low in some cases.
My only concern is that the structure seems to be more easily convoluted than
'if', potentially leading to nightmarish comprehension tasks.
------------------------------------------------------------------------
[2012-07-29 20:36:46] hi at brennannovak dot com
I like this idea quite a bit- of course I am a native english speaker as well
(American), but considering this is used in Ruby & Python the language barrier
is
not too great that it hinders use. Additionally there are *many* abbreviations
in
PHP that consist of multiple "english" words which developers are able to
understand such as strcmp()
Once I memorize what a group of characters *do* I stop thinking about the words
that make up the function.
------------------------------------------------------------------------
[2012-07-29 20:25:43] email at philsturgeon dot co dot uk
Thanks for stopping by Rasmus, that was a really quick follow up.
I think you might have pointed out the crux of the confusion: being a native
English speaker. To me it makes perfect sense, but I am British.
Unless the condition is true, do this.
I like the post: https://37signals.com/svn/posts/2699-making-sense-with-rubys-
unless
A new keyword just to replace "if ( ! (condition))" might seem like a hassle,
and
the objective of the game is not always to make PHP "nice", but it is readable
and
logical to many, and is easy to ignore if you don't like it - unless you have
function unless(), but the chances are that function is doing something similar
anyway.
------------------------------------------------------------------------
[2012-07-29 20:16:53] [email protected]
Any new keyword breaks BC to some extent because it will break any code that
has
an existing unless() function. I agree with others here that unless() can be
quite confusing. A negated conditional keyword lends itself to double negatives.
It also isn't a very common feature in other languages and definitely not
obvious to non-native English speaking people like myself. It is an odd word
that essentially means not-if even though it logically should be equivalent to
"more" as in the opposite of "more" would be "less" and sticking "un" in front
of it suddenly completely changes the meaning entirely.
------------------------------------------------------------------------
[2012-07-29 20:00:40] email at philsturgeon dot co dot uk
I am surprised to see such a lack of interest on this feature request.
Ruby and Perl both have "unless", and while that is certainly not a reason on
its
own, it does show that this is used.
There are two people here saying that unless is confusing. How so? If something
matches false then do whatever. It has an else too, so if something is true it
will be used.
The main point here is not to remove a single !, but to make much cleaner
syntax.
if ( ! (isset($foo) or ($foo !== 'bar')) exit('invalid value');
or
unless (isset($foo) and $foo === 'bar') exit('invalid value');
Its a minor difference as I cannot remember a more compelling example, but
there
have been numerous times I have wished to reverse this and have unless instead
of
an extremely complex if statement.
Unless just makes sense, it's optional, it doesn't break BC, it makes syntax
easier to read in some situations and it is easy to document. If I knew enough
C
I'd send in a patch right now as PHP would be better off for having this.
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=40296
--
Edit this bug report at https://bugs.php.net/bug.php?id=40296&edit=1