digitalmars.D - The Is Operator
- "Kyle G." <kyle.james.gibson gmail.com> Oct 02 2007
- Bill Baxter <dnewsgroup billbaxter.com> Oct 02 2007
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb algonet.se> Oct 02 2007
- Bill Baxter <dnewsgroup billbaxter.com> Oct 04 2007
- "Kyle G." <kyle.james.gibson gmail.com> Oct 02 2007
- "Janice Caron" <caron800 googlemail.com> Oct 04 2007
- =?ISO-8859-1?Q?Anders_F_Bj=F6rklund?= <afb algonet.se> Oct 02 2007
- "Kyle G." <kyle.james.gibson gmail.com> Oct 02 2007
- 0ffh <spam frankhirsch.net> Oct 02 2007
- Gregor Richards <Richards codu.org> Oct 02 2007
- Kirk McDonald <kirklin.mcdonald gmail.com> Oct 02 2007
- Bill Baxter <dnewsgroup billbaxter.com> Oct 02 2007
- Lutger <lutger.blijdestijn gmail.com> Oct 03 2007
- 0ffh <spam frankhirsch.net> Oct 02 2007
- Derek Parnell <derek psych.ward> Oct 02 2007
- Chris Nicholson-Sauls <ibisbasenji gmail.com> Oct 02 2007
- Robert Fraser <fraserofhenight gmail.com> Oct 03 2007
- "Jarrett Billingsley" <kb3ctd2 yahoo.com> Oct 03 2007
- Alexander Panek <a.panek brainsware.org> Oct 03 2007
- Walter Bright <newshound1 digitalmars.com> Oct 02 2007
- Bill Baxter <dnewsgroup billbaxter.com> Oct 02 2007
- "Kyle G." <kyle.james.gibson gmail.com> Oct 02 2007
Hi,
First time posting here on the NG, and certainly not my last.
D has a good deal of syntactic sugar which results in easier to read
code. However, there's one particular thing that has been bothering me
for a while now:
void foo(void[] var) {
if (var !is null)
// line of code
}
int main() {
foo(null);
}
The code I am concerned about is "var !is null" which appears to
translate to "var not is null" when it actually means "var is not null."
Is there any special reason why we are unable to do "var isnot null" or
"var is not null"?
Oct 02 2007
Kyle G. wrote:Hi, First time posting here on the NG, and certainly not my last. D has a good deal of syntactic sugar which results in easier to read code. However, there's one particular thing that has been bothering me for a while now: void foo(void[] var) { if (var !is null) // line of code } int main() { foo(null); } The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
Only reason is that it would require adding an extra keyword to the language. More annoying to me is that !in doesn't work. --bb
Oct 02 2007
Bill Baxter wrote:More annoying to me is that !in doesn't work.
What's the logical negation of a pointer, anyway ? But !in usually ranks high on the dwishlist thing. --anders
Oct 02 2007
Anders F Björklund wrote:Bill Baxter wrote:More annoying to me is that !in doesn't work.
What's the logical negation of a pointer, anyway ?
bool negated_pointer = !some_ptr; Seems pretty clear to me. --bb
Oct 04 2007
Bill Baxter wrote:Kyle G. wrote:Hi, First time posting here on the NG, and certainly not my last. D has a good deal of syntactic sugar which results in easier to read code. However, there's one particular thing that has been bothering me for a while now: void foo(void[] var) { if (var !is null) // line of code } int main() { foo(null); } The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
Only reason is that it would require adding an extra keyword to the language. More annoying to me is that !in doesn't work. --bb
Doing !(key in map) definitely causes me distress.
Oct 02 2007
On 10/4/07, Bill Baxter <dnewsgroup billbaxter.com> wrote:Anders F Björklund wrote:Bill Baxter wrote:More annoying to me is that !in doesn't work.
What's the logical negation of a pointer, anyway ?
bool negated_pointer = !some_ptr; Seems pretty clear to me.
Technically speaking, what you've done there is implicitly cast your pointer to bool and _then_ logically negated it. Mathematically speaking, if -(-x) does not equal x then you can't call it a negation. It has to be self-inverse. Logical not has this property when applied to bools !(!x)== x. I think this is the point that Anders was making, with some good humor thrown in. You cannot take the logical not of a pointer. You have to cast it to bool first. Of course this is no problem. I'm just being mentioning this for the hell of it :-)
Oct 04 2007
Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
A few hundred, search the newsgroup for more details... If you hate it a lot, then just use "if (var)" instead. --anders
Oct 02 2007
Anders F Björklund wrote:Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
A few hundred, search the newsgroup for more details... If you hate it a lot, then just use "if (var)" instead. --anders
It's not that I hate it. In fact, I use !is all the time where it applies. It just looks bad.
Oct 02 2007
Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
I think the syntax is perfectly logical, because the negation applies to the /operator/ and not the /operand/.Note the analogy of the statements: (p == null) <--> (p is null) (p != null) <--> (p !is null) Nobody would ever get try to write (i == !null), so why (i is not null)? Regards, Frank
Oct 02 2007
0ffh wrote:Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
I think the syntax is perfectly logical, because the negation applies to the /operator/ and not the /operand/.Note the analogy of the statements: (p == null) <--> (p is null) (p != null) <--> (p !is null) Nobody would ever get try to write (i == !null), so why (i is not null)? Regards, Frank
Yeah, to me "a is not null" makes sense as an English sentence, but as an operator it seems like "a is (not null)". (not null) would have to evaluate to ... 1? So this would be a is 1, which isn't what we want at all. Suffice to say D !is English. - Gregor Richards
Oct 02 2007
Gregor Richards wrote:0ffh wrote:Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
I think the syntax is perfectly logical, because the negation applies to the /operator/ and not the /operand/.Note the analogy of the statements: (p == null) <--> (p is null) (p != null) <--> (p !is null) Nobody would ever get try to write (i == !null), so why (i is not null)? Regards, Frank
Yeah, to me "a is not null" makes sense as an English sentence, but as an operator it seems like "a is (not null)". (not null) would have to evaluate to ... 1? So this would be a is 1, which isn't what we want at all. Suffice to say D !is English. - Gregor Richards
I'd like to point out that "is not" is exactly what the Python equivalent of "!is" is. http://docs.python.org/ref/comparisons.html if a is not None: foo() Likewise, it also uses "not in". -- Kirk McDonald http://kirkmcdonald.blogspot.com Pyd: Connecting D and Python http://pyd.dsource.org
Oct 02 2007
Kirk McDonald wrote:Gregor Richards wrote:0ffh wrote:Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
I think the syntax is perfectly logical, because the negation applies to the /operator/ and not the /operand/.Note the analogy of the statements: (p == null) <--> (p is null) (p != null) <--> (p !is null) Nobody would ever get try to write (i == !null), so why (i is not null)? Regards, Frank
Yeah, to me "a is not null" makes sense as an English sentence, but as an operator it seems like "a is (not null)". (not null) would have to evaluate to ... 1? So this would be a is 1, which isn't what we want at all. Suffice to say D !is English. - Gregor Richards
I'd like to point out that "is not" is exactly what the Python equivalent of "!is" is. http://docs.python.org/ref/comparisons.html if a is not None: foo() Likewise, it also uses "not in".
And also the binary boolean operators 'and' and 'or'. if you is not None and I is not finished or they is happy: goto_skool() See reads just like English! --bb
Oct 02 2007
Bill Baxter wrote:if you is not None and I is not finished or they is happy: goto_skool() See reads just like English! --bb
It took me a moment to realize this can be valid code. Perhaps it is the lack of syntax highlighting, but as code, it is hard to read for me.
Oct 03 2007
Kirk McDonald wrote:I'd like to point out that "is not" is exactly what the Python equivalent of "!is" is. [...] Likewise, it also uses "not in".
Well, "not in" seems okay but "is not" looks.... like wierd! Let "not" be a prefix, and a prefix always, lest you flummox the coder! :) Regards, Frank
Oct 02 2007
On Tue, 02 Oct 2007 17:23:48 -0400, Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
This gets discussed every 6-months or so ... my favourite replacement keyword so far is "aint" as in "if (var aint null) " :-) -- Derek Parnell Melbourne, Australia skype: derek.j.parnell
Oct 02 2007
Derek Parnell wrote:On Tue, 02 Oct 2007 17:23:48 -0400, Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
This gets discussed every 6-months or so ... my favourite replacement keyword so far is "aint" as in "if (var aint null) " :-)
Which reminds me, I need to petition for Ruby to have 'is'/'aint' added to it. They've already got 'unless' and 'until', so why not? -- Chris Nicholson-Sauls
Oct 02 2007
Chris Nicholson-Sauls Wrote:Derek Parnell wrote:On Tue, 02 Oct 2007 17:23:48 -0400, Kyle G. wrote:The code I am concerned about is "var !is null" which appears to translate to "var not is null" when it actually means "var is not null." Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
This gets discussed every 6-months or so ... my favourite replacement keyword so far is "aint" as in "if (var aint null) " :-)
Which reminds me, I need to petition for Ruby to have 'is'/'aint' added to it. They've already got 'unless' and 'until', so why not? -- Chris Nicholson-Sauls
From some experience in Perl, I can say unless(P) is slightly clearer than if(!P) and until(P) is slightly clearer than while(!P) ... in most cases. I'm not arguing it should be added to D (esp. since if there are multiple ways to express something, stuff can get confusing), but they _do_ make code just that much easier to read. On that note, I'm also a slight fan of the postfix notation for simple ifs (i.e. something like "a = b if b;" or "file.read() while file.hasMoreBytes();"), but it makes parsing a *****.
Oct 03 2007
"Robert Fraser" <fraserofhenight gmail.com> wrote in message news:fdvg0m$2c3e$1 digitalmars.com...From some experience in Perl, I can say unless(P) is slightly clearer than if(!P) and until(P) is slightly clearer than while(!P) ... in most cases. I'm not arguing it should be added to D (esp. since if there are multiple ways to express something, stuff can get confusing), but they _do_ make code just that much easier to read. On that note, I'm also a slight fan of the postfix notation for simple ifs (i.e. something like "a = b if b;" or "file.read() while file.hasMoreBytes();"), but it makes parsing a *****.
Course you also get people who think it's "cute" to do something like while(someCondition) { ..... 3 pages of code... ..... } if(someOtherCondition)
Oct 03 2007
Derek Parnell wrote:This gets discussed every 6-months or so ... my favourite replacement keyword so far is "aint" as in "if (var aint null) " :-)
I vote for if (var uint null) !
Oct 03 2007
Alexander Panek wrote:This gets discussed every 6-months or so ... my favourite replacement keyword so far is "aint" as in "if (var aint null) " :-)
I vote for if (var uint null) !
I thought the "if (var out null)" was somewhat amusing too... --anders
Oct 03 2007
Kyle G. wrote:Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
It all depends on what the meaning of "is" is.
Oct 02 2007
Walter Bright wrote:Kyle G. wrote:Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
It all depends on what the meaning of "is" is.
That's a good quote to go with your collection of famous things nobody ever said about D. You can attribute it to Dill Dinton. --bb, hoping you don't take this suggestion seriously.
Oct 02 2007
Walter Bright wrote:Kyle G. wrote:Is there any special reason why we are unable to do "var isnot null" or "var is not null"?
It all depends on what the meaning of "is" is.
That sounds like quote from a US politician. And so without 'is,' ... In this context, the first 'is' attempts to discern whether their exists a known accepted justification for the usage of "!is" as opposed to something potentially cleaner and easier to read. It appears the justification which has been applied here follows that an extra keyword in the language would not be necessary when existing language keywords suffice.
Oct 02 2007









Bill Baxter <dnewsgroup billbaxter.com> 