def
Antes de poder hacer algo con un lenguaje de programación, necesitamos tener datos para manipular. En Clojure, los datos se representan con valores, y los tipos más simples de valores son los números, las cadenas de caracteres, los booleanos, nil y las palabras claves.
¿Qué es una cadena de caracteres? Es un fragmento de texto. Para crear una cadena es necesario delimitar los caracteres con comillas dobles.
El último ejemplo muestra como incluir comillas en una cadena: es necesario escribir una barra invertida antes de las comillas. Asegurate siempre de usar comillas dobles para crear una cadena.
Referencia: String
"Hola, Mundo!"
"Las cadenas pueden contener muchos, muchos caracteres"
"Alicia dijo, \"Podemos ir a tomar el té.\""
Un booleano indica que algo es verdadero o es falso y en Clojure los escribimos como
true
ofalse
, respectivamente. Cuando programamos, es común hacer preguntas del tipo “¿Hoy es el cumpleaños de tal persona?” o “¿Esta materia se dicta en el primer cuatrimestre?” para saber si algo es cierto. La respuesta a estas preguntas, es un valor booleano.
nil
es un valor especial que se utiliza para representar la ausencia de un valor. Una particularidad denil
es que se comporta comofalse
cuando lo usamos donde normalmente usaríamos un booleano mientras que el resto de los tipos de datos se comportan comotrue
.
Referencia: Truthiness
true
false
nil
Las palabras clave son el tipo de dato que puede resultar más extraño porque, a diferencia de los números, las cadenas de caracteres y los booleanos, no tienen un análogo en el mundo real. A veces ayuda pensar que son un tipo especial de cadena de caracteres que se usa para etiquetar cosas. Es común ver (y usar) palabras clave para las claves de un mapa (un mapa es una estructura de datos que vamos a estudiar en breve).
:trinity
:first
:last
Clojure tiene varios tipos de números.
Empecemos con los enteros que incluyen al cero y tanto números positivos como negativos. Se escriben como los escribimos en cualquier otro lado.
0
12
-42
Seguimos con los decimales, a los que también se los llama “de punto flotante”. Los podemos identificar porque contienen un punto decimal.
0.0000072725
10.5
-99.9
Por último, tenemos las fracciones. Una computadora no puede representar perfectamente a todos los números decimales y es posible que utilice una misma representación para más de un número. Esto no ocurre con las fracciones que son siempre exactas. Las podemos reconocer por la barra inclinada “/”:
Es importante tener en cuenta que, al igual que en la clase de matemática, el denominador de una fracción no puede ser igual a
0
.
1/2
-7/3
En Clojure, es posible sumar, restar, multiplicar y dividir números. Sin embargo, estas operaciones aritméticas no se escriben en la forma que las escribimos en papel. Veamos algunos ejemplos:
(+ 1 1) ;=> 1 + 1 = 2
(- 12 4) ;=> 12 - 4 = 8
(* 13 2) ;=> 13 * 2 = 26
(/ 27 9) ;=> 27 / 9 = 3
En notación prefija, los operadores
+
,-
,*
y/
aparecen antes que los números. Esta notación se ve distinta a la notación a la que estamos acostumbrados, conocida como notación infija, en donde los operadores aritméticos aparecen entre los operandos.
Lenguajes como JavaScript utilizan notación infija, mientras que Clojure utiliza notación prefija exclusivamente. La notación prefija es útil por varias razones, pero antes de enumerarlas, veamos un ejemplo de una expresión infija y su equivalente en notación prefija:
Infija: 1 + 2 * 3 / 4 + 5 - 6 * 7 / 8 + 9
Prefija: (+ (- (+ (+ 1 (/ (* 2 3) 4)) 5) (/ (* 6 7) 8)) 9)
Hacé de cuenta que te olvidaste el orden en el que tienen que realizarse las operaciones aritméticas. En la expresión infija, vamos a obtener resultados diferentes dependiendo qué operación realicemos primero: la suma o la división. Esto no es un problema con la notación prefija porque la “precedencia” es explícita. En otras palabras, hay un único orden de evaluación posible debido a que cada expresión está delimitada por paréntesis y el operador está siempre delante de los operandos.
Infija: 1 + 2 / 3
Prefija: (+ 1 (/ 2 3))
Otra ventaja de la notación prefija es que no hace falta repetir el operador cuando lo aplicamos sobre varios operandos.
Infix: 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9
Prefix: (+ 1 2 3 4 5 6 7 8 9)
Hasta ahora estuvimos realizando operaciones aritméticas con enteros únicamente. Sin embargo, nada nos impide utilizar decimales o fracciones:
(+ 4/3 7/8) ;=> 53/24
(- 9 4.2 1/2) ;=> 4.3
(/ 27/2 1.5) ;=> 9.0
def
Es muy difícil escribir un programa si tenemos que escribir los mismos valores una y otra vez. A través de una asignación podemos darle un nombre a un valor que es mucho más fácil de escribir ¡y recordar! que el valor en sí.
def
Podemos asignar un nombre a un valor usando
def
. El nombre que se le asigna al valor se llama símbolo.
Referencia: Assignment def
(def mangos 3)
(def naranjas 5)
(+ mangos naranjas)
;=> 8
Como se puede ver en el ejemplo de abajo, las asignaciones no están limitadas a valores simples. Es posible asignar un nombre al resultado de cualquier operación. Además, la última línea del ejemplo muestra cómo utilizar un símbolo para referirse al valor que le fue asignado.
(def frutas (+ mangos naranjas))
(def promedio-frutas (/ frutas 2))
promedio-frutas
;=> 4
(quot x y)
te da el cociente de dividir x por y.(rem x y)
te da el resto de dividir x por y.Volvé al primer slide, o andá al outline del curriculum.