Hi Chuck, more questions.
Why did you chose to diverge from the well known "?:" and "??" operators in favor of if(,,) and ? to do the same things?
if(,,) seems un-Cobra to me with it's brackets, and changing the meaning of ? from what people are used to seeing in other languages...
Just wondering what the thought process was.
Nev
Forums
conditional/ternary, coalesce
9 posts
• Page 1 of 1
Re: conditional/ternary, coalesce
Keep in mind that Cobra's syntax derives mostly from Python and not from C/C++/C# which is where ?: comes from.
Also, Cobra often kicks things off with a keyword. This even includes many expressions such as "for", "ref", "any" and "all".
Most importantly, from a language design perspective, if a type of expression has an equivalent or analogous statement, I prefer the same keyword: for-statement and for-expression; if-statement and if-expression. If we ever added a conditional looping expression, you can predict it would start with "while".
I did debate on "if(cond, tpart, fpart)" vs. "if cond get tpart else fpart". Note that "get" is already a keyword used for a similar purpose in for-expressions and, of course, "else" is a keyword already used in if-statements. Now that I have used "if(cond, tpart, fpart)", I find that the commas don't provide separation as good as I would like to see. On the plus side "if(,,)" is tighter/shorter than "if get else".
Regarding ??, Cobra has the same thing with ?, but it doesn't have to be doubled since there is no ternary ?: operator that has to be distinguished from.
So any opinions on if(,,) vs. if-get-else?
The if-get-else form is probably done some injustice by the lack of syntax highlighting which would provide better separation:
return if token.which == 'OPEN_DO' get .paramDecls(true) else List<of Param>()
See also for-expression.
Also, Cobra often kicks things off with a keyword. This even includes many expressions such as "for", "ref", "any" and "all".
Most importantly, from a language design perspective, if a type of expression has an equivalent or analogous statement, I prefer the same keyword: for-statement and for-expression; if-statement and if-expression. If we ever added a conditional looping expression, you can predict it would start with "while".
I did debate on "if(cond, tpart, fpart)" vs. "if cond get tpart else fpart". Note that "get" is already a keyword used for a similar purpose in for-expressions and, of course, "else" is a keyword already used in if-statements. Now that I have used "if(cond, tpart, fpart)", I find that the commas don't provide separation as good as I would like to see. On the plus side "if(,,)" is tighter/shorter than "if get else".
Regarding ??, Cobra has the same thing with ?, but it doesn't have to be doubled since there is no ternary ?: operator that has to be distinguished from.
So any opinions on if(,,) vs. if-get-else?
code = if(.isSigned, -1, 1) * .size
code = (if .isSigned get -1 else 1) * .size # or,
code = .size * if .isSigned get -1 else 1
_superNode = if(.compiler.nodeStack.count > 0, .compiler.nodeStack.peek, _superNode ? nil)
_superNode = if .compiler.nodeStack.count > 0 get .compiler.nodeStack.peek else _superNode ? nil
return if(token.which == 'OPEN_DO', .paramDecls(true), List<of Param>())
return if token.which == 'OPEN_DO' get .paramDecls(true) else List<of Param>()
The if-get-else form is probably done some injustice by the lack of syntax highlighting which would provide better separation:
return if token.which == 'OPEN_DO' get .paramDecls(true) else List<of Param>()
See also for-expression.
- Charles
- Posts: 2515
- Location: Los Angeles, CA
Re: conditional/ternary, coalesce
My vote would be for if get else over if(,,).
The bracketed syntax just looks weird. It doesn't look Cobra-y or Python-y. I can't put my finger on it exactly, but maybe it looks too much like a function or method call despite being 'if'.
If you were aiming at tightness and shortness ?: would be the tightest and shortest, so I don't think it's actually a real plus for if(,,) - rather an argument for ?: instead of if(,,).
And my 2 cents worth on ? rather than ?? - the reason of simply not having to differentiate from a ? in Cobra doesn't seem to me like enough reason to be different from C#'s operator in that it makes a point of confusion that doesn't need to be.
Thanks.
The bracketed syntax just looks weird. It doesn't look Cobra-y or Python-y. I can't put my finger on it exactly, but maybe it looks too much like a function or method call despite being 'if'.
On the plus side "if(,,)" is tighter/shorter than "if get else".
If you were aiming at tightness and shortness ?: would be the tightest and shortest, so I don't think it's actually a real plus for if(,,) - rather an argument for ?: instead of if(,,).
And my 2 cents worth on ? rather than ?? - the reason of simply not having to differentiate from a ? in Cobra doesn't seem to me like enough reason to be different from C#'s operator in that it makes a point of confusion that doesn't need to be.
Thanks.
call me Nev.
- nevdelap
- Posts: 61
- Location: Buenos Aires
Re: conditional/ternary, coalesce
I put your code in gedit, and yeah, the if get else stands out nicely.
It doesn't help that gedit currently wants to highlight if( as a function call and doesn't highlight the ? as an operator inside it, but even if it did them right it would still look less clear with the commas, like you said.
?? stands out clearly as a different thing from question marks marking nilable types, Yes, sure, they are butted up against their type and used in completely different contexts, but still, I don't think it hurts.
It doesn't help that gedit currently wants to highlight if( as a function call and doesn't highlight the ? as an operator inside it, but even if it did them right it would still look less clear with the commas, like you said.
?? stands out clearly as a different thing from question marks marking nilable types, Yes, sure, they are butted up against their type and used in completely different contexts, but still, I don't think it hurts.
call me Nev.
- nevdelap
- Posts: 61
- Location: Buenos Aires
Re: conditional/ternary, coalesce
Mines (now) for the status quo ( if(,,) rather than if/get/else ( why isnt it if/get/elseget ? )
Initially I would have preferred something like (?:) ( with the enclosing '()' for explicit expression disambiguation) just from historical familiarity
but the rest of cobra is minimalist and keyword based and so should this be and this works for me...
I note that in any use of if/get/else thats embedded in an expression youd usually ( like ?: in C) wrap it in () to
clarify the entire construct for readers - thats not necessary with if(,,) its already visually contained.
It seems to me that the items you're complaining about with if(,,) are artifacts of your editors
ie make gedit hilite 'if(' properly, differently from 'if' and choose a better font and size than the example used in the image so that commas/punctuation is visible
I quite like the ? as a null-coalesce ( vs ?? or anything else) it fits nicely with trailing ? on types to indicate ability to be null....
Initially I would have preferred something like (?:) ( with the enclosing '()' for explicit expression disambiguation) just from historical familiarity
but the rest of cobra is minimalist and keyword based and so should this be and this works for me...
I note that in any use of if/get/else thats embedded in an expression youd usually ( like ?: in C) wrap it in () to
clarify the entire construct for readers - thats not necessary with if(,,) its already visually contained.
It seems to me that the items you're complaining about with if(,,) are artifacts of your editors
ie make gedit hilite 'if(' properly, differently from 'if' and choose a better font and size than the example used in the image so that commas/punctuation is visible
I quite like the ? as a null-coalesce ( vs ?? or anything else) it fits nicely with trailing ? on types to indicate ability to be null....
- hopscc
- Posts: 632
- Location: New Plymouth, Taranaki, New Zealand
Re: conditional/ternary, coalesce
I don't agree with the artifacts of the editor comment. Yes, if if the if( was the right color it would be better, and I pointed that out, but using a big font to make punctuation stand out wouldn't make me like Perl any better, so using a bigger font just to see commas in Cobra doesn't make an argument to me.
call me Nev.
- nevdelap
- Posts: 61
- Location: Buenos Aires
Re: conditional/ternary, coalesce
Thinking out loud...
These exist...
Therefore...?
Seems to fit the criteria for keyword based, same order as if statement, and clean, and nicely Cobra-ish, though still has one comma it doesn't mandate the ugly brackets that look like a function.
Opinions?
These exist...
if b
a = c
else
a = d
if b, a = c
else, a = d
Therefore...?
a = if b, c else d
Seems to fit the criteria for keyword based, same order as if statement, and clean, and nicely Cobra-ish, though still has one comma it doesn't mandate the ugly brackets that look like a function.
Opinions?
call me Nev.
- nevdelap
- Posts: 61
- Location: Buenos Aires
Re: conditional/ternary, coalesce
Alright, my two cents on this:
I don't like the if(,,) layout, it doesn't look like cobra to me. I like the if-get-else idea, but I think perhaps it should be if-get-else-get instead. And, perhaps separate the elements with commas? I know that it isn't as compact, but how much longer would it really take to type two commas?
Also, would it be possible to instead it be instead:
I think having the "get" keyword infront of the "if" would make more sense. (maybe this could be expanded to work with "branch" as well?)
Again, just my $0.02.
I don't like the if(,,) layout, it doesn't look like cobra to me. I like the if-get-else idea, but I think perhaps it should be if-get-else-get instead. And, perhaps separate the elements with commas? I know that it isn't as compact, but how much longer would it really take to type two commas?
Also, would it be possible to instead it be instead:
get if <logic>, <something> else [if] <something>,
I think having the "get" keyword infront of the "if" would make more sense. (maybe this could be expanded to work with "branch" as well?)
Again, just my $0.02.
- _Gold_Fish
- Posts: 18
Re: conditional/ternary, coalesce
Agreed - The
expression is succinct and arguably more cobra -ish ( whatever you take that to mean).
though embedded in an expression you'd still want it bracketed
So I wouldnt say its that much a win over the incumbent ( if(,,) ), merely different.
and
nevdelap - I want to emphasize that I said to use a better font not (necessarily) a bigger one as you quoted (twice).
(better here being a font that works better personally to easily distinguish all the tokens ( snidely here I might suggest a custom one that displays commas as a one glyph 'else' )
The example I gave is better (for me at least) in that it I can clearly see and differentiate text from whitespace and easily identify punctuation separate from both and each other
(incl commas) . Incidentally to that its also larger . YMMV
I used the same editor/font when I did perl programming and it unfortunately didnt make me like perl any better either (though I could easily distinguish all the tokens).
- Code: Select all
a = if b, c else d
expression is succinct and arguably more cobra -ish ( whatever you take that to mean).
though embedded in an expression you'd still want it bracketed
- Code: Select all
a = (if b, c else d) * f + g
code = (if .isSigned, -1 else 1) * .size
code = .size * (if .isSigned, -1 else 1)
_superNode = (if .compiler.nodeStack.count > 0, .compiler.nodeStack.peek else _superNode) ? nil # slightly tweaked from previous
return if token.which == 'OPEN_DO', .paramDecls(true) else List<of Param>()
return (if token.which == 'OPEN_DO', .paramDecls(true) else List<of Param>()) # better ??
So I wouldnt say its that much a win over the incumbent ( if(,,) ), merely different.
and
nevdelap - I want to emphasize that I said to use a better font not (necessarily) a bigger one as you quoted (twice).
(better here being a font that works better personally to easily distinguish all the tokens ( snidely here I might suggest a custom one that displays commas as a one glyph 'else' )
The example I gave is better (for me at least) in that it I can clearly see and differentiate text from whitespace and easily identify punctuation separate from both and each other
(incl commas) . Incidentally to that its also larger . YMMV
I used the same editor/font when I did perl programming and it unfortunately didnt make me like perl any better either (though I could easily distinguish all the tokens).
- hopscc
- Posts: 632
- Location: New Plymouth, Taranaki, New Zealand
9 posts
• Page 1 of 1
Who is online
Users browsing this forum: No registered users and 8 guests