Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/univalence/workshop-scala3
https://github.com/univalence/workshop-scala3
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/univalence/workshop-scala3
- Owner: univalence
- License: apache-2.0
- Created: 2022-07-07T12:11:10.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2023-04-12T13:58:50.000Z (over 1 year ago)
- Last Synced: 2023-04-14T16:23:29.786Z (over 1 year ago)
- Language: Scala
- Size: 141 KB
- Stars: 8
- Watchers: 4
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# Workshop Scala 3
The workshop in this project aims for you to discover some specific
features of Scala 3 language.You can the Github repo with
```shell
$ git clone https://github.com/univalence/workshop-scala3
```In this workshop, we will focus on:
* basic scala concepts for beginners: variables, constants, functions, control structure, class, trait, pattern-matching...
* Toplevel main function
* Block delimitation
* Enum type
* Extension method
* Contextual abstraction and typeclass
* Selectable (structural types)
* Metaprogramming with inline
* Opaque types## Exercises
The exercises in this workshop are based on Scala 3 macros. You just
have to read the comments and launch main functions to see what you
have to do.Once run, the output indicates you the section and exercise title, the
expressions to check inside each exercise and their result (error,
failure, or success). If the expression to check fails, the output
shows the line number in the file. If it has an error (it has thrown
an exception), you will see the line number of the wrong expression and
the exception (without the stacktrace).Do not hesitate to use a debugger or to print intermediate results.
The macros defined are:
* `section` blocks (a group of exercises) with a title
* `exercise` blocks with a title and an activation flag
* `check` that contains a boolean expression and check it
* `!?` explicit placeholders for a type definition to complete
* `??` or `???` or `|>?` explicit placeholders for a missing implementationIf an exercise is not activated, you can turn its flag to `true`, once
you want to solve it.## How to run
### Intellij
- Open the file you want to run (e.g `00-introduction.scala`)
- Near to the method with `@main` annotation, click on the green arrow to run the `main` method
- The output will be displayed in the `console`
### Visual Studio Code
When using Scala with VS Code, please consider installing the `metals` extension for VS Code which add IDE functionnality to VS Code (for `Scala` projects).
For this section, we will assume you have installed the `metals` extension. If not please go to the [SBT](#sbt) section.- When opening the project, a prompt suggestion to import the build will appear, click on `Import build` button
- Open the file you want to run (e.g `00-introduction.scala`)
- Above the `@main` annotation, click on the `run` button to run the `main` method
- The output will be displayed in the `TERMINAL` tab into the bottom panel
- Inside the temrinal tab, press any key to close the run prompt
For more details about `metals`, please refer to the official [documentation](https://scalameta.org/metals/docs/editors/vscode/#running-and-debugging-your-code).
### SBT
- launch the terminal: `$> sbt`
- execute the project: `$> run`
- The following message `Multiple main classes detected. Select one to run:` will be printed. Choose the number of the main method you want to run (e.g: `1`).
- The output will be displayed in the `console`
## Topics not seen in this workshop
We will not see this other topics:
* Union type: ability to express that an element can be of one type or
another (eg. `String | Null`)
* Intersection type: (eg. `A & B`)
* Trait parameter
* Export
* Parameter untupling: now, you can write `l.foldLeft(0)((sum, v) => sum + v)`
* and many more...## Dropped/deprecated features in Scala 3
Some features are deprecated and will be removed, or are already removed in Scala 3:
* Scala 2 macros -> inline and Scala 3 macros
* Do-while loop (no replacement)
* Procedure syntax (`def f() { ... }`) -> Use full function declaration syntax (`def f(): Unit = { ... }`)
* Package object -> Use top-level declaration
* Limit to 22, for number of parameters in functions and case classes, and for number of elements in tuples
* XML literals -> there is an XML string interpolation (`xml""`)
* Symbol (no replacement)
* `private[this]` -> `private`
* `protected[this]` (no replacement)
* Wildcard Initializer (`var a: A = _`) -> `var a: A = scala.compiletime.uninitialized`
* and some more...## Have fun!