Есть ли более простой способ написать этот код? - PullRequest
7 голосов
/ 20 декабря 2010

Я изучал Clojure, и с тех пор, как я пришел из Ruby, и до того, как я начал работать с Java, у меня возникают проблемы с процедурным мышлением.это нормально?

(defn foo
  ([s t]
     (let [x (+ 4 (- t s))]
       (if (> 2 (if (> 6 x)
                  x
                  6)
              x)
         x
         2))))

1 Ответ

15 голосов
/ 20 декабря 2010

В clojure, как и на любом другом языке, обычно лучше использовать встроенные функции, когда это применимо. Так как clojure имеет функции min и max, вы можете заменить свои if на:

(max 2 (min 6 x))

Если бы этих функций не было в стандартной библиотеке clojure, я бы порекомендовал определить их, потому что помещение логики для min и max в их собственную функцию приводит к гораздо более приятному коду, чем все это в foo функция.

...