PDF de programación - Manual de Scala para programadores Java

Imágen de pdf Manual de Scala para programadores Java

Manual de Scala para programadores Javagráfica de visualizaciones

Actualizado el 21 de Marzo del 2018 (Publicado el 15 de Febrero del 2018)
1.309 visualizaciones desde el 15 de Febrero del 2018
153,4 KB
15 paginas
Creado hace 16a (12/07/2007)
Manual de Scala
para programadores Java

Version 1.2
July 12, 2007

Michel Schinz,
Philipp Haller,
Juanjo Bazán (ES ver.)

PROGRAMMING METHODS LABORATORY
EPFL
SWITZERLAND

2

1 Introducción

Este manual proporciona una introducción rápida al lenguaje Scala y a su compi-
lador. Está dirigido a personas que ya tengan algo de experiencia programando y
deseen echar un vistazo a las posibilidades de Scala. Se presuponen conocimientos
básicos de programación orientada a objetos, especialmente en Java.

2 Un primer ejemplo

Como primer ejemplo, utilizaremos el habitual programa Hola Mundo. No es muy
fascinante pero es una manera fácil de mostrar el uso de las herramientas Scala sin
que sea necesario conocer mucho sobre el lenguaje. Esta es la pinta que tiene:

object HolaMundo {

def main(args: Array[String]) {

println("Hola, mundo!")

}

}

La estructura de este programa debería ser familiar para cualquier programador
Java: consiste en un método llamado main que toma como parámetro de entrada en
forma de array de cadenas de texto(Strings) los argumentos introducidos en la línea
de comandos. El cuerpo de este método consiste en una única llamada al método
predefinido println con una saludo amistoso como argumento. El método main no
devuelve ningún valor, por tanto no es necesario declarar ningún tipo de respuesta.

Lo que es menos familiar para los programadores Java es la declaración de object
que contiene al método main. Esta declaración nos presenta lo que se conoce co-
munmente como objeto singleton, es decir, una clase con una única instancia. Por
tanto, la declaración anterior declara tanto una clase llamada HolaMundo como una
instancia de esa clase, también llamada HolaMundo. Esta instancia se crea bajo de-
manda, la primera vez que se utiliza.

El lector astuto se habrá dado cuenta de que el método main no está declarado como
static. Esto se debe a que los miembros estáticos(métodos o variables) no existen
en Scala. En vez de definir miembros estáticos, el programador Scala declara esos
métodos como objetos singleton.

2.1 Compilando el ejemplo

Para compilar el ejemplo utilizamos scalac, el compilador de Scala. scalac fun-
ciona como la mayoría de los compiladores: recibe una archivo de código fuente
como argumento, quizá algunas opciones, y produce uno o varios archivos. Los
archivos de objetos que produce son archivos estándar de clases Java.

Si guardamos el programa anterior en un fichero llamado HolaMundo.scala, pode-

2.2 Ejecutando el ejemplo

3

mos compilarlo mediante la siguiente instrucción(el símbolo mayor que ‘>’ repre-
senta el indicador de la shell y no hace falta escribirlo):

> scalac HolaMundo.scala

Esto genera unas cuantos archivos de clases en el directorio actual. Uno de ellos se
llamará HolaMundo.class, y contendrá una clase que puede ser ejecutada directa-
mente mediante el comando scala, como se muestra en la siguiente sección.

2.2 Ejecutando el ejemplo

Una vez compilado, un programa Scala se puede ejecutar utilizando el commando
scala. Su uso es muy similar al del comando java utilizado para ejecutar programas
Java, y acepta las mismas opciones. El ejemplo anterior puede ejecutarse mediante
el siguiente comando, que produce la salida esperada:

> scala -classpath . HolaMundo

Hola, mundo!

3 Interacción con Java

Uno de los puntos fuertes de Scala es que permite muy facilmente interactuar con
código Java. Por defecto se importan todas las clases del paquete java.lang, el resto
necesitan ser importadas de manera explícita.

Veamos un ejemplo que nos lo muestre. Queremos obtener la fecha actual y darle
formato de acuerdo a la convención de un país específico, digamos Francia1.
Las librerias de Java tienen definidas clases muy potentes como Date y DateFormat.
Puesto que Scala interopera directamente con Java, no hay necesidad de implemen-
tar clases equivalentes en la libreria de clases de Scala, basta simplemente con im-
portar las clases de los correspondientes paquetes de Java:

import java.util.{Date, Locale}
import java.text.DateFormat
import java.text.DateFormat._

object FrenchDate {

def main(args: Array[String]) {

val now = new Date
val df = getDateInstance(LONG, Locale.FRANCE)
println(df format now)

}

}

1la misma convención se aplica en otras regiones como la zona francófona de Suiza.

4

La instrucción para importar en Scala se parece mucho a su equivalente de Java,
pero en realidad es más potente. Se pueden importar varias clases del mismo pa-
quete encerrandolas entre llaves como en la primera línea. Otra diferencia es que
cuando queremos importar todos los nombres de un paquete o de una clase, se
utiliza el carácter guión bajo (_) en vez del asterisco (*). Esto se debe a que el aster-
isco es un identificador válido en Scala (es decir, el nombre de un método), como
veremos más adelante.

Por tanto el import de la tercera línea importa todos los miembros de la clase DateFormat.
Esto hace que sean visibles directamente el método estático getDateInstance y el
campo estático LONG.

Dentro del método main primero creamos una instancia de la clase Date de Java que
por defecto contiene la fecha actual. Después definimos un formato de fecha uti-
lizando el método estático getDateInstance que hemos importado previamente. Y
por último, mostramos la fecha actual formateada de acuerdo a la instancia local-
izada de DateFormat. Los métodos que reciben un solo argumento se pueden usar
con sintaxix infix, es decir, la expresión

df format now

es simplemente otra manera ligeramente más corta de escribir la expresión

df.format(now)

Esto puede parecer un detalle sintáctico menor, pero tiene consecuencias impor-
tantes, una de las cuales detallaremos en la próxima sección.

Para acabar con este apartado sobre la interacción con Java, hay que mencionar que
en Scala es también posible heredar de clases Java e implementar interfaces de Java.

4 Todo es un objeto

Scala es un lenguaje orientado a objetos puro, en el sentido de que todo es un objeto,
incluidos los números o las funciones. En ese aspecto se diferencia de Java, puesto
que Java distingue tipos primitivos(como int y boolean) y tipos por referencia, y no
permite manipular funciones como valores.

4.1 Los números son objetos

Puesto que los números son objetos, también tienen métodos. Y de hecho una ex-
presión aritmética como esta:

1 + 2 * 3 / x

esta formada exclusivamente de llamadas a métodos, porque es equivalente a la
siguiente expresión, como vimos en la sección anterior:

4.2 Las funciones son objetos

5

1.+(2.*(3./(x)))

Lo que significa también que +, *, etc. son identificadores válidos en Scala.

4.2 Las funciones son objetos

Quizá más sorprendente para el programador Java, las funciones también son obje-
tos en Scala. Por tanto es posible pasar funciones como argumentos, guardarlas en
variables y devolverlas como respuesta de otras funciones. Esta habilidad para ma-
nipular funciones como valores es una de las piedras angulares de un interesante
paradigma de programación llamado programación funcional.

Como ejemplo muy simple de porqué puede resultar útil el uso de funciones como
valores, consideremos una función temporizador cuyo propósito sea realizar al-
guna acción una vez por segundo. ¿Cómo le pasamos la acción a realizar? lógi-
camente, como una función. Esta manera sencilla de pasar funciones debería ser
familiar para muchos programadores: se utiliza frecuentemente en código de inter-
faces de usuario, para llamadas a funciones que hay que realizar cuando se produce
algún evento.

En el siguiente programa, la función temporizador se llama unaVezPorSegundo, y
toma una función como argumento. El tipo de esta función se escribe () => unit
y es el tipo de todas las funciones que no tienen parámetros de entrada y que no
devuelven nada(el tipo unit es similar a void en C/C++). El método main de este
programa simplemente llama a la función temporizador para que repita cada se-
gundo la impresión por pantalla de la frase “el tiempo pasa volando”.

object Temporizador {

def unaVezPorSegundo(repite: () => unit) {

while (true) { repite(); Thread sleep 1000 }

}
def elTiempoVuela() {

println("el tiempo pasa volando...")

}
def main(args: Array[String]) {

unaVezPorSegundo(elTiempoVuela)

}

}

Notese como para imprimir la cadena de texto usamos el método predefinido println
en vez de usar el método de System.out.

4.2.1 Funciones anónimas

Aunque este programa es fácil de entender, se puede refinar un poco. Antes de nada,
se ve que la función elTiempoVuela solo se ha creado para ser pasada posterior-

6

mente como argumento al método unaVezPorSegundo. Tener que dar nombre a esa
función, que sólo se usa una vez, parece innecesario, y de hecho estaría bien poder
construirla justo cuando se le pasa a unaVezPorSegundo. En Scala esto es posible
usando funciones anónimas, que son exactamente eso: funciones sin nombre. La
versión revisada de nuestro programa temporizador utilizando una función anón-
ima en vez de elTiempoVuela queda así:

object Temporizador {

def unaVezPorSegundo(repite: () => unit) {

while (true) { repite(); Thread sleep 1000 }

}
def main(args: Array[String]) {

unaVezPorSegundo(() =>

println("el tiempo pasa volando..."))

}

}

La presencia de una función anónima en este ejemplo, se revela por la flecha ‘=>’
que separa a la lista de argumentos de la función, del cuerpo de la misma. En este
ejemplo la lista de argumentos es vacía, como indican los paréntesis vacíos a la
izquierda de la flecha. El cuerpo de la función es el mismo que el de elTiempoVuela
antes.

5 Clases

Como hemos visto, Scala es un lenguaje orientado a objetos, y como tal tiene el
concepto de clase.2 Las clases en Scala se declaran usando una sintaxis próxima
a la de Java. Una diferencia importante es que las clases en Scala pueden tener
parámetros. Lo ilustramos con la siguiente definición de números complejos:

class Complex(real: double, imaginary: double) {

def re() = real
def im() = imaginary

}

Esta clase recibe dos argumentos,
  • Links de descarga
http://lwp-l.com/pdf8796

Comentarios de: Manual de Scala para programadores Java (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad