Si nunca programaste antes, puede que no sepas que hay muchos lenguages de dónde elegir. Puede que hayas escuchado de otros lenguajes (o escucharás de ellos!) como C, JavaScript, Python y Java.
Entonces ¿por qué estamos enseñando Clojure? Aunque no es tan popular como algunos de esos lenguajes, estamos usando Clojure por tres cualidades que tiene que lo hacen ideal como primer lenguaje para aprender (o un gran lenguaje para aprender!) además de otros que tal vez ya conozcas:
Clojure es simple. Esto no quiere decir que no sea poderoso; lo es. El número de conceptos que tienes que saber para programar en Clojure es muy pequeño y fácil de entender. Clojure crece con vos mientras lo estas aprendiendo, y puedes ser muy productivo con un pequeño subconjunto del lenguaje.
Clojure es de propósito general. Algunos lenguajes tienen un foco específico. JavaScript, por ejemplo, fue tradicionalmente usado solo en páginas web (aunque eso ha cambiado de alguna manera). Objective-C es usado principalmente para aplicaciones iPhone. Hoy vamos a hacer una aplicación para dibujar, pero puedes usar Clojure para cualquier tipo de aplicación facilmente.
Clojure es divertido. Esto es una cuestión de opinión, por supuesto, pero pensamos que es verdad. Esperamos que durante este curso experimenten la alegría de construir un programa hecho en Clojure y hacer algo poderoso y sorprendente.
Entonces, dijimos que Clojure es de propósito general, y lo es. Eso no significa que no tenga puntos fuertes.
Clojure es reconocido por ser bueno para el procesamiento de datos. Esto es porque tiene un buen set de estructuras de datos. Es decir, que tiene muchas maneras incorporadas de representar datos que lo hacen fácil y poderoso.
Clojure es reconocido por su concurrencia. Pensá acerca de escribir instrucciones para cuatro de tus amigos sobre cómo construir una casa del árbol, pero en vez de escribirlas de manera que un sólo paso es realizado a la vez, cada uno de tus amigos hace parte del trabajo. Entonces, ellos coordinan el momento exacto para ensamblar esas partes en partes más grandes, y hacen esto una y otra vez hasta el final, cuando todas las partes se juntan. Estas instrucciones pueden ser realmente complicadas y difíciles de escribir (y probablemente difíciles de leer también). Clojure nos da algunas maneras fáciles de escribir este tipo de instrucciones para computadoras.
Clojure también sirve para construir aplicaciones de dibujo con Quil, con el cual vamos a hacer algo juntos.
(print-str "Hello, World!")
(+ 3 4)
(forward :trinity 40)
Viste los paréntesis?. Los paréntesis encierran instrucciones para la computadora en Clojure. Un paréntesis izquierdo es el comienzo de una instrucción, y su respectivo paréntesis derecho es el final de una instrucción. Normalmente, el código Clojure tiene un montón de paréntesis anidados, en otras palabras, los paréntesis anidados encierran instrucciones.
Después de los paréntesis, veremos las instrucciones para la computadora. Esa instrucción es lo que normalmente llamamos una función. Las funciones hacen todo el trabajo duro en Clojure.
print-str
,+
yforward
son funciones. Cuando estas funciones se ejecutan, ellas retornan algún tipo de valor. En Clojure las funciones siempre retornan un valor.
La mayoria de las funciones usan argumentos (es todo aquello dentro de los parentesis después de la función).
print-str
utiliza “Hello, World!” y retorna una cadena de caracteres.+
utiliza 3 y 4, los suma, y devuelve 7.forward
utiliza :trinity y 40, mueve la tortuga en 40 y retorna el resultado.
Cuando escribimos código, trataremos de que sea lo más claro posible. Esto es un gran avance porque nuestro código puede ser leido por otros (a veces más que por nosotros mismos!), o podemos volver a leer nuestro propio código más tarde, y puede ser que hayamos olvidado cada detalle del código. Una manera de clarificar nuestro código es haciendo anotaciones con comentarios. Los comentarios son notas que agregamos al código, para nuestro propio bien, y que la computadora ignora.
En Clojure, los comentarios pueden ser comenzados con un punto y coma. Todo lo que va después de un punto y coma hasta el final de la línea es un comentario que es ignorado por la computadora. Solo un punto y coma es necesario, pero a veces puedes ver dos punto y coma en una fila, dependiendo del estilo usado.
Referencia: Comment
;; ejemplo de funciones de un slide anterior
(print-str "Hola, Mundo!") ; el bien-conocido "hola mundo"
(+ 3 4) ; ¿por qué no 3 + 4? lo veremos después
“REPL” significa “Leer-Evaluar-Imprimir-Loop” (del inglés “Read-Eval-Print-Loop”) lo cual no tieme mucho sentido sin el contexto. Muchos lenguajes de programación, incluyendo Clojure, tienen una manera de escribir código interactivamente, con el cual puedes tener una respuesta instantanea. En otras palabras, el código es leído, luego es evaluado, el resultado es impreso en pantalla, y comienza nuevamente: un loop.
Read, Eval, Print, Loop
Para interactuar con Clojure, podemos usar el InstaREPL de Nightcode. esta es una buena manera de jugar con Clojure interactivamente.
Nightcode tiene un seteo de proyecto conectado con el REPL en el panel de abajo. Cuando el botón “Run with REPL” es clickeado, el REPL empieza.
Alternativamente, podemos iniciar un REPL usando leiningen en una terminal (sin Nightcode). En una terminal, escribe
lein repl
, entonces el REPL iniciará. Si ejecutamoslein repl
en el directorio del proyecto (carpeta), verás la configuración.
Nightcode nos deja evaluar un archivo entero (programa) o una línea(s). En Nightcode, después que el REPL ha iniciado “Reload File” y “Reload Selection” funcionan.
myproject
core.clj
myproject
-> src
-> myproject
-> core.clj
(print-str "Hola, Mundo!")
(print-str "Hola, Mundo!" " " "desde Clojure")
(+ 3 4)
(- 3 4)
(* 3 4)
Asegurate de tipear las líneas exactamente como las ves, teniendo cuidado de poner los paréntesis en el lugar correcto.
welcometoclojurebridge/src/clojurebridge_turtle/walk.clj
(forward 40)
al fondo del archivo walk.clj
en el editor. Evaluá esta línea eligiendo la línea y presionando “Reload Selection”(Continúa en el EJERCICIO 3)
(Suponiendo que el EJECICIO 2 está terminado)
(right 90)
y “enter” en el REPL (al fondo) (doc function-name)
para esto(doc +)
y (doc forward)
en el REPL-
, *
, o doc
Volvé al primer slide, o andá al outline del curriculum.