> On Dec 23, 2019, at 10:34 AM, Carlos Rovira <[email protected]> wrote: > >>> If NaN is not allowed then what’s the uninitialized value? >> >> The initial value is obviously NaN. That has a special meaning on the >> uninitialized state — meaning there’s no value to set. >> > > For me that't the key: in JS a style not set means it has the default value > since is not assigned to a concrete instance. > (width and height defaults to auto, position to static, display to block or > inline depending on the element).
I disagree. That’s just an implementation detail that doesn’t concern the user. The getter for dimensions never return NaN, so while “_height” might be NaN, “height” (the getter) will never be NaN. > >> >> My point is that *setting* the value to NaN is an anti-pattern (besides >> adding extra code for that not being PAYG). Usually setting a value which >> is supposed to be a valid number to NaN indicates a bug somewhere. We’d be >> doing a better service to developers by explicitly making NaN illegal and >> throwing an error rather than allowing it and encouraging an anti-pattern. >> > > We can do that, but IMO the special way JS works will need people to learn > about what means NaN for width/height in Royale, all because JS does in > that strange way, and we need to think "what will be more useful for our > devs/users?", options are: > > - Remove style value for width/height: I think that will be useful for > them (I know since I work on things like that all the time) We should have an inheritWidth and inheritHeight utility function which removes the style. For non-basic components (such as Jewel), I’d bake this into the components as a method (with the same name). It likely makes sense to have inheritX and inheritY as well. > - Make it ilegal (throw error): IMHO, people will find this strange > since NaN is a possible value for Number, so I think nothing better or > worse than the above option, but more cumbersome since people will left > without options to go back to the default value in JS. Then some of them > could try to do going to lower JS code as I did in some components already. We should do this as well. I don’t think it’s strange at all to get an error “height must be a valid number”. It would go a long way towards finding bugs. I’ve actually bumped into this class of bugs already.
