2012-09-09

続々sequentially-apply

ネタはさておき、実際のコードで使ってみた例とかも載せておく。

;; before
(defun sha1 (obj)
  (let* ((string (encode-json-to-string obj))
         (octets (string-to-octets string))
         (digest (digest-sequence :sha1 octets)))
    (byte-array-to-hex-string digest)))

;; after
(defun sha1 (obj)
  (sequentially-apply (encode-json-to-string obj)
    (string-to-octets _)
    (digest-sequence :sha1 _)
    (byte-array-to-hex-string _)))

誤差だと思えてならないが、相対的にすっきりはしている。気になるのは、コードを読むときに視点が右上から左下に動くこと。微妙に読み辛い?

(defun sha1 (obj)
  (pipe (encode-json-to-string obj)
        (string-to-octets _)
        (digest-sequence :sha1 _)
        (byte-array-to-hex-string _)))

みたいに揃ってる方が、視点が上から下って感じで見易い気もする。

0 件のコメント: