Artwork

Content provided by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. All podcast content including episodes, graphics, and podcast descriptions are uploaded and provided directly by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones or their podcast platform partner. If you believe someone is using your copyrighted work without your permission, you can follow the process outlined here https://ppacc.player.fm/legal.
Player FM - Podcast App
Go offline with the Player FM app!

Ep 051: Maps! Maps! Maps!

28:01
 
Share
 

Manage episode 244666054 series 2463849
Content provided by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. All podcast content including episodes, graphics, and podcast descriptions are uploaded and provided directly by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones or their podcast platform partner. If you believe someone is using your copyrighted work without your permission, you can follow the process outlined here https://ppacc.player.fm/legal.

Each week, we discuss a different topic about Clojure and functional programming.

If you have a question you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

This week, our topic is: "Maps! Maps! Maps!" We discuss maps and their useful features, including a key distinction that we couldn't live without.

Selected quotes:

  • "Working with Clojure makes you feel like you're living in the future!"
  • "Maps are bags of dimensions."
  • "The namespace of the key is the entity, the name is the attribute, and the value is the value."
  • "Flatter maps make it so you end up writing less code."

Related episodes:

Links:

Code sample:

;; Player records: one nested, one with rich keys.  (def players-nested  [{:player {:id 123  :name "Russell"  :position :point-guard}  :team {:id 432  :name "Durham Denizens"  :division :eastern}}  {:player {:id 124  :name "Frank"  :position :midfield}  :team {:id 432  :name "Durham Denizens"  :division :eastern}}])  (def players-rich  [{:player/id 123  :player/name "Russell"  :player/position :point-guard  :team/id 432  :team/name "Durham Denizens"  :team/division :eastern}  {:player/id 124  :player/name "Frank"  :player/position :midfield  :team/id 432  :team/name "Durham Denizens"  :team/division :eastern}])   ;; Extract player and team id, along with team name  ; Nested (defn extract  [player]  (let [{:keys [player team]} player]  {:player (select-keys player [:id])  :team (select-keys team [:id :name])}))  #_(map extract players-nested) ; ({:player {:id 123}, :team {:id 432, :name "Durham Denizens"}} ; {:player {:id 124}, :team {:id 432, :name "Durham Denizens"}})  ; Rich #_(map #(select-keys % [:player/id :team/id :team/name]) players-rich) ; ({:player/id 123, :team/id 432, :team/name "Durham Denizens"} ; {:player/id 124, :team/id 432, :team/name "Durham Denizens"})   ;; Sort by team name and then player name  ; Nested #_(sort-by (juxt #(-> % :team :name) #(-> % :player :name)) players-nested) ; ({:player {:id 124, :name "Frank", :position :midfield}, ; :team {:id 432, :name "Durham Denizens", :division :eastern}} ; {:player {:id 123, :name "Russell", :position :point-guard}, ; :team {:id 432, :name "Durham Denizens", :division :eastern}})  ; Rich #_(sort-by (juxt :team/name :player/name) players-rich) ; ({:player/id 124, ; :player/name "Frank", ; :player/position :midfield, ; :team/id 432, ; :team/name "Durham Denizens", ; :team/division :eastern} ; {:player/id 123, ; :player/name "Russell", ; :player/position :point-guard, ; :team/id 432, ; :team/name "Durham Denizens", ; :team/division :eastern})
  continue reading

118 episodes

Artwork

Ep 051: Maps! Maps! Maps!

Functional Design in Clojure

94 subscribers

published

iconShare
 
Manage episode 244666054 series 2463849
Content provided by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones. All podcast content including episodes, graphics, and podcast descriptions are uploaded and provided directly by Christoph Neumann and Nate Jones, Christoph Neumann, and Nate Jones or their podcast platform partner. If you believe someone is using your copyrighted work without your permission, you can follow the process outlined here https://ppacc.player.fm/legal.

Each week, we discuss a different topic about Clojure and functional programming.

If you have a question you'd like us to discuss, tweet @clojuredesign, send an email to [email protected], or join the #clojuredesign-podcast channel on the Clojurians Slack.

This week, our topic is: "Maps! Maps! Maps!" We discuss maps and their useful features, including a key distinction that we couldn't live without.

Selected quotes:

  • "Working with Clojure makes you feel like you're living in the future!"
  • "Maps are bags of dimensions."
  • "The namespace of the key is the entity, the name is the attribute, and the value is the value."
  • "Flatter maps make it so you end up writing less code."

Related episodes:

Links:

Code sample:

;; Player records: one nested, one with rich keys.  (def players-nested  [{:player {:id 123  :name "Russell"  :position :point-guard}  :team {:id 432  :name "Durham Denizens"  :division :eastern}}  {:player {:id 124  :name "Frank"  :position :midfield}  :team {:id 432  :name "Durham Denizens"  :division :eastern}}])  (def players-rich  [{:player/id 123  :player/name "Russell"  :player/position :point-guard  :team/id 432  :team/name "Durham Denizens"  :team/division :eastern}  {:player/id 124  :player/name "Frank"  :player/position :midfield  :team/id 432  :team/name "Durham Denizens"  :team/division :eastern}])   ;; Extract player and team id, along with team name  ; Nested (defn extract  [player]  (let [{:keys [player team]} player]  {:player (select-keys player [:id])  :team (select-keys team [:id :name])}))  #_(map extract players-nested) ; ({:player {:id 123}, :team {:id 432, :name "Durham Denizens"}} ; {:player {:id 124}, :team {:id 432, :name "Durham Denizens"}})  ; Rich #_(map #(select-keys % [:player/id :team/id :team/name]) players-rich) ; ({:player/id 123, :team/id 432, :team/name "Durham Denizens"} ; {:player/id 124, :team/id 432, :team/name "Durham Denizens"})   ;; Sort by team name and then player name  ; Nested #_(sort-by (juxt #(-> % :team :name) #(-> % :player :name)) players-nested) ; ({:player {:id 124, :name "Frank", :position :midfield}, ; :team {:id 432, :name "Durham Denizens", :division :eastern}} ; {:player {:id 123, :name "Russell", :position :point-guard}, ; :team {:id 432, :name "Durham Denizens", :division :eastern}})  ; Rich #_(sort-by (juxt :team/name :player/name) players-rich) ; ({:player/id 124, ; :player/name "Frank", ; :player/position :midfield, ; :team/id 432, ; :team/name "Durham Denizens", ; :team/division :eastern} ; {:player/id 123, ; :player/name "Russell", ; :player/position :point-guard, ; :team/id 432, ; :team/name "Durham Denizens", ; :team/division :eastern})
  continue reading

118 episodes

All episodes

×
 
Loading …

Welcome to Player FM!

Player FM is scanning the web for high-quality podcasts for you to enjoy right now. It's the best podcast app and works on Android, iPhone, and the web. Signup to sync subscriptions across devices.

 

Quick Reference Guide

Copyright 2025 | Privacy Policy | Terms of Service | | Copyright
Listen to this show while you explore
Play