Hi
As we shared during the Boston F2F, we feel that the 'getX{s}ByZ()'
names are better, from a developer's perspective, because they "are
very clear and mostly follow established conventions" (as recognized by
the spec's author). This clear convention is useful, and not only for
DOM APIs. The W3C is sensitive to feedback from implementations and
platforms: the 'getX{s}ByZ()' method naming convention is also the
preferred convention on the Java platform for getters (setters have a
similar structure).
We find it unfortunate that past resolutions within the working group
are being invalidated (unless of course there are new
evidences/information that justify this act) in particular because this
behavior leads to rehashing issues instead of moving forward.
However, and for the sake of progress, we will go along with the new
decision taken in consensus by the WebAPI WG.
Jean-Yves
--
Senior Staff Engineer, Sun Microsystems GmbH,
Sonnenallee 1, 85551 Heimstetten, Germany
Geschäftsführer: Marcel Schneider, Wolfgang Engels, Dr. Roland Bömer;
Vorsitzender des Aufsichtsrates: Martin Häring
Amtsgericht München: HRB 161028, WEEE-Reg.-Nr. DE 20803943;
HypoVereinsbank München, Konto 31 625 009, BLZ 700 202 70
--
Lachlan Hunt wrote:
Hi,
I've been doing some research into the naming debate, hoping to be
able to find a resolution soon. While I haven't reached a final
decision yet, I have been through several hundred emails on the topic
and I thought it would be useful to send the research to the list and
get any final comments before I make a decision.
These are most of the proposed alternatives and a summary of their
associated arguments. Let me know if I missed any significant
argument.
match() matchAll()
matchOne() matchAll()
matchFirst() matchAll()
matchSingle() matchAll()
matchSelector() matchAllSelectors()
matchSelectors() matchAllSelectors()
* Existing implementation in Dean Edward's Base2 using matchAll() and
matchSingle().
* match() is associated with RegEx.
- Some suggested it was associated with a boolean return value,
but String.match() in JS returns array of matching strings.
* "Usually the base method [match()] returns the full result and there
are prefixed/postfixed methods that just return part of it."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Jun/0008.html
* "If there is to be another name it should be matchFirst though, not
matchOne, to be clear that it's returning the first match not just
some arbitrarily chose one."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Jun/0011.html
* "Having a short name might save us all a few keystrokes but it is
less
clear to developers what the call [matchAll] is doing and can create
bigger problems."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0014.html
* "The idea is to make this a common idiom with a convenient name so
people don't have to go to crazy lengths like making $() or $$()
functions to avoid using it."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0016.html
* "My only concern here is that we avoid the mistake that was made with
getElementsByTagName and getElementById -- the names should be easy
to type and short. I honestly think that if the one-item method is
[longer] than about 6 or 7 characters, then we've made a mistake.
"So I think "matchSelector" is too long. I think "matchSingle" is too
long. I think "select" and "match" are fine."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0018.html
* "We need to have an API set that people can read and understand
without having to go to reference material all the time to ask
themselves 'Hmm. Now what does select() do in this particular
situation?'".
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0021.html
* Many authors don't speak english, so many authors won't understand
the
name anyway, but the name should still be clear enough for those that
do.
* The name should be intuitive to avoid requiring authors to
continually
look them up.
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0026.html
* "If this ever implemented interoperably it's probably one of few
things web developers will just remember because they use it so
often."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0031.html
* Using a short name like .match() prevents a future markup language
using a match="" attribute with an associated .match DOM API.
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0098.html
select() selectAll()
selectOne() selectAll()
selectFirst() selectAll()
selectSingle() selectAll()
selectSingleNode() selectNodes()
selectNode() selectNodeList()
selectElement() selectElementList()
selectElement() selectAllElements()
selectOneElement() selectAllElements()
* Several people expressed a personal preference for select() and
selectAll().
* Using select*() has the advantage of being somewhat associated with
Selectors.
* select() is in conflict with HTMLTextAreaElement.select() and
HTMLInputElement.select(), so it has been immediately ruled out.
* selectAll() has potential for confusion with text selection APIs.
There are various APIs that use .selectAll(). Although none of them
seem to be related to the W3C DOM at all, and thus they don't clash,
there are many authors who write scripts for the DOM and also flash
and having document.selectAll() mean significantly different things
in each language would be very confusing.
http://msdn2.microsoft.com/en-us/library/system.windows.forms.textboxbase.selectall(VS.71).aspx
http://livedocs.adobe.com/dreamweaver/8/apiref/wwhelp/wwhimpl/js/html/wwhelp.htm?href="">
http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00003989.html
* selectSingleNode() and selectNodes() are the methods used for XPath
Queries in .NET.
* selectNode() and selectNodeList() are too similar to XPath methods,
which may create some confusion.
* The .NET XPath methods are precedence for not following the
getElementsBy* convention.
choose() chooseAll()
chooseOne() chooseAll()
chooseFirst() chooseAll()
chooseSingle() chooseAll()
* No known DOM APIs use names beginning with choose*(), so there's no
conflict.
* choose*() is a reasonable alternative to select*().
catch() catchAll()
* Suggested just once, along with the wording:
"I was wondering about catch, catchAll but maybe not a good idea".
--
http://lists.w3.org/Archives/Public/public-webapi/2006Jul/0040.html
* catch is a reserved word in many languges for try/catch blocks.
get() getAll()
getOne() getAll()
getOneElement() getAllElements()
getElement() getElementList()
getElementBySelector() getElementsBySelector()
getElementBySelectors() getElementsBySelectors()
getElementByCSSSelector() getElementsByCSSSelector()
getElementBySelector() getElementListBySelector()
getElementBySelectors() getElementListBySelectors()
* Many argued that the name should be in line with conventions for
existing DOM APIs like getElementsBy*()
* The getElement*/getElements* variants look too similar to each other,
which makes editing more difficult than it should be.
* getElementList* attempts to address the readability issue, but is not
consistent with existing method names.
* getElementBySelectors/getElementListBySelectors was the resolution
in this WG meeting http://www.w3.org/2007/01/25-webapi-minutes.html
* The plural form *Selectors may be technically more accurate, but it
seems unintuitive for authors who won't understand the difference and
has no benefit over the singular form.
* "The problem is that it requires _javascript_ programmers to type 22
characters before encountering characters that uniquely identify it,
and 19 characters before it's clear that the method will return a
NodeList."
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0051.html
* Authors generally don't like long method names and shouldn't be
forced
to alias the names, like the many using $() for getElementById().
* Existing getElementsBy*() methods return live node lists, whereas
this returns a static node list.
--
http://lists.w3.org/Archives/Public/public-webapi/2006Dec/0088.html
* The slight practical difference between live and static node lists
shouldn't really affect the naming.
* These methods provide a superset of the functionaliry given by the
existing getElementsBy* methods, which justifies having a name like
get() or getElement().
--
http://lists.w3.org/Archives/Public/public-webapi/2007Jan/0031.html
getElementByGroupOfSelectors() getElementsByGroupOfSelectors()
getElementByGroupOfSelectors() getElementListByGroupOfSelectors()
* Although these names are technically more accurate, sacrificing ease
of typing for this would be unnacceptable.
nodeBySelector() nodeListBySelector()
* These just shorten the name by removing the get prefix, which breaks
the convention.
getNode() getNodes()
getNode() getAllNodes()
getNodeBySelector() getNodeListBySelector()
getNodeByExpr() getNodeListByExpr()
getBySelector() getBySelectorAll()
* These name leave open the possibility that selectors may one day
match
non-element nodes in the future without the names suddenly becoming
technically incorrect.
* Using Expr instead of Selector doesn't make much sense, since it's
not
an _expression_.
getElementBySelector() getNodeListBySelector()
* This name is technically more accurate because the first returns a
single element and the second returns a static node list, but the
inconsistency would be confusing for authors.
css() cssAll()
cssQuery() cssQueryAll()
matchCSS() matchCSSAll()
* Selectors aren't just for CSS, as this API clearly demonstrates.
(also applies to the *ByCSSSelector variants above)
* People commonly associate selectors with CSS anyway, but I don't
think
we should encourage this increasingly confusing misconception.
* "I have a suspicion that ".css*()" would *really* confuse people into
thinking it's a way of setting CSS style properties, or getting
elements by classname, or just about anything other than a generic
selector language."
--
http://lists.w3.org/Archives/Public/public-webapi/2007Jan/0044.html
* "1) css is not a verb 2) this sounds like it would return style
declarations, not elements."
--
http://lists.w3.org/Archives/Public/public-webapi/2007Jan/0046.html
* cssQuery was previously implemented and used in a _javascript_ library.
--
 |
Jean-Yves Bitterlich |
Senior Staff Engineer |
Sun Microsystems GmbH |
Sonnenallee 1, 85551 Heimstetten,
Germany |
Mobile: |
+49-172-8187243 |
Phone: |
+49-89-46008-1097 (x61097) |
Fax: |
+49-89-46008-2978 (x62978) |
Email: |
[EMAIL PROTECTED] |
Amtsgericht München: HRB 161028
Geschäftsführer: Marcel Schneider, Wolfgang Engels, Dr. Roland Bömer
Vorsitzender des Aufsichtsrates: Martin Häring
WEEE-Reg.-Nr. DE 20803943
HypoVereinsbank München, Konto 31 625 009, BLZ 700 202 70
|
|