Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Yeah I considered this:

  (cond
    [no.user
     (submit-login-warning url title showtext text)]
    [(~and (or blank.url valid-url.url)
          ~blank.title)
     (submit-page user url title showtext text retry*)]
    [(len> title title-limit*)
     (submit-page user url title showtext text toolong*)]
    [(and blank.url blank.text)
     (let dummy 34
       (submit-page user url title showtext text bothblank*))]
    [(let site sitename.url
      (or big-spamsites*.site recent-spam.site))
     (msgpage user spammage*)]
    [(oversubmitting user ip 'story url)
     (msgpage user toofast*)]
    [t
     (let s (create-story url process-title.title text user ip)
       (story-ban-test user s ip url)
       (when ignored.user (kill s 'ignored))
       (submit-item user s)
       (maybe-ban-ip s)
       "newest")])
Doesn't seem like an improvement. The big aha moment for me was to notice that in imperative languages (C, Java, python, ruby) you got the distinguishing separator between the check and the action:

  if (test expr goes here) { action goes here; }
  else if (next text expr) { ...; }
The intervening keywords also help, but the parens vs curlies are a huge visual signal.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: