Wart: -1 for not found

Kevin Reid <[email protected]>
Newsgroups gmane.comp.lang.e.general
Message-ID <[email protected]>
The EList methods indexOf1, startOf, lastIndexOf1, lastStartOf return  
-1 if nothing is found. This is a wart outside of a static type  
system, and a potential source of bugs if not checked for. I propose  
that they be changed to either return null or a broken reference upon  
failure, or take an ejector/return-value-thunk parameter which is  
invoked upon failure.

The problems with returning -1 are:
   - it is a number, so code can erroneously proceed as if it were an  
index
   - what does -2 mean?

Note this end of a previous discussion thread that indexOf1 should be  
renamed to indexOf: http://www.eros-os.org/pipermail/e-lang/2005-May/010623.html 
  -- doing both of these changes at once would be better than  
separately.

Common Lisp's analogous functions, search and position, return nil  
upon failure.
http://www.lispworks.com/documentation/HyperSpec/Body/f_pos_p.htm
http://www.lispworks.com/documentation/HyperSpec/Body/f_search.htm

Sample code (from evalServerPool.e):

def i := active.indexOf1(es)
if (i != -1) {
     active.removeRun(i, i + 1)
}

If indexOf1 returns null, this can be written as:

if (active.indexOf1(es) =~ i :int) {
     active.removeRun(i, i + 1)
}

(notNull could be used instead of int.)

If indexOf1 takes a failure-handler, this can be written as:

escape fail {
   def i := active.indexOf1(es1, fail)
   active.removeRun(i, i + 1)
}

or, perhaps perversely,

if (es =~ via (active.indexOf1) i) {
   active.removeRun(i, i + 1)
}

-- 
Kevin Reid                            <http://homepage.mac.com/kpreid/>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.