[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
return
From: |
Lars Magne Ingebrigtsen |
Subject: |
return |
Date: |
Fri, 26 Nov 2010 09:57:21 +0100 |
User-agent: |
Gnus/5.110011 (No Gnus v0.11) Emacs/24.0.50 (gnu/linux) |
Wouldn't it be nice if Emacs Lisp had a workable early-return mechanism?
(This is where Andreas chimes in with "What's wrong with <foo>?")
While debugging and fixing stuff, I often find myself in the situation
of adding more if/cond statements to a function and pushing the original
body further in. I think this usually leads to less clear code.
Like with
(defun foo ()
... lots of code)
the options are usually
(defun foo ()
(if zot
t
... lots of code))
or (the horror!)
(defun foo ()
(block nil
(when zot
(return t))
... lots of code))
or
(defun foo ()
(if zot
t
(foo-1)))
(defun foo-1 ()
... lots of code)
and so on. I think the ideal way to deal with this is to be more C-ish,
and say
(defun foo ()
(when zot
(return t))
... lots of code)
That is, I think it would probably be pretty nice if every defun
establishes a nil block. So this wouldn't be a Common Lisp-ism, but
better! :-)
(If we want to avoid confusion with the CL return, then we could call it
something else, like freturn.)
This isn't the only use case, of course. A lot of functions in Emacs go
through pretty awkward contortions to end loops when certain conditions
occur. A simple return from the middle of a complex series of loops can
often make the code a lot more readable. (And probably faster.)
Thoughts?
--
(domestic pets only, the antidote for overdose, milk.)
address@hidden * Lars Magne Ingebrigtsen
- return,
Lars Magne Ingebrigtsen <=
- Re: return, Stefan Monnier, 2010/11/26