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









Berin Loritsch <bloritsch d-haven.org> 