This is a library with Scala utilities for Computer Science teaching. The library is maintained by Björn Regnell at Lund University, Sweden. Contributions are welcome!
-
The api documentation is available here: http://cs.lth.se/pgk/api/
-
You can find code examples here: src/main/scala/introprog/examples
This repo is used in this course (in Swedish): http://cs.lth.se/pgk with course material published as free open source here: https://github.com/lunduniversity/introprog
If you have the Scala Build Tool version 1.5.2 or later then put this text in a file called build.sbt
scalaVersion := "3.0.0"
libraryDependencies += "se.lth.cs" %% "introprog" % "1.1.5"
When you run sbt
in terminal the introprog
package is automatically downloaded and made available on your classpath.
You can do things like:
> sbt
sbt> console
scala> val w = new introprog.PixelWindow()
scala> w.fill(100,100,100,100,java.awt.Color.red)
If you want to use Scala 2.13 then you need Scala 2.13.5 or later and these special settings in build.sbt
:
scalaVersion := "2.13.6"
scalacOptions += "-Ytasty-reader"
libraryDependencies +=
("se.lth.cs" %% "introprog" % "1.1.5").cross(CrossVersion.for2_13Use3)
For Scala 2.12.x and 2.13.4 and older you need to use the old version "1.1.4"
.
Download the latest jar-file from here: https://github.com/lunduniversity/introprog-scalalib/releases
Or from Maven central here: https://search.maven.org/search?q=a:introprog*
Or get any version from here: https://repo1.maven.org/maven2/se/lth/cs/
Put the jar-file on your classpath when you run the Scala REPL, for example:
> scala -cp introprog_3-1.1.5.jar
scala> val w = new introprog.PixelWindow()
scala> w.fill(100,100,100,100,java.awt.Color.red)
scala>
Put the jar-file on your classpath when you run your Scala app, for example:
> scala -cp "introprog_3-1.1.5.jar:." Main
If on Windows cmd/powershell use ;
instead of :
before the period.
With sbt
and git
on your path type in terminal:
> git clone git@github.com:lunduniversity/introprog-scalalib.git
> cd introprog-scalalib
> sbt package
This repo includes utilities to empower learners to advance from basic to intermediate levels of computer science by providing easy-to-use constructs for creating simple desktop apps in terminal and using simple 2D graphics. The utilities are implemented and exposed through an api that follows these guidelines:
- Use as simple constructs as possible.
- Follow Scala idioms with a pragmatic mix of imperative, functional and object-oriented programming.
- Don't use advanced functional programming concepts and magical implicit.
- Prefer a clean api with single-responsibility functions in simple modules.
- Prefer immutability over mutable state,
Vector
for sequences and case classes for data. - Hide/avoid threading and complicated concurrency.
- Inspiration:
- Talk by Martin Odersky: Scala the Simple Parts with slides here
- Principle of least power blog post by Li Haoyi
Areas currently in scope of this library:
- Simple pixel-based 2D graphics for single-threaded game programming with explicit game loop.
- Simple blocking IO that hides the underlying complication of releasing resources etc.
- Simple modal GUI dialogs that blocks while waiting for user response.