On Wed, 12 Feb 2003, Pit Capitain wrote:

> Yes, this is true. I see your point. But, at least for me, after
>   o.quality = 999'999
> it feels strange that
>   o.quality == 100
> The auto-adjust code might be handy if you always know what you're 
> doing, but it could also hide some errors in your program. I think if 
> I'd want to auto-adjust instead of raising an error, I would code it 
> like this:
>   def adjust_to_percent( value )
>     [[value,0].max,100].min
>   end
>   percent = o.quality = adjust_to_percent( 999'999 )
> to make it obvious whats going on.

This is the old debate between implicitness and explicitness. I am not
sure whether I would actually code that way. I'm always keeping
automatically generated GUI's in mind, and for some reason I had thought
that making it auto-adjust would be good, but now I'm no longer very
sure... My actual solution to that problem is more like:

1. Make a type declaration for the :quality property. Its type would be
either 0..100 or And[Integer,0..100] depending on circumstances.

2. Optionally check the validity of the value assigned to the property. I
consider it a good thing to modularize type-checking out of
type-declaration, which explains the "optional" here. The reason for that
modularization is that type-decls are useful in other circumstances
(marshalling... runtime help... automatic GUI generation... etc)

3. Actual policies of auto-adjust (and other recovery strategies) are a
responsibility of the GUI controls (or of a common library of policies
being used by the GUI library)

I've been thinking almost like this for a while but hadn't taken the time
to clarify my ideas...

I'm still not to sure about the auto-adjust, because automatic casting is
one kind of auto-adjust (it's just that it recreates the value as being of
a different class instead of the same class), and I'm not necessarily
willing to make it go away, and think that all kinds of auto-adjusting
should be done at the same level.

Many general software design questions still unsolved...

________________________________________________________________
Mathieu Bouchard                       http://artengine.ca/matju