- infix notation: the syntactic sugar which allows invoking an object method without using ".". E.g. "hi".toString -> "hi" toString
- method reference syntax: in a lambda expression, you can autoconnect the arg to the method call E.g. list.foreach(println)
- type aliases:
- function with named arguments: enable you to specify an argument for a particular parameter by associating the argument with the parameter's name rather than with the parameter's position in the parameter list
- function with default values: allows specification of a default value for a function's argument
- primary constructor
- idempotent function: results remain unchanged when the function is applied more than once. E.g. toUpperCase
- pure function
- companion object: an object that accompanies the class with the same name. The static fields are always separated from the non-static by using this pattern.
- "apply" method
- Linearization: the process of solving duplicate methods in traits (goes right to left)
- expression: returns a value
- statement: carries out an action
- for comprehension
- case classes
- type aliases/aliasing imports
- native xml support
- either/try
- tail recursion
- implicits
- ranges