I'd also put in the pot a more declarative, less-smalltalkish-syntax approach: Class { name: 'A', superclass: Object, a: InstVar, b: InstVar, c: InstVar } Of course this could evolve. Some people will say that this is too verbose if you have lots of instance variables. I'd say that having too many instance variables is a code smell :) Guille On Mon, May 22, 2017 at 1:27 PM, Gabriel Cotelli <g.cotelli@gmail.com> wrote:
If we can get rid off the myriad of class creation methods count me in. :)
I would do something like:
ClassBuilder new name: #A; superclass: Object; addInstanceVariableNamed: 'a'; addInstanceVariableNamed: 'c'; addBooleanSlotNamed: 'z'; addClassVariableNamed: 'D'; use: SomeTrait; use: SomeOtherTrait; beWeak "if you want a weak subclass"; build
With all of this optional. If we can avoid to pass nil as superclass for the cases you don't have a superclass that would be good, maybe an specific method in the builder ?
On Mon, May 22, 2017 at 4:25 AM, Luc Fabresse <luc.fabresse@gmail.com> wrote:
Hi,
Following Pharo Days, I brainstormed about some possible class definition syntaxes. What I have in mind:
"basic mechanics, only THIS one in the image!" ClassDefinition new superclass: Object; "optional. If not specified, Object by default ;-)" name: #A; "optional and create an anonymous class if not specified" instVars: 'a b c'; traits: {TEquality}; package: 'Plop'; createClass. " this message sent might be hidden by the browser when accepting"
"---------------" "Some IDEAS (but I did not find one that I really like) of scripting/shorter syntaxes that must ALWAYS end up calling the above basic mechanics at the end:"
Class fromDefinition: [ :def | def name: #sub; instVars: 'w r g'; superclass: Object ].
Object subclass "<-- returns a subclass of Object but the problem is that the new class is muted each time and the class definition is not explicit" name: #A; ivs: 'a b c'; traits: { TEquality }.
{ #superclass -> Object. #name -> #sub. #instVars -> 'a b c' } asClass.
{ Object asSuperclass. #sub asClassName. 'a b c' asInstVars. 'c' asClassVar } asClass.
"litteral approach" #( name A superclass Object instVars #(a b c) instVar d ) asClass
#Luc
-- Guille Polito Research Engineer French National Center for Scientific Research - *http://www.cnrs.fr* <http://www.cnrs.fr> *Web:* *http://guillep.github.io* <http://guillep.github.io> *Phone: *+33 06 52 70 66 13