🔺 Scala

ООП и ФП на JVM: типы, case-классы, коллекции, Future, библиотеки.

Шпаргалки · Программирование · #scala #jvm #functional

IDE и запуск

IntelliJ IDEA + плагин Scala, VS Code + Metals. Сборка: sbt, Scala CLI (scala-cli run file.scala), Mill.

Типы данных

val n: Int = 1          // val неизменяемое, var изменяемое
var s: String = "a"
val xs = List(1, 2, 3); val m = Map("a" -> 1)
case class User(id: Int, name: String)
val o: Option[Int] = Some(1)   // None
enum Color { case Red, Green }  // Scala 3

Основные: Int, Long, Double, Boolean, String, Char, Unit, Any, Nothing.

Операторы

Операторы это методы: 1 + 2 равно 1.+(2). Есть == !=, && ||, :: (в голову списка), ++, -> (пара).

Циклы

for (i <- 0 until 3) println(i)
for { x <- xs; if x > 1 } yield x * 2
xs.foreach(println)
while (cond) {}

Функции

def add(a: Int, b: Int = 0): Int = a + b
val sq = (x: Int) => x * x
x match { case 1 => "один"; case _ => "другое" }

Встроенные

println, require, Option(x), .getOrElse, .map, .flatMap, .fold, .mkString, .toList.

Асинхронность

import scala.concurrent.{Future, ExecutionContext}
given ExecutionContext = ExecutionContext.global
Future { 21 * 2 }.map(_ + 1)

Для сложных случаев: Cats Effect, ZIO, Akka / Pekko.

Коллекции

List, Vector, Set, Map, Seq: .filter, .map, .groupBy, .sortBy, .zip, .foldLeft.

Библиотеки по задачам

Play, http4s, Akka HTTP (веб), Spark (большие данные), Cats / ZIO (эффекты), Circe (JSON), Slick, Doobie (БД), ScalaTest, MUnit (тесты).