Scala Cheatsheet
Scala Cheatsheet
Language
Thanks to Brendan O’Connor, this cheatsheet aims to be a quick reference of Scala syntactic constructions. Licensed by Brendan O’Connor under a CC-BY-SA 3.0 license.
variables | |
Good
|
Variable. |
Bad
|
Constant. |
|
Explicit type. |
functions | |
Good
Bad
|
Define function. Hidden error: without = it’s a procedure returning Unit ; causes havoc. Deprecated in Scala 2.13. |
Good
Bad
|
Define function. Syntax error: need types for every arg. |
|
Type alias. |
vs.
|
Call-by-value. Call-by-name (lazy parameters). |
|
Anonymous function. |
vs.
|
Anonymous function: underscore is positionally matched arg. |
|
Anonymous function: to use an arg twice, have to name it. |
|
Anonymous function: block style returns last expression. |
|
Anonymous functions: pipeline style (or parens too). |
|
Anonymous functions: to pass in multiple blocks, need outer parens. |
|
Currying, obvious syntax. |
|
Currying, obvious syntax. |
|
Currying, sugar syntax. But then: |
|
Need trailing underscore to get the partial, only for the sugar version. |
|
Generic type. |
|
Infix sugar. |
|
Varargs. |
packages | |
|
Wildcard import. |
|
Selective import. |
|
Renaming import. |
|
Import all from java.util except Date . |
At start of file:
Packaging by scope:
Package singleton:
|
Declare a package. |
data structures | |
|
Tuple literal (Tuple3 ). |
|
Destructuring bind: tuple unpacking via pattern matching. |
Bad
|
Hidden error: each assigned to the entire tuple. |
|
List (immutable). |
|
Paren indexing (slides). |
|
Cons. |
same as
|
Range sugar. |
|
Empty parens is singleton value of the Unit type. Equivalent to void in C and Java. |
control constructs | |
|
Conditional. |
same as
|
Conditional sugar. |
|
While loop. |
|
Do-while loop. |
|
Break (slides). |
same as
|
For-comprehension: filter/map. |
same as
|
For-comprehension: destructuring bind. |
same as
|
For-comprehension: cross product. |
|
For-comprehension: imperative-ish.sprintf style. |
|
For-comprehension: iterate including the upper bound. |
|
For-comprehension: iterate omitting the upper bound. |
pattern matching | |
Good
Bad
|
Use case in function args for pattern matching. |
Bad
|
v42 is interpreted as a name matching any Int value, and "42" is printed. |
Good
|
`v42` with backticks is interpreted as the existing val v42 , and "Not 42" is printed. |
Good
|
UppercaseVal is treated as an existing val, rather than a new pattern variable, because it starts with an uppercase letter. Thus, the value contained within UppercaseVal is checked against 3 , and "Not 42" is printed. |
object orientation | |
|
Constructor params - x is only available in class body. |
|
Constructor params - automatic public member defined. |
|
Constructor is class body. Declare a public member. Declare a gettable but not settable member. Declare a private member. Alternative constructor. |
|
Anonymous class. |
|
Define an abstract class (non-createable). |
|
Define an inherited class. |
|
Inheritance and constructor params (wishlist: automatically pass-up params by default). |
|
Define a singleton (module-like). |
|
Traits. Interfaces-with-implementation. No constructor params. mixin-able. |
|
Multiple traits. |
|
Must declare method overrides. |
|
Create object. |
Bad
Good
|
Type error: abstract type. Instead, convention: callable factory shadowing the type. |
|
Class literal. |
|
Type check (runtime). |
|
Type cast (runtime). |
|
Ascription (compile time). |
options | |
|
Construct a non empty optional value. |
|
The singleton empty optional value. |
but
|
Null-safe optional value factory. |
same as
|
Explicit type for empty optional value. Factory for empty optional value. |
|
Pipeline style. |
|
For-comprehension syntax. |
same as
|
Apply a function on the optional value. |
same as
|
Same as map but function must return an optional value. |
same as
|
Extract nested option. |
same as
|
Apply a procedure on optional value. |
same as
|
Apply function on optional value, return default if empty. |
same as
|
Apply partial pattern match on optional value. |
same as
|
true if not empty. |
same as
|
true if empty. |
same as
|
true if not empty. |
same as
|
0 if empty, otherwise 1 . |
same as
|
Evaluate and return alternate optional value if empty. |
same as
|
Evaluate and return default value if empty. |
same as
|
Return value, throw exception if empty. |
same as
|
Return value, null if empty. |
same as
|
Optional value satisfies predicate. |
same as
|
Optional value doesn't satisfy predicate. |
same as
|
Apply predicate on optional value or false if empty. |
same as
|
Apply predicate on optional value or true if empty. |
same as
|
Checks if value equals optional value or false if empty. |