fbpx
Wikipedia

Scala (lenguaje de programación)

Scala es un lenguaje de programación multi-paradigma diseñado para expresar patrones comunes de programación en forma concisa, elegante y con tipos seguros. Integra sutilmente características de lenguajes funcionales y orientados a objetos. La implementación actual se ejecuta en la máquina virtual de Java y es compatible con las aplicaciones Java existentes.

Scala
Desarrollador(es)
Laboratorio de métodos de programación de la EPFL
https://www.scala-lang.org/
Información general
Extensiones comunes scala y sc
Paradigma funcional, orientado a objetos
Apareció en 2003
Diseñado por Martin Odersky
Última versión estable 2.13.0 (01 de abril de 2019 (2 años, 4 meses y 3 días))
Sistema de tipos estático, fuerte
Influido por Smalltalk, Java, Haskell, Standard ML, OCaml
Licencia BSD

Características

Orientación a objetos

Scala es un lenguaje de programación puro orientado a objetos, en el sentido de que cada valor es un objeto. El tipo y comportamiento de los objetos se describe por medio de clases y traits. La abstracción de clases se realiza extendiendo otras clases y usando un mecanismo de composición basado en mixins como un reemplazo limpio de la herencia múltiple.

Lenguaje funcional

Scala también posee características propias de los lenguajes funcionales. En Scala las funciones son valores de primera clase, soportando funciones anónimas, orden superior, funciones anidadas y currificación. Scala viene integrado de fábrica con la técnica de pattern matching para modelar tipos algebraicos usados en muchos lenguajes funcionales.

Tipificado estático

Scala está equipado con un sistema de tipos expresivo que refuerza a que las abstracciones de tipos se usen en forma coherente y segura.

Extensibilidad

Scala se diseñó teniendo en mente el hecho de que en la práctica el desarrollo de aplicaciones requiere a menudo de extensiones específicas del lenguaje. Para ello, Scala proporciona una combinación única de mecanismos que hacen fácil y sin problemas agregar construcciones nuevas al lenguaje en forma de bibliotecas.

Ejemplos

Hola Mundo escrito en Scala

 object HelloWorld extends App { println("Hola mundo") } 

Nótese lo similar a un programa Java. La diferencia es que no declaramos nada estático o un retorno vacío; la palabra reservada object nos devuelve un objeto Singleton que nos libera de realizar por nosotros mismos tales construcciones.

Cuando el programa se almacena en el archivo HelloWorld.scala, el usuario lo compila con el comando:

$ scalac HelloWorld.scala 

Y se ejecuta con:

$ scala HelloWorld 

Esto es análogo al proceso de compilación y ejecución de código Java. De hecho, el proceso de compilación y ejecución de Scala es idéntico al de Java, haciéndolo compatible con herramientas como Apache Ant.

Una versión más corta del "Hola mundo" en Scala es:

println("Hello, world!") 

Scala incluye un shell interactivo y soporte de scripting incorporado. Guardado en un archivo llamado HelloWorld2.scala, el cual puede ser ejecutado como script sin prioridad de compilación usando:

$ scala HelloWorld2.scala 

Los comandos también pueden ser ingresados en el intérprete de Scala, usando la opción -e:

$ scala -e 'println("Hello, World!")' 

Las expresiones pueden ser ingresadas en el REPL:

$ scala Welcome to Scala 2.12.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_131). Type in expressions for evaluation. Or try :help. scala> List(1, 2, 3).map(x => x * x) res0: List[Int] = List(1, 4, 9) scala> 

Ejemplo Básico

El siguiente ejemplo muestra las diferencias entre la sintaxis de Java y Scala.

// Java: int mathFunction(int num) { int numSquare = num*num; return (int) (Math.cbrt(numSquare) + Math.log(numSquare)); } 
// Scala: Direct conversion from Java // no import needed; scala.math // already imported as `math` def mathFunction(num: Int): Int = { var numSquare: Int = num*num return (math.cbrt(numSquare) + math.log(numSquare)). asInstanceOf[Int] } 
// Scala: More idiomatic // Uses type inference, omits `return` statement, // uses `toInt` method, declares numSquare immutable import math._ def mathFunction(num: Int) = { val numSquare = num*num (cbrt(numSquare) + log(numSquare)).toInt } 

Algunas diferencias sintácticas en este código son:

  • Scala no requiere punto y coma al final de las sentencias.
  • Los tipos están capitalizados: Int, Double, Boolean en vez de int, double, boolean.
  • Parámetros y tipos de retorno continúan, como en Pascal, en vez de preceder como en C.
  • Los métodos deben ser precedidos por def.
  • Variables locales y de clase deben ser precedidos por val (indica una variable inmutable) o var (indica una variable mutable).
  • El operador return es innecesario en una función (a pesar de estar permitido); el valor de la última sentencia o expresión ejecutada es normalmente el valor de la función.
  • En vez del operador cast (Type) foo, Scala usa foo.asInstanceOf[type], o una función especializada como toDouble o toInt.
  • En vez de la importación de paquetes de Java import foo.*;, Scala usa import foo._.
  • Una función o método foo() también puede ser llamado solo foo; el método thread.send(signo) también puede ser llamado solamente como thread send signo; y el método foo.toString() también puede ser llamado solo como foo toString.

Ejemplo con Clases

El siguiente ejemplo contrasta la definición de clases en Java y en Scala.

// Java: public class Point { private final double x, y; public Point(final double x, final double y) { this.x = x; this.y = y; } public Point( final double x, final double y, final boolean addToGrid ) { this(x, y); if (addToGrid) grid.add(this); } public Point() { this(0.0, 0.0); } public double getX() { return x; } public double getY() { return y; } double distanceToPoint(final Point other) { return distanceBetweenPoints(x, y, other.x, other.y); } private static Grid grid = new Grid(); static double distanceBetweenPoints( final double x1, final double y1, final double x2, final double y2 ) { return Math.hypot(x1 - x2, y1 - y2); } } 
// Scala class Point( val x: Double, val y: Double, addToGrid: Boolean = false ) { import Point._ if (addToGrid) grid.add(this) def this() = this(0.0, 0.0) def distanceToPoint(other: Point) = distanceBetweenPoints(x, y, other.x, other.y) } object Point { private val grid = new Grid() def distanceBetweenPoints(x1: Double, y1: Double, x2: Double, y2: Double) = { math.hypot(x1 - x2, y1 - y2) } } 

Enlaces externos

  • Sito web de Scala
  • Documentación
  • Scala API
  •   Datos: Q460584

scala, lenguaje, programación, este, artículo, sección, sobre, informática, necesita, wikificado, favor, edítalo, para, cumpla, convenciones, estilo, este, aviso, puesto, abril, 2010, scala, lenguaje, programación, multi, paradigma, diseñado, para, expresar, p. Este articulo o seccion sobre informatica necesita ser wikificado por favor editalo para que cumpla con las convenciones de estilo Este aviso fue puesto el 14 de abril de 2010 Scala es un lenguaje de programacion multi paradigma disenado para expresar patrones comunes de programacion en forma concisa elegante y con tipos seguros Integra sutilmente caracteristicas de lenguajes funcionales y orientados a objetos La implementacion actual se ejecuta en la maquina virtual de Java y es compatible con las aplicaciones Java existentes ScalaDesarrollador es Laboratorio de metodos de programacion de la EPFLhttps www scala lang org Informacion generalExtensiones comunesscala y scParadigmafuncional orientado a objetosAparecio en2003Disenado porMartin OderskyUltima version estable2 13 0 01 de abril de 2019 2 anos 4 meses y 3 dias Sistema de tiposestatico fuerteInfluido porSmalltalk Java Haskell Standard ML OCamlLicenciaBSD editar datos en Wikidata Indice 1 Caracteristicas 1 1 Orientacion a objetos 1 2 Lenguaje funcional 1 3 Tipificado estatico 1 4 Extensibilidad 2 Ejemplos 2 1 Hola Mundo escrito en Scala 2 2 Ejemplo Basico 2 3 Ejemplo con Clases 3 Enlaces externosCaracteristicas EditarOrientacion a objetos Editar Scala es un lenguaje de programacion puro orientado a objetos en el sentido de que cada valor es un objeto El tipo y comportamiento de los objetos se describe por medio de clases y traits La abstraccion de clases se realiza extendiendo otras clases y usando un mecanismo de composicion basado en mixins como un reemplazo limpio de la herencia multiple Lenguaje funcional Editar Scala tambien posee caracteristicas propias de los lenguajes funcionales En Scala las funciones son valores de primera clase soportando funciones anonimas orden superior funciones anidadas y currificacion Scala viene integrado de fabrica con la tecnica de pattern matching para modelar tipos algebraicos usados en muchos lenguajes funcionales Tipificado estatico Editar Scala esta equipado con un sistema de tipos expresivo que refuerza a que las abstracciones de tipos se usen en forma coherente y segura Extensibilidad Editar Scala se diseno teniendo en mente el hecho de que en la practica el desarrollo de aplicaciones requiere a menudo de extensiones especificas del lenguaje Para ello Scala proporciona una combinacion unica de mecanismos que hacen facil y sin problemas agregar construcciones nuevas al lenguaje en forma de bibliotecas Ejemplos EditarHola Mundo escrito en Scala Editar object HelloWorld extends App println Hola mundo Notese lo similar a un programa Java La diferencia es que no declaramos nada estatico o un retorno vacio la palabra reservada object nos devuelve un objeto Singleton que nos libera de realizar por nosotros mismos tales construcciones Cuando el programa se almacena en el archivo HelloWorld scala el usuario lo compila con el comando scalac HelloWorld scala Y se ejecuta con scala HelloWorld Esto es analogo al proceso de compilacion y ejecucion de codigo Java De hecho el proceso de compilacion y ejecucion de Scala es identico al de Java haciendolo compatible con herramientas como Apache Ant Una version mas corta del Hola mundo en Scala es println Hello world Scala incluye un shell interactivo y soporte de scripting incorporado Guardado en un archivo llamado HelloWorld2 scala el cual puede ser ejecutado como script sin prioridad de compilacion usando scala HelloWorld2 scala Los comandos tambien pueden ser ingresados en el interprete de Scala usando la opcion e scala e println Hello World Las expresiones pueden ser ingresadas en el REPL scala Welcome to Scala 2 12 2 Java HotSpot TM 64 Bit Server VM Java 1 8 0 131 Type in expressions for evaluation Or try help scala gt List 1 2 3 map x gt x x res0 List Int List 1 4 9 scala gt Ejemplo Basico Editar El siguiente ejemplo muestra las diferencias entre la sintaxis de Java y Scala Java int mathFunction int num int numSquare num num return int Math cbrt numSquare Math log numSquare Scala Direct conversion from Java no import needed scala math already imported as math def mathFunction num Int Int var numSquare Int num num return math cbrt numSquare math log numSquare asInstanceOf Int Scala More idiomatic Uses type inference omits return statement uses toInt method declares numSquare immutable import math def mathFunction num Int val numSquare num num cbrt numSquare log numSquare toInt Algunas diferencias sintacticas en este codigo son Scala no requiere punto y coma al final de las sentencias Los tipos estan capitalizados Int Double Boolean en vez de int double boolean Parametros y tipos de retorno continuan como en Pascal en vez de preceder como en C Los metodos deben ser precedidos por def Variables locales y de clase deben ser precedidos por val indica una variable inmutable o var indica una variable mutable El operador return es innecesario en una funcion a pesar de estar permitido el valor de la ultima sentencia o expresion ejecutada es normalmente el valor de la funcion En vez del operador cast Type foo Scala usa foo asInstanceOf type o una funcion especializada como toDouble o toInt En vez de la importacion de paquetes de Java import foo Scala usa import foo Una funcion o metodo foo tambien puede ser llamado solo foo el metodo thread send signo tambien puede ser llamado solamente como thread send signo y el metodo foo toString tambien puede ser llamado solo como foo toString Ejemplo con Clases Editar El siguiente ejemplo contrasta la definicion de clases en Java y en Scala Java public class Point private final double x y public Point final double x final double y this x x this y y public Point final double x final double y final boolean addToGrid this x y if addToGrid grid add this public Point this 0 0 0 0 public double getX return x public double getY return y double distanceToPoint final Point other return distanceBetweenPoints x y other x other y private static Grid grid new Grid static double distanceBetweenPoints final double x1 final double y1 final double x2 final double y2 return Math hypot x1 x2 y1 y2 Scala class Point val x Double val y Double addToGrid Boolean false import Point if addToGrid grid add this def this this 0 0 0 0 def distanceToPoint other Point distanceBetweenPoints x y other x other y object Point private val grid new Grid def distanceBetweenPoints x1 Double y1 Double x2 Double y2 Double math hypot x1 x2 y1 y2 Enlaces externos EditarSito web de Scala Documentacion Scala API Datos Q460584Obtenido de https es wikipedia org w index php title Scala lenguaje de programacion amp oldid 134031296, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos