Hace un mes, obtuve mi primer trabajo y me convertí en desarrollador en prácticas, nuestro equipo usa el lenguaje Scala. Me parece que todos los desarrolladores novatos en el primer día están perdidos. al mismo tiempo, un montón de nuevos nombres, tecnologías, algunas reglas, y nunca se sabe qué, absolutamente todo es nuevo para usted, este es el primer trabajo. En mi caso, todavía no sabía el idioma en el que programaría, hasta la entrevista ni siquiera había oído hablar de él. En pocas palabras: el primer día estaba completamente lleno. Pregunte, ¿cómo conseguí este trabajo? Conocí Java, en la entrevista me dijeron que el javista podrá ir a la roca con bastante facilidad y no puede preocuparse. Pero aparentemente un poco más adelante todavía valía la pena, porque la primera vez frente a mí vi solo pantallas llenas de texto, en las que casi la mitad estaba inmediatamente clara.
Pero incluso el hecho de que no entendí algo trajo más molestias, pero el hecho de que era muy diferente, e incluso el tipo de la variable viene después del nombre, y a veces no existe en absoluto.
final String str = "abc";
val str = "abc"
Así es como se describe la función:
int sum(int a, int b) {return a+b;}
def sum(a: Int, b: Int) = {a + b}
Y Scala también tiene una consola REPL (Read-eval-print-loop), como, por ejemplo, en Python. Como ya notó, faltan los punto y coma. Puede ejecutar programas de una sola página sin una página principal, los nombres de métodos y variables pueden contener y comenzar con cualquier carácter, sin reglas. No hay estática, pero hay Objeto, también hay objetos primitivos, == en realidad son iguales. Si el método no tiene parámetros, entonces no es necesario poner fin a la llamada al método, los corchetes también son opcionales si no hay parámetros, y si solo toma 1 parámetro, puede escribir así:
str.charAt(5);
str charAt 5
Y otro ejemplo interesante:
val res = 1 + 1
No, no es solo 1 más 1, aquí el objeto 1, el método + se llama y el objeto 1 se le pasa como el único parámetro. Para mí, esto fue un salto de plantilla.
Para mi sorpresa, llegó un libro maravilloso de David Pollack - Beginning Scala. El libro comienza con una frase, después de lo cual me di cuenta de que debía leerlo hasta el final:
¡Ay! Eso me duele el cerebro! Deja de hacerme pensar diferente. Oh, espera ... duele menos ahora. Lo entiendo Esta forma diferente de resolver el problema tiene algunos beneficios. Me sentí así después de mi primer año de la facultad de derecho. Me sentí así por un tiempo cuando comencé a codificar Scala.
David tiene una tremenda experiencia en programación, comenzó este negocio 20 años antes de mi nacimiento, logró trabajar con más de 10 lenguajes de programación, hasta que llegó a Scala. Y ahora dice:
Scala es un lenguaje de programación que proporciona la mejor experiencia para los desarrolladores.
Sin embargo, el autor advierte honestamente que dominarlo no es tan fácil, le tomó 2 años hacer esto, pero espera que podamos hacerlo más rápido y ayudará en esto. Este no es un libro muy simple e implica cierta experiencia en la programación con el lector. Especialmente a aquellos que previamente programaron en Java les gustará, porque Hay muchas referencias a este lenguaje y se pueden comparar.
Además de Beginning Scala, también leí las lecciones de Twitter de Scala School, para todas las lecciones hay una traducción al ruso, pero el libro de David Pollack se encontró solo en la versión en inglés.
El proyecto de Ejercicios Scala ayudó a consolidar la teoría, además de los viajes independientes a través de la fuente del rock y el trabajo, hay tareas muy simples, pero son bastante adecuadas para arreglar algunos aspectos al principio y verificar que leas cuidadosamente y entiendas todo correctamente.
Y les contaré un poco sobre las cosas más comunes y muy simples que tuve que comprender en primer lugar.
Opcion En pocas palabras: este es un contenedor en el que está vacío (Ninguno, parece nulo, pero tiene métodos de mapa, filtro, ...), o hay algún valor exactamente Algún (valor) y su uso puede hacer que el código sea más seguro y no arroje una NullPointerException, porque quiere, no quiere, pero aún necesita recuperar los datos limpios de la Opción, y en este punto ya es difícil olvidar escribir un cheque.
Por supuesto, Option tiene un método get, pero no se recomienda usarlo porque en este caso se pierde todo el punto de Option, porque None.get arroja una excepción.
Algunas de las comodidades más obvias:
Es fácil devolver el valor predeterminado si la opción está vacía
optValue.getOrElse(defaultValue)
En caso de cualquier acción:
optValue match { case Some(value) => action case None => defaultAction }
Ejemplo de Scala Beginning. La ruta es una determinada base de datos que contiene tipos de persona
def findPerson(key: Int): Option[Person]
El método devolverá Some [Person] si se encuentra dicha entrada y None de lo contrario.
Ahora queremos obtener la edad del usuario por clave.
def ageFromKey(key: Int): Option[Int] = findPerson(key).map(_.age)
No tuvimos que probar Ninguno y el método resultó ser muy conciso.
Patronaje a juego . Al principio, pensé que este es el mismo conmutador de Java y apenas lo usaré, pero no lo es. En Scala, este es uno de los diseños más utilizados.
Tipo de fundición:
obj match { case str: String => str case number: Int => number }
Puede agregar condiciones adicionales y agregar una acción predeterminada.
obj match { case strWithA: String if strWithA.contains("a") => strWithA case negative: Int if negative < 0 => negative case zero if zero == 0 => zero case _ => defaultAction }
Es extremadamente conveniente utilizar la coincidencia de patrones con clases de casos. Ejemplo de comienzo de Scala
Stuff("David", 45) match { case Stuff("David", age) if age < 30 => "young David" case Stuff("David", _) => "old David" case _ => "Other" }
Las funcionesPara empezar, en Scala, las funciones son instancias que implementan una determinada interfaz, o más bien el rasgo FunctionX, donde X es el número de parámetros y toma un valor de 1 a 22. En esta bandeja, el único método es aplly, que se llama para la función. Como las funciones son instancias ordinarias, podemos pasarlas y devolverlas desde métodos y funciones.
Ejemplo de Scala Beginning. En respuesta, pasamos alguna función de Int a String, y devuelve el resultado de esta función con el parámetro 42.
def answer(f: Function1[Int, String]) = f(42)
o lo mismo
def answer(f: Function1[Int, String]) = f.apply(42)
Una cosa muy conveniente son los combinadores funcionales /
Deje solo elementos positivos en la matriz:
arr.filter(value => value > 0)
Un ejemplo un poco más complejo. Calcule la suma de los valores de la función f a partir de los elementos positivos de la lista. 2 formas de hacerlo:
list.filter(x => x > 0).foldLeft(0)(_ + f(_)) list.filter(x => x > 0).map(f).sum
Y al final me gustaría decir por qué escribí todo esto. No quería enseñarle a nadie Scala ni hablar sobre el idioma como tal, hay muchos de estos artículos en Habré e Internet, y muchos son muy buenos y útiles. Mi objetivo era simplemente contar mi historia, lo que podría ser interesante para alguien y podría ayudar y apoyar a algunos de los recién llegados que el destino acababa de chocar con esta roca. ¡Te deseo buena suerte! Se alienta a los programadores experimentados a compartir sus consejos y opiniones en los comentarios sobre el camino de un programador principiante de Scala.