This is a two day course. You are expected to know how to program in at least one programming language (Java, Ruby, JavaScript, etc.). The course teaches the fundamentals of using Scala as a functional programming language.
This course is meant to be run in person. There are comments in the exercises to try and point you in the right direction so you should be able to do this in your spare time if you desire. Unit tests are included to verify your solutions for each exercise.
Use sbt test
to run the tests. The first time you run the tests, they will all fail. This is a good thing! As you complete each exercise correctly, the tests will pass.
We welcome pull requests and feedback!
Time | Topic/Exercise | Presenter |
---|---|---|
09.30 | Start | |
10.00 | Intro to FP/Scala (presentation) | Chris |
10.30 | IntroExercises | Felipe |
11.00 | 15 min break | |
11.15 | Intro to ADTs (presentation) | Jack |
11.45 | TypesExercises | Felipe |
12.45 | Lunch (not provided) | |
13.45 | ListExercises | Ashok |
15.00 | 30 min break | |
15.30 | NullExercises | Tya |
16.00 | OptionExercises pt. 1 (Safe constructors) | Tya |
17.00 | End |
Time | Topic/Exercise | Presenter |
---|---|---|
09.30 | Intro to Error Handling (presentation) | Chris |
10.00 | OptionExercises pt. 2 | Jack |
11.00 | 15 min break | |
11.15 | OptionExercises pt. 3 | Jack |
12.00 | ExceptionExercises | Sanj |
12.45 | Lunch (not provided) | |
13.45 | Exceptions2EitherExercises | Sanj |
15.00 | 30 min break | |
15.30 | TryExercises | Ashok |
16.00 | LogParser | Stili |
17.00 | End |
$ git clone https://github.com/wjlow/intro-to-scala.git
$ cd intro-to-scala/
Test if you have Java 8 already with java -version
.
macOS (using Homebrew)
$ brew tap caskroom/versions
$ brew cask install java8
We recommend that you install sbt
on your machine even though a portable runner is included.
The actual version of
sbt
used is specified per-project in yourproject/build.properties
file and the globalsbt
is merely used for bootstrapping your project. You should not get conflictingsbt
installations even if you have multiple Scala projects using different versions ofsbt
.
macOS (using Homebrew)
$ brew install sbt@1
Tip: Launching SBT might take some time, so we recommend using SBT's interactive shell to run commands, instead of lauching SBT for each command.
To run the sbt
shell from the global installation use:
$ sbt
To run the sbt
shell from the portable installation use:
$ ./sbt
Launch the SBT shell.
To only compile production code use:
sbt> compile
To compile production and test code use:
sbt> test:compile
To run all tests use:
sbt> test
The first time you run all the tests you will get a lot of errors! These tests will be fixed by you during the duration of the course.
In the meantime, run only a single test case at a time to keep things manageable.
To run a single test, use:
sbt> ~testOnly package.path.of.test.TestName
For example, to run only the fundamentals.level01.IntroExercisesTest test case, use:
sbt> ~testOnly fundamentals.level01.IntroExercisesTest
To run by test case name only, use:
sbt> ~testOnly *TestName
For example, to run the fundamentals.level01.IntroExercisesTest test case, use:
sbt> ~testOnly *IntroExercisesTest
The ~
watches for changes to your files and runs the command automatically. It's nice to use it to get really fast feedback as you are working on the exercises!
To stop watching changes through ~
, press Enter to return to the SBT shell prompt.
Reducing StackTraces Shown by Failed Tests
The first time you run a test case you will be greeted by a long list of StackTraces:
If you want to see a simplified view use the SimpleReporter with:
testOnly *TestName -- -C fundamentals.SimpleReporter
To launch into a Scala REPL with all production code use:
sbt> console
Once in the console, you can import your production code as such:
import package.objectname._
For example, to use functions defined in fundamentals.level01.IntroExercises:
scala> import fundamentals.level01.IntroExercises._
scala> add(1, 2)
res0: Int = 3
To launch into a Scala REPL with all production and test code use:
sbt> test:console
Type :q
to exit from the REPL and return to SBT.
To exit the SBT shell use:
sbt> exit
IntelliJ IDEA (recommended)
-
Install and open IntelliJ
-
If running IntelliJ for the very first time, it might ask you what plugin you want to install. Select Scala, otherwise install manually: Configure -> Plugins -> Browse Repositories -> Scala
-
Restart IntelliJ to activate the plugin
-
Open IntelliJ and open this project: Open -> Select directory where project is in
-
IntelliJ will detect this as an SBT project. Select
Import SBT Project
when prompted -
In the pop-up, choose SDK -> JDK -> Java 1.8 (this step might be confusing, feel free to reach out)
-
Wait for IntelliJ to refresh the project and download dependencies (this might take a while)
-
Compile project with Cmd + F9. If you get no errors, IntelliJ setup is all done!
Tips:
-
You can run individual tests by right-clicking and then selecting Run ...ExercisesTest (or just use SBT)
-
Use Cmd + P inside the argument of a function to see what type the argument needs to be.
-
Use Ctrl + Shift + P to find out the type of a highlighted expression.
Text Editor (Vim/Sublime/Atom/Emacs)
-
Open the current directory in an editor of your choice.
-
Open the SBT shell in a terminal window.
-
Compiling - See SBT instructions on how to compile code.
-
Running Tests - See SBT instructions on how to run tests.
-
Looking up Scala API - You can also search through the Scala APIs to find any necessary methods or use a documentation browser like Dash.
-
To explore the Scala API or any of the exercises use the Scala REPL - See SBT instructions on how to jump into the REPL.