From: Drew Adams <drew.adams@oracle.com>
To: Dmitry Gutov <dgutov@yandex.ru>,
Alexander Shukaev <haroogan@gmail.com>,
help-gnu-emacs <help-gnu-emacs@gnu.org>
Subject: RE: To `boundp' or not to `boundp'?
Date: Tue, 1 Sep 2015 09:42:31 -0700 (PDT) [thread overview]
Message-ID: <933687a5-d288-499a-a34a-93260456d907@default> (raw)
In-Reply-To: <55E5C99B.3020608@yandex.ru>
> > I often see code like this
> > (when (and (boundp 'xxx-mode) xxx-mode) ...)
>
> The "proper" way to do that is to use bound-and-true-p.
That certainly is *not* proper for the more general case
(and (boundp 'xxx) xxx), where the value of `xxx' is
not necessarily Boolean or is not used only as a Boolean.
Well, it works the same, but the _name misleads_ terribly
in this case, even if the doc does let you know that the
variable value (not t or nil) is returned, when bound.
`bound-and-true-p' is defined as the exact _same thing_:
(defmacro bound-and-true-p (var)
"Return the value of symbol VAR if it is bound, else nil."
`(and (boundp (quote ,var)) ,var))
So it cannot be more "proper".
And in fact its definition (expansion) is much, much
clearer in the case where the var value is not Boolean.
Unlike (bound-and-true-p VAR), (and (boundp 'VAR) VAR)
is always clear and never misleads. It makes clear
that you are testing the symbol for variableness and
returning the variable value if bound.
In sum, your "proper" is my "improper, misleading, and
useless." Why Emacs bothered to introduce this silly
macro, I cannot imagine. Perhaps it was to save some
characters when the variable name is long. Bof.
If they really wanted a macro for this, it should have
been called something that reflects what it does, e.g.,
`var-value-or-nil' or `if-bound-then-value-else-nil'.
> > I personally prefer to do it shorter
> > (when (ignore-errors xxx-mode) ...)
> > Are those equivalent?
Yes, pretty much.
> Are there any pitfalls associated with my approach?
Not really. But it is not as readable, IMHO. `boundp'
shouts to a reader that this is test for a variable.
next prev parent reply other threads:[~2015-09-01 16:42 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-01 15:50 To `boundp' or not to `boundp'? Alexander Shukaev
2015-09-01 15:51 ` Dmitry Gutov
2015-09-01 15:53 ` Alexander Shukaev
2015-09-01 16:42 ` Drew Adams [this message]
2015-09-01 17:13 ` Michael Heerdegen
2015-09-01 18:00 ` Drew Adams
[not found] ` <mailman.331.1441125765.19560.help-gnu-emacs@gnu.org>
2015-09-01 20:20 ` Barry Margolin
2015-09-01 23:37 ` member returns list (was: Re: To `boundp' or not to `boundp'?) Emanuel Berg
2015-09-02 0:10 ` Drew Adams
2015-09-02 0:27 ` Emanuel Berg
2015-09-02 0:38 ` Drew Adams
2015-09-02 1:17 ` Emanuel Berg
2015-09-02 6:21 ` Drew Adams
2015-09-02 21:20 ` Emanuel Berg
[not found] ` <mailman.370.1441156160.19560.help-gnu-emacs@gnu.org>
2015-09-03 5:17 ` member returns list Pascal J. Bourguignon
2015-09-04 0:26 ` Emanuel Berg
2015-09-02 16:45 ` Michael Heerdegen
2015-09-02 21:47 ` Emanuel Berg
2015-09-02 22:09 ` Michael Heerdegen
2015-09-02 22:11 ` Drew Adams
2015-09-02 22:13 ` Marcin Borkowski
2015-09-04 1:03 ` Emanuel Berg
2015-09-04 6:50 ` Marcin Borkowski
2015-09-05 17:35 ` Emanuel Berg
2015-09-05 17:55 ` Random832
2015-09-05 18:09 ` Emanuel Berg
2015-09-05 21:04 ` Random832
2015-09-06 2:57 ` Emanuel Berg
[not found] ` <mailman.552.1441475739.19560.help-gnu-emacs@gnu.org>
2015-09-05 23:39 ` Pascal J. Bourguignon
2015-09-06 2:46 ` Emanuel Berg
2015-09-09 1:48 ` Robert Thorpe
2015-09-09 2:44 ` Pascal J. Bourguignon
2015-09-09 3:19 ` John Mastro
2015-09-10 0:25 ` Emanuel Berg
[not found] ` <mailman.557.1441507097.19560.help-gnu-emacs@gnu.org>
2015-09-06 21:20 ` Pascal J. Bourguignon
2015-09-06 23:33 ` Emanuel Berg
[not found] ` <mailman.598.1441581917.19560.help-gnu-emacs@gnu.org>
2015-09-06 23:47 ` Pascal J. Bourguignon
2015-09-07 1:29 ` Pascal J. Bourguignon
2015-09-07 2:25 ` Emanuel Berg
2015-09-09 1:44 ` Robert Thorpe
2015-09-10 0:23 ` Emanuel Berg
[not found] ` <mailman.793.1441844665.19560.help-gnu-emacs@gnu.org>
2015-09-10 2:01 ` Pascal J. Bourguignon
2015-09-10 2:32 ` Emanuel Berg
[not found] ` <ECCA0E56-A051-4D38-8CBB-6CE9208BB047@openmailbox.org>
2015-09-11 1:32 ` Emanuel Berg
2015-09-11 1:46 ` Emanuel Berg
[not found] ` <mailman.797.1441852386.19560.help-gnu-emacs@gnu.org>
2015-09-10 4:21 ` Pascal J. Bourguignon
2015-09-10 18:09 ` Alex Kost
2015-09-11 1:01 ` Random832
2015-09-11 1:28 ` Emanuel Berg
2015-09-11 2:01 ` Emanuel Berg
2015-09-11 2:52 ` Random832
[not found] ` <mailman.890.1441936900.19560.help-gnu-emacs@gnu.org>
2015-09-11 2:27 ` Pascal J. Bourguignon
2015-09-12 0:10 ` Emanuel Berg
2015-09-11 2:37 ` Ian Zimmerman
2015-09-11 1:03 ` Emanuel Berg
2015-09-11 0:57 ` Emanuel Berg
2015-09-11 5:42 ` tomas
2015-09-12 0:18 ` Emanuel Berg
2015-09-13 8:12 ` tomas
[not found] ` <mailman.897.1441950163.19560.help-gnu-emacs@gnu.org>
2015-09-11 23:29 ` Pascal J. Bourguignon
2015-09-12 0:20 ` Emanuel Berg
[not found] ` <mailman.966.1442016910.19560.help-gnu-emacs@gnu.org>
2015-09-12 2:01 ` Pascal J. Bourguignon
2015-09-12 3:26 ` Emanuel Berg
2015-09-13 7:50 ` tomas
2015-09-12 2:03 ` Pascal J. Bourguignon
2015-09-12 2:45 ` Stefan Monnier
2015-09-12 3:12 ` Emanuel Berg
2015-09-12 3:31 ` Emanuel Berg
[not found] ` <mailman.972.1442025961.19560.help-gnu-emacs@gnu.org>
2015-09-12 6:16 ` Pascal J. Bourguignon
2015-09-12 23:38 ` Emanuel Berg
2015-09-13 8:03 ` tomas
2015-09-14 1:31 ` Emanuel Berg
[not found] ` <mailman.1016.1442100597.19560.help-gnu-emacs@gnu.org>
2015-09-13 0:09 ` Pascal J. Bourguignon
2015-09-13 0:24 ` John Mastro
[not found] ` <mailman.1019.1442103883.19560.help-gnu-emacs@gnu.org>
2015-09-13 4:29 ` Pascal J. Bourguignon
2015-09-16 0:01 ` computer history (was: Re: member returns list) Emanuel Berg
[not found] ` <mailman.978.1442028310.19560.help-gnu-emacs@gnu.org>
2015-09-12 6:18 ` member returns list Pascal J. Bourguignon
2015-09-12 23:56 ` Emanuel Berg
[not found] ` <mailman.1018.1442101697.19560.help-gnu-emacs@gnu.org>
2015-09-13 0:20 ` Pascal J. Bourguignon
2015-09-14 1:24 ` Emanuel Berg
2015-09-12 2:04 ` Pascal J. Bourguignon
2015-09-12 3:15 ` Emanuel Berg
2015-09-12 7:40 ` Eli Zaretskii
[not found] ` <mailman.884.1441933051.19560.help-gnu-emacs@gnu.org>
2015-09-11 2:26 ` Pascal J. Bourguignon
2015-09-12 0:16 ` Emanuel Berg
2015-09-07 2:38 ` Drew Adams
2015-09-07 2:37 ` Drew Adams
[not found] ` <mailman.502.1441349470.19560.help-gnu-emacs@gnu.org>
2015-09-04 17:26 ` Barry Margolin
2015-09-05 17:40 ` Emanuel Berg
2015-09-02 0:40 ` member (was: Re: To `boundp' or not to `boundp'?) Emanuel Berg
[not found] ` <mailman.363.1441150201.19560.help-gnu-emacs@gnu.org>
2015-09-02 16:25 ` member returns list " Barry Margolin
2015-09-02 21:35 ` Emanuel Berg
[not found] ` <mailman.426.1441229773.19560.help-gnu-emacs@gnu.org>
2015-09-02 22:56 ` Barry Margolin
2015-09-02 23:23 ` Emanuel Berg
[not found] ` <mailman.368.1441153951.19560.help-gnu-emacs@gnu.org>
2015-09-03 5:19 ` member Pascal J. Bourguignon
2015-09-04 0:24 ` member Emanuel Berg
[not found] ` <<barmar-B5D67F.16201001092015@88-209-239-213.giganet.hu>
2015-09-01 20:42 ` To `boundp' or not to `boundp'? Drew Adams
2015-09-02 2:12 ` Stefan Monnier
2015-09-02 15:26 ` Alexander Shukaev
2015-09-02 16:51 ` Michael Heerdegen
[not found] ` <mailman.410.1441212753.19560.help-gnu-emacs@gnu.org>
2015-09-02 20:00 ` Barry Margolin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=933687a5-d288-499a-a34a-93260456d907@default \
--to=drew.adams@oracle.com \
--cc=dgutov@yandex.ru \
--cc=haroogan@gmail.com \
--cc=help-gnu-emacs@gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).