Futures represent values that may not be available yet.
Creating a Future
Scala
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
val future: Future[String] = Future {
Thread.sleep(1000)
"Hello from the future!"
}Handling Results
Scala
future.onComplete {
case scala.util.Success(value) => println(s"Result: $value")
case scala.util.Failure(error) => println(s"Error: ${error.getMessage}")
}For-Comprehensions
Scala
val result: Future[String] = for {
user <- fetchUser(id)
posts <- fetchPosts(user.id)
} yield s"${user.name} has ${posts.size} posts"Parallel Composition
Scala
val userF = Future { fetchUser(1) }
val orderF = Future { fetchOrder(2) }
val combined: Future[(User, Order)] = userF.zip(orderF)Tips
- Use
Futurefor I/O-bound operations. - Prefer
for-comprehensions for readability. - Always provide an
ExecutionContext.
🎉 You have completed the Scala course!