- From: cowwoc <cowwoc@bbs.darktech.org>
- Date: Fri, 06 Dec 2013 14:33:17 -0500
- To: Jan-Ivar Bruaroey <jib@mozilla.com>, public-media-capture@w3.org
I get your point of view. You are comparing this case to object inheritance where the API expects you to pass in an object that implements function filter() -- and it does -- but it also happens to implement function close(). So from your point of view, the API should ignore close() and accept the input. In that case, I would agree with you. The problem is that we're *not* talking about classes/functions. We are talking about *data*. You are proposing a sort of "data inheritance" and I get that you want to avoid throwing exceptions in order to allow new keys to be added in the future, but my point remains: you need to either ignore unknown keys, or provide a function that checks if a key is supported, but not both. You can read on below for more specific answers but my main point is above. On 06/12/2013 1:53 PM, Jan-Ivar Bruaroey wrote: > On 12/6/13 11:56 AM, cowwoc wrote: >> There is nothing in Javascript which implies that unknown keys should >> be ignored silently. > > Yes there is. > > JavaScript APIs accept extra parameters and do not throw. This is > established practice, as Travis points out in > http://lists.w3.org/Archives/Public/public-media-capture/2013Oct/0129.html > > There is nothing in Javascript which implies that unknown keys should > be ANYTHING BUT ignored silently. Extra parameters are not the same thing as unknown keys in a dictionary; they are varargs of type Object[]. Unknown dictionary keys are equivalent to passing an invalid *value* into a known function parameter. >> Throwing exceptions on bad input is not meant as a mechanism for >> detecting browser support. There is no duplication here. Typos are >> not an indication that the browser doesn't support the input *yet*. >> They are an indication that the browser may *never* support this kind >> of input. > > You cannot distinguish typos from future parameters in JavaScript, and > trying to is misguided, because it prevents adding new parameters in > the future without breaking old implementations. > > Would you have us throw if 'audio' or 'video' were misspelled? If so, > how could we ever add a third media type like 'smellovision' ? I would invoke a function that checks whether "smellovision" is supported by the browser, and throw an exception if "audio" or "video" are misspelled. >>> What about: { audio: true, video: { optional: { maxW1dth: 320, >>> maxHeight: 240 }}} ? >>> >>> or: { audio: true, video: { mandtory: { maxW1dth: 320, maxHeight: >>> 240 }}} ? ... >> I'm not advocating changing the language, just validating the >> function input. > > This is function input to gUM()! Would you have us fail on the two > cases above? Yes, I would throw exceptions for the above two cases. Bad input data of any kind should trigger an exception. Gili
Received on Friday, 6 December 2013 19:33:47 UTC