2011-03-23 12 views
22

Soy desarrollador de .NET y me gustaría ampliar mis horizontes un poco y después de comprobar las tendencias modernas decidí probar Scala. ¿Puede aconsejar una buena estrategia para comenzar? ¿Debería aprender Java primero? ¿Qué fuente o manual debo leer? ¿Hay algún proyecto de sistema operativo para practicar Scala y crecer en ellos?Cómo comenzar en scala

Gracias, Dominique

+0

Lea Programming Scala, muy buen libro :) –

Respuesta

26

Puede obtener una primera impresión al visitar Simply Scala donde tiene un intérprete en línea disponible.

Un clásico absoluto es Scala for Java Refugees que fue escrito originalmente para personas procedentes de Java, pero será bastante útil para usted, teniendo en cuenta lo similares que son los conceptos básicos de C#/Java.

No es necesario que aprenda Java primero, pero debe tener instalado y funcionando el kit de desarrollo/tiempo de ejecución de Java.

Luego vaya a http://www.scala-lang.org/downloads y descargue el paquete apropiado para su sistema operativo (siempre prefiero las versiones nocturnas de Scala, tienen más correcciones de errores que la última versión estable).

Después de eso, ejecute el Scala REPL que es básicamente "Simply Scala fuera de línea" (Simply Scala también usa el Scala REPL detrás de las cubiertas). Incluso muchos programadores de Java usan Scala REPL para prototipos de cosas primero.

Si prefiere libros para aprender, puedo recomendar Programming in Scala (2nd edition) de Martin Odersky (si comienza desde el punto de vista del diseño del lenguaje y quiere el "libro de referencia"). Hay otros como "Programming Scala" que están más dirigidos a principiantes, por así decirlo, pero personalmente encontré que "Programming in Scala" es excelente y he aprendido Scala con solo ese libro.

Una buena manera de iniciar Scala es trabajando con las clases de colección. .NET ha agregado algo similar últimamente con LINQ y métodos de extensión, por lo que será fácil de recoger para usted.

Un pequeño ejemplo para empezar:

//Define a class with some properties 
case class Person(name: String, var age: Int, spokenLanguages: String*) 

//Create some persons 
val joe = Person("Joe", 42, "English","French","Danish") 
val doe = Person("Doe", 23, "English","German") 
val don = Person("Don", 11, "Italian","French","Polish") 
val bob = Person("Bob", 17, "German") 

//Access a property 
joe.name 

//Don had his 12th birthday! 
don.age = 12 

//Put the persons into a list 
val persons = List(joe, doe, don, bob) 

//Divide the list into minors and adults 
val (minors, adults) = persons.partition(_.age < 18) 
//Get the total age of all persons 
val personsTotalAge = persons.map(_.age).sum 
//Return a list with only those speaking English 
val englishSpeakers = persons.filter(_.spokenLanguages.contains("English")) 
//Same as the example above. 
val englishSpeakers2 = 
    for{ person <- persons 
     language <- person.spokenLanguages 
     if language == "English" 
    } yield person 

No soy tan fluido en C#, pero creo que muchas cosas puede tener un aspecto similar a la suya.

Algunos ejemplos de soporte XML de Scala: no será necesario comenzar con Scala (y de todos modos java sí

//The shoppingCart for breakfast 
val shoppingCart = <list> 
        <item><name>Tomatoes</name><price>0.30</price><amount>4</amount></item> 
        <item><name>Eggs</name><price>0.15</price><amount>10</amount></item> 
        <item><name>Bread</name><price>2.20</price><amount>1</amount></item> 
        </list> 

//How much does it cost? 
val total = (shoppingCart \ "item").map(i => (i \ "price").text.toDouble * (i \ "amount").text.toDouble).sum 

//This is a Symbol 
val sym = 'SomeSymbol 

//I'm too lazy to use Strings for XML! (Example for implicits) 
implicit def symbol2string(symbol: Symbol) = symbol.name 

//Now I can use Symbols too! 
val total = (shoppingCart \ 'item).map(i => (i \ 'price).text.toDouble * (i \ 'amount).text.toDouble).sum 
+0

Sí, se ve un poco similar a LINQ. Gracias por tu ejemplo y ayuda. –

+0

Los ejemplos anteriores son comparables al uso de los métodos de extensión de las clases de colección de .NET. Agregué un ejemplo con una comprensión para hacer lo mismo, ahora debería verse realmente como LINQ. Y un ejemplo usando XML. :-) – soc

+0

El soporte de Scala para XML se ve genial. –

8

No es necesario para aprender Java en primer lugar. ¿Estás familiarizado con la programación funcional? Si es así, debería poder saltar bastante rápido. De todos modos, aquí hay algunas ideas sobre cómo puede aprender Scala:

  • Obtenga un buen libro de referencia. Recomiendo la programación en Scala por Odersky, Spoon y Venners. Lo encuentro como uno de los libros de Scala más completos.

  • Al igual que con el aprendizaje de cualquier idioma nuevo, intente escribir varias aplicaciones pequeñas con Scala. Si no eres un programador funcional, puedes programarlo en un paradigma diferente, pero está bien por ahora. Intente escribir su programa sin usar "var, (use val en su lugar)" sin usar bucles, y minimizando el cambio de estado en general.

  • Use sbt para crear su programa. Estoy un poco indeciso para recomendar esto, ya que tiene que aprender una nueva herramienta para escribir su programa. Pero también me parece genial escribir aplicaciones de Scala. Y muchos proyectos de Scala usan sbt, parece.

  • También vea este comentario y ese hilo en general para ayudarlo a hacer la transición a Scala. Struggle against habits formed by Java when migrating to Scala

2

No creo que necesite saber Java para comenzar en Scala. Sin embargo, es útil conocer los trazos generales, porque la mayoría de la documentación de Scala que he leído se refiere a las características o errores de Java.

En cuanto a los proyectos de código abierto, puede echar un vistazo al Github for scala projects. La mayoría de los proyectos de código abierto de Scala tienden a ser marcos, sin embargo.

En cuanto a los libros, encontré muy buenos tanto el libro de Artima, la Programación en Scala, como los Programadores Pragmáticos, Programming Scala.

5

Java como lenguaje es muy similar a C#, o en realidad es al revés .. .). Una vez que comienzas a hacer cosas productivas con scala, sin embargo, estarás interactuando con muchas bibliotecas de Java y aprenderás que java-world es una galaxia mucho más amplia de bibliotecas estándar más o menos que .net-world donde un montón de las cosas que necesita están directamente en las bibliotecas .NET estándar. Puede aprenderlos sobre la marcha, pero no provenientes de un entorno java, la experiencia puede ser abrumadora. Sería lo mismo si hubieras comenzado a aprender Java, aunque ... Otras cosas específicas de Java que debes aprender son acerca de que los genéricos son mucho menos poderosos en la JVM y cómo Scala intenta evitar esto.

En cuanto a Scala como un lenguaje, proveniente de .NET, puede beneficiarse más de leer algunas cosas en programación funcional que de aprender java. El paradigma funcional es la parte donde yo era el más ignorante en mi enfoque inicial de Scala y eso me causó más problemas para comprender el código de ejemplo de los recursos que puede encontrar en el sitio web de Scala.

construcción de una base

  • Para la programación funcional Yo recomendaría leer SICP (está en línea y gratis).
  • Mientras aprende Java intente echar un vistazo a F #. Es un buen lenguaje, está bien documentado y "vive" en el.neta de los ecosistemas

Scala de aprendizaje

+0

Gracias. Acepto que el mundo de Java se ve mucho más amplio que .NET, esa es una de las razones por las que me gustaría probar con Scala. Además, hay Lift allí que se dice que es una implementación avanzada e interesante del framework MVC y me muero por intentarlo :) Empecé a leer el SICP una vez. Fue bastante desafiante, pero proporcionó una nueva mirada profunda a los programas de escritura. Entonces, probablemente sea hora de regresar y completar. –

+0

@arctic_dev SICP simplemente lo ayudará a responder a "¿qué pasa con todo esto de recursión?" Y "¿por qué están tratando tan duro de escribir preguntas de código inmutable?". El verdadero placer se iniciará con mónadas, continuaciones, futuros y cosas por el estilo, que creo que el SICP ni siquiera comienza a cubrir. Pero tratar de entender estos nuevos conceptos (para mí) también fue una de las cosas más gratificantes que obtuve al estudiar scala. –

+0

@arctic_dev: solo como una pequeña advertencia: Learning Lift _and_ Scala es difícil, porque Lift espera que conozcas bastante bien a Scala. – soc

2

Además de los otros: Escribir simples programas por un tiempo y por completo caso omiso de las características avanzadas de Scala . Solo muévase allí cuando tenga una buena comprensión de los conceptos básicos, el paradigma funcional y el sistema de tipos.

+0

+1 "start simple" es un muy buen consejo para cualquier cosa, pero para Scala es esencial. Hay tantas cosas en el lenguaje que tratar de aprender todo a la vez es particularmente doloroso ... –

0

Actualmente estoy desarrollando uno que no requiere conocimientos previos de programación. Mostrará la fuerza de combinar programación funcional e imperativa, y es muy simple de seguir. Además, los mensajes cubrirán las mejores prácticas y resolverán problemas cada vez más difíciles usando Scala.

http://vigtig.it/blog/

Debe darle una oportunidad, parte 2 está casi terminado :)

0

descargar e instalar Apache Maven. Úselo para crear un proyecto Scala en blanco y escribir la clásica aplicación Scala hello world. Esto requerirá que configure el archivo pom.xml en el directorio del proyecto que crea Maven.

Luego ejecute mvn compile una y otra vez, corrigiendo los errores hasta que se compile.

Luego ejecute mvn package hasta que pase todas las pruebas de unidad.

Y, por último, ejecutar mvn scala:run

Una vez que construir una verdadera Scala proyecto: carrera tiene una opción para escupir el mandato Java completa necesaria para ejecutar desde un shell script o archivo por lotes.

1

Twitter (uno de los amantes de la scala) presentó recientemente su propio tutorial completo de scala - Scala School. Es una guía impresionante que recomiendo a todos los principiantes de Scala.

La escuela Scala se inició como una serie de conferencias en Twitter para preparar a ingenieros experimentados para que sean programadores de Scala productivos. ... Nosotros creemos que tiene más sentido acercarse a la enseñanza de Scala no como si fuera un Java mejorado pero como un nuevo idioma. La experiencia en Java no es esperada. El foco estará alrededor del intérprete y del estilo funcional de objeto , así como del estilo de programación que hacemos aquí, . Se hará hincapié en la facilidad de mantenimiento, la claridad de la expresión y el aprovechamiento del sistema de tipos.

La mayoría de las lecciones no requieren otro software que un Scala REPL. Se alienta al lector a seguirlo e ir más allá. Use estas lecciones como punto de partida para explorar el idioma.