Objetivos de la unidad de aprendizaje:
- Definir y explicar el lenguaje de programación Scala
- Referenciar varias formas de instalar Scala
- Utilizar el REPL
- Utilizar el
sbt
para manejar un proyecto - Definir y explicar que son funciones puras
Scala fue creado por Martin Odersky 1
- Lenguaje de programación de múltiples paradigmas
- Imperativo (POO)
- Funcional
- Es un lenguaje escalable 1
- Escribir pequeños guiones (Scripts)
- Construir grandes sistemas
- Estáticamente tipeado
- Corre sobre Java y JavaScript
- Opción estándar
- Opción sugerida
- No olvidar instalar sbt
- Utilizar su versión favorita de IDE o editor (
emacs
)
- REPL (Read Evaluate Print Loop)
- Probar interactivamente el programa
- REPL de Scala es
scala
$ scala
Welcome to Scala 2.13.3 (OpenJDK 64-Bit Server VM, Java 11.0.9).
Type in expressions for evaluation. Or try :help.
scala>
- Evaluar expresiones
- Definir funciones
- Convención nombres:
- Tipos (Mayúsculas)
- Funciones, métodos y procedimientos (Minúsculas)
def <nombre> (<lista_argumentos>):[<tipo>] = { <cuerpo> }
<ctrl-d>
- Terminar:quit
o:q
- Terminar:help
- Ayuda:save
- Guardar:load
- Cargar:paste
- Cargar
Vamos a implementar un problema conocido:
Se leen tres números enteros, cada uno representa la longitud de un cable, que posiblemente son diferentes. Se quiere cortar los cables de forma tal que todos los segmentos sean iguales.
- Vamos a crear un objeto que el punto de entrada
Main
- Vamos a dividir nuestro problema:
- Parte impura que trata con el mundo exterior
readThreeSeg
- Parte pura que resuelve el problema de
gcd
- Parte pura que resuelve convertir string to int
strToInts
- Punto de entrada que utiliza estas funciones
- Parte impura que trata con el mundo exterior
$ mkdir cutthrseg
$ cd cutthrseg
$ touch build.sbt
sbt
utiliza un modelo de proyectos POM- Esta estructura rígida permite manejar cualquier proyecto
- Permite añadir fácilmente nuevos componentes
- Es base para para manejar subproyectos asociados
├── build.sbt
├── project
│ └── build.properties
└── src
├── main
│ └── scala
│ └── co
│ └── s4n
│ └── cutthrseg
│ └── Main.scala
└── test
└── scala
└── co
└── s4n
└── cutthrseg
- Ahora vamos a poblar nuestro proyecto
- Creemos la jerarquía de proyectos
- Utilizando un editor o IDE añadir
Main.scala
$ mkdir --parents src/main/scala/co/s4n/cutthrseg
$ cp ../functions.scala src/main/scala/co/s4n/cutthrseg/Main.scala
$ <editor> src/main/scala/co/s4n/cutthrseg/Main.scala
- Escribir el objeto Main
- Recordar la jerarquía correspondiente
package co.s4n.cutthrseg
- Y utilizar
sbt
para el manejo del proyecto:- compilar
- correr
- pruebas y otros (lo veremos después)