SKB – Scala Future

Introduction

This article is part of the Scala knowledge bits Series.

Periodically, I will publish new exercises so you can slowly build up knowledge about Scala.

It is designed to be done in a very short amount of time and learn a little bit each day, just to create a routine.

This episode will teach you about Scala Future.

Hope you are going to enjoy it! It is designed for anyone to learn Scala from scratch and slowly learn, one Bit at a time.

After this Bit, I would love to hear your feedback in the comments down below.

Feel free to join the Discord server as well if you would like some help and support from the rest of our community.

What are we learning today?

Today we are going to learn about Scala Future !

Finally diving into asynchronous standard library !

Talking about Future, the good and the bad.

Time to try on the exercise on your own and scroll down for more information when you are done or if you are stuck.

Exercise

Here is an exercise to complete today.

If I did my job well, you should be able to guess by yourself the solution based on what you previously learned and based on the clues.

But if you get stuck, scroll down to get more information.

The goal of the exercise is to replace the ??? by a piece of code so that the exercise compiles and that’s how you win! Good luck!

You can fill the exercise right in here:

Or, if it does not load, go on to Scastie (JkqgIleTS6Sb5Ies2jAKvw).

More information about Scala Future

In this exercise you will learn (or have learned, if you have already solved the puzzle) about Scala Future.

Lots going on here but hopefully the comments helped breaking it down into bits size knowledge.

First of all, to use Future, you have to define an ExecutionContext. There are plenty of ways to do it but to stay simple, we are going to be using the default global one.

Then, let’s start with the first part. In this part, we are discovering Future. Simply create then using Future { ... } and you can have any code in there. The return type will be Future[A], where A is the return type of what is inside the { }.

You can chain futures together using for-comprehension, like we saw in previous episode. As well as the traditional map, flatMap, etc…

We are already encountering one danger to know about Future: they start as soon as they are created. Also, the next operation is executed when the first one return, this is why the futures f3 to f5 are waiting on each other to start. To start them at the same time, you would have to create them outside of the for-comprehension like f1 and f2.

The second part is to illustrate the biggest danger about Future. They are NOT cancellable !

As you can see, even when the Await time is smaller and would throw an exception, the Future keep running in the background. Which can be dangerous if you are doing some insert in a database for instance and believe that it was cancel, it will not be.

Other framework more advanced like ZIO offer better asynchronous features using Fibers instead of Threads. But this will have to wait for us to be master in functional programming and more advanced concepts before exploring this library.

Feel free to go back to the exercise, modify the code to try out new things and get a better intuition for Scala Future.

Conclusion

I hope you have learned something new or had fun during this Scala Knowledge Bit.

Please ask questions or post feedback in the comments below.

Feel free to try on the next Scala Knowledege Bit.

If you are curious about the previous Scala knowledge Bits, go check it out! 🙂

Leave a Reply

%d bloggers like this: