Introduccion a Scala
## Objetivos de Aprendizaje
- Comprender la historia y los objetivos de diseño de Scala
- Configurar el entorno de desarrollo de Scala
- Escribir y ejecutar tu primer programa en Scala
- Comprender los conceptos basicos de la sintaxis de Scala
## ¿Que es Scala?
Scala es un lenguaje de programacion moderno multi-paradigma que combina programacion orientada a objetos y funcional. El nombre "Scala" deriva de "lenguaje escalable".
```scala
object HelloWorld extends App {
println("Hello, World!")
}
```
## Plataforma Scala
### Caracteristicas Clave
- **Sistema de Tipos Unificado** - Todo es un objeto, incluyendo funciones
- **Inmutabilidad** - Fomenta estructuras de datos inmutables
- **Inferencia de Tipos** - El compilador infiere los tipos cuando no se especifican explicitamente
- **Primero lo Funcional** - Las funciones son ciudadanos de primera clase
- **Interoperabilidad con JVM** - Se ejecuta en JVM e interoperate con Java
### Componentes de la Plataforma
| Componente | Descripcion |
|------------|-------------|
| scala | REPL y ejecutor de Scala |
| scalac | Compilador de Scala |
| sbt | Herramienta de construccion de Scala |
| Scala REPL | Shell interactivo de Scala |
## Instalar Scala
### Descarga
Obtener Scala desde
### Usando SDKMAN (Recomendado)
```bash
curl -s "https://get.sdkman.io" | bash
sdk install scala
```
### Verificar la Instalacion
```bash
scala -version
scalac -version
```
## Tu Primer Programa
### Archivo: HelloWorld.scala
```scala
object HelloWorld extends App {
println("Hello, World!")
}
```
### Compilar y Ejecutar
```bash
scalac HelloWorld.scala # Crea HelloWorld.class
scala HelloWorld # Ejecuta el programa
```
### Usando el Comando scala Directamente
```bash
scala -e 'println("Hello, World!")'
```
## Estructura de un Programa Scala
```scala
object ClassName { // Objeto singleton (punto de entrada)
def main(args: Array[String]): Unit = {
// Las sentencias van aqui
}
}
```
### Punto de Entrada Alternativo (Scala 2.9+)
```scala
object ClassName extends App {
println("Hello, World!") // args esta disponible via App trait
}
```
## Comentarios
```scala
// Comentario de una linea
/*
* Comentario de varias lineas
*/
/**
* Comentario de documentacion
*/
```
## El Metodo main
```scala
object Main {
def main(args: Array[String]): Unit = {
args.foreach(println)
}
}
```
## Salida del Sistema
```scala
// Imprimir con nueva linea
println("Hello")
// Imprimir sin nueva linea
print("Hello ")
print("World")
// Interpolacion de cadenas (Scala 2.10+)
val name = "Alice"
val age = 30
println(s"Name: $name, Age: $age")
println(s"Age in 5 years: ${age + 5}")
```
## Argumentos de Linea de Comandos
### Hello.scala
```scala
object Hello extends App {
if (args.length > 0) {
println(s"Hello, ${args(0)}")
} else {
println("Hello, World!")
}
}
```
```bash
scalac Hello.scala
scala Hello Alice
# Salida: Hello, Alice
```
## Usando el REPL de Scala
El REPL de Scala (Read-Eval-Print Loop) es un shell interactivo:
```bash
scala
```
```scala
scala> val x = 10
x: Int = 10
scala> val y = 20
y: Int = 20
scala> x + y
res0: Int = 30
scala> def greet(name: String) = s"Hello, $name"
greet: (name: String)String
scala> greet("World")
res1: String = Hello, World
```
## IDEs
### IDEs Populares
- IntelliJ IDEA con plugin de Scala (recomendado)
- VS Code con Metals (servidor de lenguaje Scala)
- Ammonite REPL para scripting
- Metals con VS Code o Neovim
## Versiones de Scala
```bash
scala -version
```
| Version | Año | Caracteristica |
|---------|-----|----------------|
| Scala 2.10 | 2013 | Interpolacion de cadenas, Reflexion |
| Scala 2.11 | 2014 | Modularizacion |
| Scala 2.12 | 2016 | Compatibilidad con Java 8 |
| Scala 2.13 | 2019 | Rediseño de colecciones |
| Scala 3.0 | 2021 | Nueva sintaxis, tipos dependientes, metaprogramacion |
## Scala vs Java
| Aspecto | Java | Scala |
|---------|------|-------|
| Inferencia de tipos | Limitada (var en Java 10+) | Extensa |
| Funciones | Objetos (Java 8+) | Funciones de primera clase |
| Metodos de extension | Via utilidades | Clases implicitas |
| Traits | Interfaces con metodos por defecto | Traits ricos con estado |
| Emparejamiento de patrones | switch (basico) | Emparejamiento de patrones potente |
| Manejo de nulos | Excepciones de puntero nulo | Tipo Option |
## Resumen
- Scala combina programacion orientada a objetos y funcional
- Se ejecuta en la JVM con interoperabilidad completa con Java
- La inferencia de tipos reduce la verbosidad
- Todo es un objeto, incluyendo funciones
- El REPL permite desarrollo interactivo
- Usa `scalac` para compilar y `scala` para ejecutar
- Comentarios: `//`, `/* */`, `/** */`
Comments
Comments powered by Giscus
To enable comments, add your Giscus embed code here.
Learn more about Giscus →