a small suggestion: you don't need to nest let inside let, a clause can use previous clauses:
(defn get-latest-build [pipeline] (let [response (fetch-pipeline pipeline) json (parse-string (:body response) true) [pipeline] (:pipelines json)] (:counter pipeline)))) also consider using get-in: (defn get-latest-build [pipeline] (let [response (fetch-pipeline pipeline) json (parse-string (:body response) true)] (get-in json [:pipelines 0 :counter]))) finally, this can now be simplified into a single threading macro: (defn get-latest-build [pipeline] (-> (fetch-pipeline pipeline) (:body) (parse-string true) (get-in [:pipelines 0 :counter]))) On Mon, Dec 14, 2020 at 7:18 AM James Lorenzen <jamesloren...@gmail.com> wrote: > > Hello all, > This is my first Clojure program and I was hoping to get some advice on it > since I don't know any experienced Clojure devs. I'm using it locally to > print the latest build numbers for a list of projects. > > ``` > (ns jlorenzen.core > (:gen-class) > (:require [clj-http.client :as client]) > (:require [cheshire.core :refer :all])) > > (defn fetch-pipeline > [pipeline] > (client/get (str "https://example.com/go/api/pipelines/" pipeline "/history") > {:basic-auth "username:password"})) > > (defn get-latest-build > [pipeline] > (let [response (fetch-pipeline pipeline) > json (parse-string (:body response) true)] > (let [[pipeline] (:pipelines json)] > (:counter pipeline)))) > > (def core-projects #{"projectA" > "projectB" > "projectC" > "projectD"}) > > (defn print-builds > ([] > (print-builds core-projects)) > ([projects] > (let [builds (pmap #(str % " " (get-latest-build %)) projects)] > (map #(println %) (sort builds))))) > ``` > > This will output the following: > ``` > projectA 156 > projectB 205 > projectC 29 > projectD 123 > (nil nil nil nil) > ``` > > A few questions: > > How can this program be improved? > How idiomatic is it? > How can I prevent it from returning the nils at the end? I know this is > returning nil for each map'd item; I just don't know the best way to prevent > that. > > Thanks, > James Lorenzen > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to clojure@googlegroups.com > Note that posts from new members are moderated - please be patient with your > first post. > To unsubscribe from this group, send email to > clojure+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > --- > You received this message because you are subscribed to the Google Groups > "Clojure" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to clojure+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojure/ccb868e0-7e0c-46df-80fc-712f718314e3n%40googlegroups.com. -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CAGokn9L65oxePmfJqEDNvyhS9XL-JFjDbQAfk5zdiRctXS_-bQ%40mail.gmail.com.