摘自官网
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 |