unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Lars Magne Ingebrigtsen <larsi@gnus.org>
To: Steve Yegge <steve.yegge@gmail.com>
Cc: emacs-devel@gnu.org
Subject: Re: proposal to make null string handling more emacs-y
Date: Wed, 25 Apr 2012 16:51:04 +0200	[thread overview]
Message-ID: <m362cnzwyv.fsf@stories.gnus.org> (raw)
In-Reply-To: <CAGtm15=Wb1Uv_WvYKQ7hMBkb=2Y1qUJjGnFFkBj6fcPotgXV8g@mail.gmail.com> (Steve Yegge's message of "Tue, 24 Apr 2012 17:24:57 -0700")

Steve Yegge <steve.yegge@gmail.com> writes:

> I think we should change all the core string-manipulation functions to
> deal gracefully with nil arguments.

I think it's an intriguing idea.

Let's look at some not-quite-real bits of code.  We get a string from a
map, and then, if it exists, we want to insert it twice, capitalised.

Because `capitalize' bugs out on a nil parameter, this is how we do it
today:

(let ((foo (plist-get map 'foo)))
  (when foo
    (setq foo (capitalize foo))
    (insert foo)
    ...
    (insert foo)))

The "problem" here being the dreaded `setq'.  For reading comprehension,
its nice to not mutate variables.  If we instead allowed `capitalize' to
take a nil parameter, we'd have the more readable

(let ((foo (capitalize (plist-get map 'foo))))
  (when foo
    (insert foo)
    ...
    (insert foo)))

And we can get away with a much more functional style if we allowed
`insert' to take nil as a parameter (meaning "insert nothing"):

(insert (capitalize (plist-get map 'foo)))

instead of 

(let ((foo (plist-get map 'foo)))
  (when foo
    (insert (capitalize foo))))

I also often see code like (well, the equivalent of)

(let ((foo (capitalize (or (plist-get map 'foo) ""))))
  ...)

to avoid all the checking and `setq'-ing, but this makes the code less
clear, and you end up with nonsensical tests like `(zerop (length foo))'
later in the code if you really need to check whether you had a `foo'
there anyway.

I don't really see much of a downside to allowing (many) stringey
functions to take nil as a parameter.  And there's an upside.  So why
not?
    
-- 
(domestic pets only, the antidote for overdose, milk.)
  bloggy blog http://lars.ingebrigtsen.no/



  parent reply	other threads:[~2012-04-25 14:51 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-25  0:24 proposal to make null string handling more emacs-y Steve Yegge
2012-04-25  4:45 ` Karl Fogel
2012-04-25  6:28 ` Miles Bader
2012-04-25  6:34   ` Miles Bader
2012-04-25 13:21   ` Ted Zlatanov
2012-05-01 22:01     ` Randal L. Schwartz
2012-04-25  7:53 ` Helmut Eller
2012-04-25  8:22 ` Eli Zaretskii
2012-04-25 14:28   ` Stefan Monnier
2012-04-25 14:35     ` Eli Zaretskii
2012-04-25 15:30       ` Stefan Monnier
2012-04-25 16:41         ` Miles Bader
2012-04-25 16:45         ` Andreas Schwab
2012-04-25 16:46         ` Juanma Barranquero
2012-04-26 21:20         ` Steve Yegge
2012-04-26 22:11           ` Miles Bader
2012-04-26 23:52             ` Steve Yegge
2012-04-27  0:29               ` Miles Bader
2012-04-27  3:20                 ` Jeremiah Dodds
2012-04-27  3:41                   ` Miles Bader
2012-04-27  3:59                     ` Jeremiah Dodds
2012-04-27  4:24                       ` Miles Bader
2012-04-27  8:49                         ` Thien-Thi Nguyen
2012-04-27 14:23                         ` Nix
2012-04-28  2:07                         ` Better startup error handling (was: proposal to make null string handling more emacs-y) Stefan Monnier
2012-04-28 12:04                           ` Better startup error handling Nix
2012-04-28 15:16                             ` Stefan Monnier
2012-04-28 15:42                               ` David Engster
2012-04-28 15:55                               ` Drew Adams
2012-04-28 19:39                                 ` Stefan Monnier
2012-04-28 17:26                           ` Lars Magne Ingebrigtsen
2012-04-30  8:43                           ` Christian Lynbech
2012-04-30  9:18                             ` chad
2012-04-27 16:35                   ` proposal to make null string handling more emacs-y Richard Stallman
2012-04-27  1:10           ` Stefan Monnier
2012-04-27  1:16             ` Lars Magne Ingebrigtsen
2012-04-27 16:35               ` Richard Stallman
2012-04-28 11:13                 ` Eli Barzilay
2012-04-28 17:02                   ` Richard Stallman
2012-04-28 19:48                     ` Stefan Monnier
2012-04-28 21:56                     ` Eli Barzilay
2012-06-03  3:45                       ` Richard Stallman
2012-04-27  4:17             ` Steve Yegge
2012-04-27  6:36               ` Eli Zaretskii
2012-04-27 19:05                 ` Steve Yegge
2012-04-27 21:24                   ` Drew Adams
2012-04-28  4:43                     ` Steve Yegge
2012-04-28  6:58                       ` Andreas Schwab
2012-04-29 21:26                   ` Odd formatting (was: proposal to make null string handling more emacs-y) Lars Magne Ingebrigtsen
2012-04-30  7:48                     ` Odd formatting Steinar Bang
2012-04-30 10:14                       ` Antoine Levitt
2012-04-30 13:27                         ` Nix
2012-04-28  2:02               ` proposal to make null string handling more emacs-y Stefan Monnier
2012-04-25 14:51 ` Lars Magne Ingebrigtsen [this message]
2012-04-29 17:00 ` Andreas Röhler
2012-04-29 17:08   ` Drew Adams
2012-04-29 17:29     ` Andreas Röhler
2012-04-29 18:01       ` Drew Adams
2012-04-29 19:51       ` PJ Weisberg

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=m362cnzwyv.fsf@stories.gnus.org \
    --to=larsi@gnus.org \
    --cc=emacs-devel@gnu.org \
    --cc=steve.yegge@gmail.com \
    /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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).