unofficial mirror of help-gnu-emacs@gnu.org
 help / color / mirror / Atom feed
From: Drew Adams <drew.adams@oracle.com>
To: Marcin Borkowski <mbork@wmi.amu.edu.pl>,
	Help Gnu Emacs mailing list <help-gnu-emacs@gnu.org>
Subject: RE: if vs. when vs. and: style question
Date: Mon, 23 Mar 2015 17:22:59 -0700 (PDT)	[thread overview]
Message-ID: <f28ccaaa-20b6-49c3-8fa3-b9852e4493ce@default> (raw)
In-Reply-To: <87sicvwckx.fsf@wmi.amu.edu.pl>

> assuming (e1) and (e2) are some expressions, all three forms:
> (if (e1) (e2))
> (when (e1) (e2))
> (and (e1) (e2))

Plus `cond', `unless', `or', and `not'.

> are semantically equivalent.  Which one is better style (and when)?
> I would guess that =when= is better iff (e2) is a =progn= (since we can
> drop the =progn= altogether, and this seems to be the point of =when=),
> and =and= might be considered better (well, maybe) by some people when
> both (e1) and (e2) are very short (though I personally would avoid that,
> since =if= seems easier for a human to understand at a first glance).
> Am I right?
> 
> Notice: by “better” I mean “more idiomatic”, or “easier/faster to read
> for a human”, or “more likely to be used by an experienced Elisp
> hacker”, etc.

FWIW -

I use a convention that you will find mentioned in "Common Lisp
The Language" (1 & 2):

I use `if', `and', and `or' when the return value is significant
(i.e., it is used; it makes a difference to the behavior).

I use `when' and `unless' _only_ when the return value is not
significant (not used).  IOW, they signify side effects only, when
I read them (in code I wrote).

---

Beyond that -

I use `cond' in both contexts (whether or not the return value is used).

I use `if' _only_ for the if-then-else case (3 args, not 2).  For the
if-then case (only two args) I use `and' or `or' (if the return value
is significant) or `when' or `unless' (if the return value is not used).

For `(if test nil val)' I typically use `(and (not test) val)'.
But sometimes I use (if test nil other-val), if I really want to point
out the nil return possibility (esp. if I want to put a comment on
its line).

Similarly, for `(if test val nil)' I typically use `(and test val)'.

I typically use `(cond (test foo1 foo2...) (t bar1 bar2...))' instead
of `(if test (progn foo1 foo2...) bar1 bar2...)'.

I typically use `(if test val sexp1 sexp2...)' instead of
`(cond (test val) (t sexp1 sexp2...))'.  But sometimes I don't. ;-)

And yes, I typically use a single `setq' for sequential assignments.
And that means that I can use `(if test (setq...) val)' instead of
`(if test (progn (setq...) (setq...)...) val)'.

Because I use a single `setq' for multiple assignments, seeing two
`setq's "next to" each other makes clear that they are at different
levels; they are not siblings.  E.g.

     (setq...))
    (setq...)

In a `setq' with multiple assignments (and in a `let' with multiple
bindings) I typically align the values too, not just the variables:

(setq toto    kelp
      bar     rhinoceros
      whoops  nematode)

---

I also use `()' instead of nil when it represents the empty list.

And I use an explicit initialization to `nil' or `()' in a `let',
if it is a true initialization.  That is, I put a variable in a
`let' without any initial value _only_ if its initial value is
assigned in the `let' body, i.e., without making any use of its
implicit initial nil value.  

And I put any variables that have no initial binding at the end
of the list of bindings (not at the beginning, and not in between).

And yes, these conventions mean that I have to rewrite code from
one form to another as it evolves.  Not a big deal, to me.
Reading code is more important, to me.

I make no claims about others sharing such conventions.



  parent reply	other threads:[~2015-03-24  0:22 UTC|newest]

Thread overview: 121+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-23 22:53 if vs. when vs. and: style question Marcin Borkowski
2015-03-24  0:15 ` Pascal J. Bourguignon
2015-03-24  0:34   ` Drew Adams
2015-03-24  0:22 ` Drew Adams [this message]
     [not found] ` <mailman.2648.1427156603.31049.help-gnu-emacs@gnu.org>
2015-03-24  2:28   ` Emanuel Berg
2015-03-24  6:12     ` Rusi
2015-03-25  0:21       ` Emanuel Berg
2015-03-25  0:20         ` Pascal J. Bourguignon
2015-03-25  2:44           ` Emanuel Berg
2015-03-25  2:51             ` Rusi
2015-03-25  7:12               ` Pascal J. Bourguignon
2015-03-25 14:02                 ` Rusi
2015-03-25 14:40                   ` Stefan Monnier
2015-03-25 14:52                   ` if vs. when vs. and: style question now Unicode Dan Espen
2015-03-25 15:24                     ` Rusi
2015-03-25 15:46                       ` Dan Espen
2015-03-25 16:02                         ` Rusi
2015-03-25 17:16                           ` Dan Espen
2015-03-28 17:55                           ` Emanuel Berg
2015-03-25 17:46                         ` Rusi
2015-03-25 15:22                   ` if vs. when vs. and: style question Pascal J. Bourguignon
2015-03-25 15:37                     ` Rusi
2015-03-29  1:17                       ` Emanuel Berg
2015-03-25 15:45                     ` Rusi
2015-03-29  1:03                     ` Emanuel Berg
2015-03-29  2:41                       ` Rusi
2015-03-29  3:11                         ` Rusi
2015-03-29 14:05                         ` Óscar Fuentes
2015-03-29 16:00                           ` Drew Adams
2015-03-30  1:55                             ` Óscar Fuentes
     [not found]                             ` <mailman.2998.1427680540.31049.help-gnu-emacs@gnu.org>
2015-03-30  2:25                               ` Rusi
2015-03-29 18:27                         ` Pascal J. Bourguignon
2015-03-30  0:09                           ` Stefan Monnier
2015-03-30  1:33                             ` Óscar Fuentes
2015-03-30  1:50                               ` Stefan Monnier
2015-03-30  9:44                               ` tomas
2015-03-30 11:46                                 ` Óscar Fuentes
     [not found]                                 ` <mailman.3016.1427716011.31049.help-gnu-emacs@gnu.org>
2015-03-30 13:03                                   ` Pascal J. Bourguignon
2015-03-30 14:18                                     ` Stefan Monnier
2015-03-30 15:21                                       ` Marcin Borkowski
2015-03-30 15:31                                         ` Óscar Fuentes
     [not found]                                         ` <mailman.3031.1427729518.31049.help-gnu-emacs@gnu.org>
2015-03-30 17:15                                           ` Pascal J. Bourguignon
     [not found]                                       ` <mailman.3030.1427728904.31049.help-gnu-emacs@gnu.org>
2015-03-31  6:26                                         ` Reality and Proofs (was if vs. when vs. and: style question) Rusi
     [not found]                               ` <mailman.3010.1427708687.31049.help-gnu-emacs@gnu.org>
2015-03-30 12:59                                 ` if vs. when vs. and: style question Pascal J. Bourguignon
     [not found]                         ` <mailman.2972.1427637975.31049.help-gnu-emacs@gnu.org>
2015-03-30  1:55                           ` Rusi
     [not found]                   ` <mailman.2749.1427294481.31049.help-gnu-emacs@gnu.org>
2015-03-25 15:33                     ` Rusi
2015-03-25 15:36                       ` Pascal J. Bourguignon
2015-03-25 16:06                         ` Drew Adams
     [not found]                         ` <mailman.2751.1427299594.31049.help-gnu-emacs@gnu.org>
2015-03-25 16:19                           ` Rusi
2015-03-25 16:23                             ` Rusi
2015-03-29  1:24                             ` Emanuel Berg
2015-03-25 17:02                           ` Dan Espen
2015-03-25 18:23                             ` Drew Adams
     [not found]                             ` <mailman.2758.1427307846.31049.help-gnu-emacs@gnu.org>
2015-03-25 18:52                               ` Dan Espen
2015-03-26  9:47                                 ` Gian Uberto Lauri
     [not found]                                 ` <mailman.2799.1427363259.31049.help-gnu-emacs@gnu.org>
2015-03-26 10:24                                   ` Pascal J. Bourguignon
2015-03-26 10:28                                     ` Pascal J. Bourguignon
2015-03-26 10:47                                       ` Unicode in source (Was Re: if vs. when vs. and: style question) Gian Uberto Lauri
     [not found]                                       ` <mailman.2802.1427366873.31049.help-gnu-emacs@gnu.org>
2015-03-26 15:54                                         ` Pascal J. Bourguignon
2015-03-26 17:07                                           ` Gian Uberto Lauri
     [not found]                                           ` <mailman.2824.1427389660.31049.help-gnu-emacs@gnu.org>
2015-03-26 17:16                                             ` Pascal J. Bourguignon
2015-03-26 10:43                                     ` if vs. when vs. and: style question Gian Uberto Lauri
2015-03-26 13:02                                       ` Pascal J. Bourguignon
2015-04-01 22:03                                   ` Emanuel Berg
2015-04-01 22:24                                     ` Emanuel Berg
2015-03-29 23:06                                 ` Emanuel Berg
2015-03-25 19:17                               ` Pascal J. Bourguignon
2015-03-25 20:31                                 ` Drew Adams
2015-03-25 22:21                                   ` Richard Wordingham
2015-03-25 23:21                                     ` Drew Adams
2015-03-25 23:52                                       ` Richard Wordingham
     [not found]                                     ` <mailman.2782.1427325697.31049.help-gnu-emacs@gnu.org>
2015-03-26  3:02                                       ` Rusi
2015-03-26 10:01                                         ` Gian Uberto Lauri
     [not found]                                         ` <mailman.2800.1427364117.31049.help-gnu-emacs@gnu.org>
2015-03-26 13:00                                           ` Rusi
2015-03-26 13:28                                             ` Gian Uberto Lauri
     [not found]                                             ` <mailman.2809.1427376497.31049.help-gnu-emacs@gnu.org>
2015-03-26 15:51                                               ` Pascal J. Bourguignon
2015-03-26 16:21                                                 ` Gian Uberto Lauri
     [not found]                                   ` <mailman.2779.1427322080.31049.help-gnu-emacs@gnu.org>
2015-04-01  2:31                                     ` Emanuel Berg
2015-04-01  3:03                                       ` Rusi
2015-04-01 14:29                                         ` Pascal J. Bourguignon
2015-04-01 14:57                                           ` Rusi
     [not found]                                 ` <mailman.2771.1427315503.31049.help-gnu-emacs@gnu.org>
2015-03-26  4:23                                   ` Rusi
2015-03-25 19:20                               ` Pascal J. Bourguignon
2015-03-26 11:37                                 ` Alan Schmitt
2015-03-30  1:20                                 ` Emanuel Berg
2015-03-30  2:43                                   ` Pascal J. Bourguignon
2015-03-30  3:12                                     ` Rusi
2015-03-25 17:49                           ` Pascal J. Bourguignon
2015-03-25 18:09                             ` Eli Zaretskii
     [not found]                             ` <mailman.2756.1427307016.31049.help-gnu-emacs@gnu.org>
2015-03-25 21:27                               ` Rusi
2015-03-25 21:32                                 ` Rusi
2015-03-31 16:49                                   ` Emanuel Berg
2015-03-31 17:22                                     ` Rusi
2015-04-01 18:08                                     ` Emanuel Berg
2015-04-01 20:01                                       ` Pascal J. Bourguignon
2015-03-27  3:54                           ` Emanuel Berg
2015-03-27  7:59                             ` Gian Uberto Lauri
2015-03-27  8:06                               ` tomas
2015-03-27  8:11                                 ` Gian Uberto Lauri
2015-03-27  9:20                                   ` tomas
2015-03-27  9:31                                     ` Gian Uberto Lauri
     [not found]                               ` <mailman.2860.1427443603.31049.help-gnu-emacs@gnu.org>
2015-03-27 12:41                                 ` Pascal J. Bourguignon
2015-03-27 13:05                                   ` tomas
     [not found]                                   ` <mailman.2875.1427461540.31049.help-gnu-emacs@gnu.org>
2015-03-27 13:35                                     ` Rusi
2015-03-27 12:34                             ` Pascal J. Bourguignon
2015-03-27  0:49                   ` Emanuel Berg
2015-03-27  7:53                     ` Gian Uberto Lauri
     [not found]                     ` <mailman.2856.1427442800.31049.help-gnu-emacs@gnu.org>
2015-03-27  8:56                       ` Joost Kremers
2015-03-27 12:19                       ` Pascal J. Bourguignon
2015-03-27 14:20                     ` Rusi
2015-03-25  2:35         ` Rusi
2015-03-27  0:31           ` Emanuel Berg
2015-03-27 21:27             ` Emanuel Berg
2015-03-27 22:54               ` Pascal J. Bourguignon
2015-03-28  1:16                 ` Rusi
2015-03-28 12:47                   ` Pascal J. Bourguignon
2015-03-24 15:18     ` Pascal J. Bourguignon
2015-03-25  0:44       ` Emanuel Berg
2015-03-24  7:21 ` Thien-Thi Nguyen
     [not found] ` <mailman.2659.1427181547.31049.help-gnu-emacs@gnu.org>
2015-03-25  0:34   ` Emanuel Berg
     [not found] <mailman.2645.1427151196.31049.help-gnu-emacs@gnu.org>
2015-03-23 23:19 ` Emanuel Berg

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=f28ccaaa-20b6-49c3-8fa3-b9852e4493ce@default \
    --to=drew.adams@oracle.com \
    --cc=help-gnu-emacs@gnu.org \
    --cc=mbork@wmi.amu.edu.pl \
    /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).