digitalmars.D - Ambiguous class definition syntax
- Derek Parnell (40/40) Jul 29 2004 This is really a petty thing, so please excuse me, ... but I'm occasiona...
- Berin Loritsch (11/17) Jul 30 2004 Hmm, does this look familiar to anybody:
- me (11/13) Jul 30 2004 Nah, but almost right ;-) All interfaces names should be previxed with '...
- Arcane Jill (6/7) Aug 01 2004 Yuck. That is so Microsoft! Interfaces in Java don't all start with "I"....
- Andy Friesen (6/16) Aug 01 2004 Their .NET coding standard says to prefix interfaces with I as well.
- Matthew (6/14) Aug 01 2004 First, AFAIK, 'I' is also used for interfaces in .NET, so your assertion...
This is really a petty thing, so please excuse me, ... but I'm occasionally troubled by not knowing how a class is being derived. There is no quick way to tell if the first identifier after the ':' is another class or an interface. It probably doesn't matter, of course. Anyhow, although the documentation states that the syntax is ... ClassDeclaration: 'class' Identifier [SuperClass {, InterfaceClass }] ClassBody SuperClass: ':' Identifier InterfaceClass: Identifier it should really be more like ... ClassDeclaration: 'class' Identifier [ClassDerivation] ClassBody ClassDerivation: ':' (SuperClass | InterfaceClass) {',' InterfaceClass} SuperClass: Identifier InterfaceClass: Identifier Because the first item can be either a class or an interface. The current syntax documentation implies that it can only be a class, but that is not correct. I was thinking that the production ClassDerivation could be changed slightly to ... ClassDerivation: ':' [(SuperClass | InterfaceClass)] {',' InterfaceClass} such that we could write ... class Foo : ,iOne, iTwo {} and thus explicitly show that the first identifier in the derivation list is an interface. Of course, this wouldn't help with code written under the current syntax rule. Or if one really wants to get wordy... class Foo: parent BaseFoo, interface iOne, iTwo {} This might also help get over the apparent confusion that a D interface is like a lightweight abstract class, which it is not. -- Derek Melbourne, Australia 30/Jul/04 2:07:43 PM
Jul 29 2004
Derek Parnell wrote:Or if one really wants to get wordy... class Foo: parent BaseFoo, interface iOne, iTwo {} This might also help get over the apparent confusion that a D interface is like a lightweight abstract class, which it is not.Hmm, does this look familiar to anybody: class Foo extends BaseFoo implements iOne, iTwo {} ??? There are a hundred ways of doing this. I know C++ doesn't care one way or the other what the parent classes are (assuming you equate a pure virtual base class to an interface). Honestly, I think it is clumsy to force a comma for a placeholder of whether the first element of the dirivation list is not an interface. What is so bad about the way it currently _works_? If nothing, then just change the text that describes it.
Jul 30 2004
Or if one really wants to get wordy... class Foo: parent BaseFoo, interface iOne, iTwo {}Nah, but almost right ;-) All interfaces names should be previxed with 'I'. interface IMessageBoxInvoker { MessageBox(char[] message); } class MessageBoxInvoker : IMessageBoxInvoker { MessageBox(char[] message) {...} } That will prevent name clashes too... Matt
Jul 30 2004
In article <ceeu8i$e0s$1 digitaldaemon.com>, me says...Nah, but almost right ;-) All interfaces names should be previxed with 'I'.Yuck. That is so Microsoft! Interfaces in Java don't all start with "I". The only place this I-rule apprears to be true is in the Microsoft COM world, Well, the D style guide says "just say no" to hungarian notation, and I rather agree with that. Arcane Jill
Aug 01 2004
Arcane Jill wrote:In article <ceeu8i$e0s$1 digitaldaemon.com>, me says...Their .NET coding standard says to prefix interfaces with I as well. (a peculiar exception to the rule, incidently: except for IInterfaces, pretty much everything is to be written using PascalCase, except for privateAttributes and functionParameters) -- andyNah, but almost right ;-) All interfaces names should be previxed with 'I'.Yuck. That is so Microsoft! Interfaces in Java don't all start with "I". The only place this I-rule apprears to be true is in the Microsoft COM world, Well, the D style guide says "just say no" to hungarian notation, and I rather agree with that.
Aug 01 2004
"Arcane Jill" <Arcane_member pathlink.com> wrote in message news:ceiu0n$245s$1 digitaldaemon.com...In article <ceeu8i$e0s$1 digitaldaemon.com>, me says...First, AFAIK, 'I' is also used for interfaces in .NET, so your assertion is not correct. (And I've seen plenty of non-COM C++ code in various clients' code bases.) If something emanates from Microsoft (or any other specific vendor), does that make it automatically bad? That is a pathetic attitude. Finally, Hungarian is about decorating _variable_ names with type. The 'I' is part of the _type_ name.Nah, but almost right ;-) All interfaces names should be previxed with 'I'.Yuck. That is so Microsoft! Interfaces in Java don't all start with "I". The only place this I-rule apprears to be true is in the Microsoft COM world, Well, the D style guide says "just say no" to hungarian notation, and I rather agree with that. Arcane Jill
Aug 01 2004