Semicolon can be left out after do-while
Emil Madsen
sovende at gmail.com
Wed Apr 13 09:31:32 PDT 2011
On 13 April 2011 16:17, Kai Meyer <kai at unixlords.com> wrote:
> On 04/13/2011 07:44 AM, Emil Madsen wrote:
>
>> On 13 April 2011 14:36, Steven Schveighoffer <schveiguy at yahoo.com
>> <mailto:schveiguy at yahoo.com>> wrote:
>>
>> On Tue, 12 Apr 2011 18:00:40 -0400, spir <denis.spir at gmail.com
>> <mailto:denis.spir at gmail.com>> wrote:
>>
>> On 04/12/2011 11:51 PM, Steven Schveighoffer wrote:
>>
>> On Tue, 12 Apr 2011 17:21:57 -0400, spir
>> <denis.spir at gmail.com <mailto:denis.spir at gmail.com>> wrote:
>>
>> On 04/12/2011 09:21 PM, Steven Schveighoffer wrote:
>>
>> int main(){
>> int a,b;
>> do{
>> scanf("%d %d",&a,&b);
>> }while(a<b) //note missing semicolon here
>> return 0;
>> }
>>
>> The grammar specifies this correctly, but then
>> again, the example uses the
>> semicolon.
>> (
>> http://www.digitalmars.com/d/2.0/statement.html#DoStatement)
>> [...]
>> I think the grammar should be changed...
>>
>>
>> yop!
>>
>> This is almost as bad as go's
>> requirement for if statement opening block to be on
>> the same line...
>>
>>
>> why? I like Go's syntactuc diffs. (except for its
>> "multi-for")
>>
>>
>> in Go, this:
>>
>> if(x)
>> {
>> gosWriteRoutineThatIDontKnowTheSyntaxOf("hello")
>> }
>>
>> is equivalent to this in D:
>>
>> if(x)
>> {
>> }
>>
>> writeln("hello");
>>
>> This is frankly unforgivable IMO.
>>
>> Of course it's fixable, but the attitude that "the coder
>> should know better"
>> doesn't really make me comfortable with it. And I hate the
>> "brace on the same
>> line" format (but this of course is not a real argument
>> against it).
>>
>>
>> Oh, that's what you meant! I find this a Good Thing, in that it
>> enforces one bracing style (the right one, that does not eats
>> one more line for just a '{').
>>
>>
>> No, it doesn't enforce anything. The above compiles and runs. What
>> it does is introduce subtle bugs.
>>
>> The way to fix it is to make the above an error.
>>
>>
>> About knowing or not about this (non/mis/-)feature, it's written
>> down, and clearly, in all Go docs I've read. And one cannot miss
>> it for very long anyway ;-)
>>
>>
>> I know that if(xyz); is not *ever* what I meant, but in C it
>> compiles. However, in D, it tells me I shouldn't do that. What
>> results is less bugs because I can't make that mistake without the
>> compiler complaining.
>>
>> I'm not saying that the spec isn't well defined, or the manual isn't
>> clear, what I'm saying is, the attitude reflected in the rule is
>> that greater burden is put on the developer to make sure they follow
>> the rules without compiler enforcement. It makes me want to not use
>> Go. And in fact, I will probably never use it as long as this rule
>> is in place.
>>
>>
>> Maybe, if not done already, a line starting with an opening
>> brace should generate a parsing error.
>>
>>
>> Typically this is used to create a new scope in C/D/Java/C#. This
>> allows declaring temporary variables, not sure how it is in Go, but
>> I'd assume something similar.
>>
>> -Steve
>>
>>
>>
>> Does D throw an error at; if(expression && expression)*; *or only at
>> if(expression);
>> Because you could actually use the first one, alike this:
>> <code>
>> #include <stdio.h>
>>
>> bool test()
>> {
>> printf("test\n");
>> return false;
>> }
>>
>> bool test2()
>> {
>> printf("test2\n");
>> return true;
>> }
>>
>> int main()
>> {
>> if(test() && test2());
>> }
>> </code>
>> Output = "test"
>> if test returns true, then: Output = "test" + "test2"
>>
>> Simply because its conditional, and if the first one fails, why bother
>> evaluating the rest?
>>
>> --
>>
>> // Yours sincerely
>> // Emil 'Skeen' Madsen
>>
>
> I would argue that the more correct way to do this would be to separate the
> statements that are used in the condition from the statements that are not
> used in the condition.
>
> if(test())
> test2();
>
> Since test2's return statement isn't used for anything means to me that it
> doesn't belong in the conditional statement.
>
Well I agree that its more correct for the case posted, but it can just get
somewhat messy, if your having a mix of conditionals say '&&' and '||'.
Even tho its not really good style, some of the people I study with use this
trick quite a lot converting functional programs, apparently (not my area of
expertise).
But surely I would go with your approach too, but if your having a deep
nesting of conditionals, I guess that could give some heavily nested code
too. (Atleast if you are to follow some specific coding standard).
--
// Yours sincerely
// Emil 'Skeen' Madsen
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.puremagic.com/pipermail/digitalmars-d-learn/attachments/20110413/b6bc22ca/attachment.html>
More information about the Digitalmars-d-learn
mailing list