🔺 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 (тесты).