Translate

miércoles, 17 de febrero de 2021

Primeros pasos con Clojure, parte 23


 Seguimos con Clojure... 

Hay varias formas de buscar un valor en un mapa. La más obvia es la función get:

user=> (get scores "Angela")

1024

Cuando el mapa en cuestión se trata como una tabla de búsqueda constante, es común invocar el mapa en sí, tratándolo como una función:

user=> (def directions {:north 0

                        :east 1

                        :south 2

                        :west 3})

#'user/directions


user=> (directions :north)

0

No debe invocar directamente un mapa a menos que pueda garantizar que el resultado no será nulo:

user=> (def bad-lookup-map nil)

#'user/bad-lookup-map


user=> (bad-lookup-map :foo)

Execution error (NullPointerException) at user/eval154 (REPL:1).

null


Si deseamos realizar una búsqueda pero esperamos retornar a un valor predeterminado cuando no se encuentra la clave, debemos especifique el valor predeterminado como un parámetro adicional:


user=> (get scores "Sam" 0)

0​

user=> (directions :northwest -1)

-1


El uso de un valor predeterminado también es útil para distinguir entre una clave que falta y una clave existente con un valor nulo.