>> I do not completely agree with you on this one (but you already now it). The
>> thing is that if we use integers then the user will have to constantly ask
>> which enum value should I pass here...
>
> The idea is to not expose enum values to user at all.
> Sometimes it easily doable, sometimes not.. it depends , of course..
> But ideally, there should be only messages.
>

Just to elaborate a bit, here the real example
AthensCairoPaintMode

cairo has a function
void cairo_set_operator (AthensCairoCanvas canvas, cairo_operator_t
aCairoOperatorT) )

to set a composition operator (porter-duff one).
The  cairo_operator_t is indeed enum there.

So, if i would use enums, users would need to tell:

   canvas setPaintMode: enumValue

instead, the syntax to say that is following:

   canvas paintMode enumValueName

in that way i deal with two problems:
  - users don't have to use shared pools in their code, more than
that, it is impossible to pass some invalid value to the function.

  - since Athens can use multiple backends, using backend-specific
enumeration values
would immediately render application tightly coupled with specific backend.
To avoid that, i would be needing to define own backend-neutral
enumeration and then
map it to backend-specific one.. This is stinks a lot to my taste..

Instead, a backend-specific AthensPaintMode subclass simply implements
own method per each
enumValueName for example:

overlay 
        ^ self setOperator: CAIRO_OPERATOR_OVERLAY


-- 
Best regards,
Igor Stasenko.

Reply via email to