Book #15 - Programming in Scala
Programming in Scala, 5th edition
by Martin Odersky, Lex Spoon, Bill Venners, and Frank Sommers (2021) - PrePrint edition
Monday evenings - 7:10 pm pacific time
Meetup: https://www.meetup.com/Los-Gatos-Rust-Reading-Group/events/281371456
Zoom: https://us02web.zoom.us/j/84281187589
Artima: https://www.artima.com/shop/programming_in_scala_5ed
Source code (zip): https://booksites.artima.com/programming_in_scala_5ed/progInScalaExamples5Ed.zip
Notes: Scala 3
Note: On October 18, we plan to discuss whether or not we need to cover Chapter 24, per Patrick’s comment. It may be too much like a reference, not allowing for any meaty discussion. Let’s discuss
October 18 - I'm officially declaring the book DONE! We all did the first 23 chapters of 25, where the real meat was. The last two are a bit thin, or at least that seems to be the consensus here. Next book - “Functional Programming in Scala” (2nd edition)
Chapter 23 October 11, 2021 | Presenter |
---|---|
Why typeclasses? | Casey |
Context bounds | Patrick |
Main methods | Karthik |
Multiversal equality | Casey |
Implicit conversions | Amish |
Typeclass case study: JSON serialization | Amish - October 18 |
Chapter 22 September 27, 2021 | Presenter |
---|---|
The basics | Karthik |
Generic extensions | Amish |
Collective extensions | Amish - October 4 |
Using a typeclass | Casey - October 4 |
Extension methods for givens | Casey - October 4 |
Where Scala looks for extension methods | Karthik - October 4 |
Chapter 21 September 20, 2021 | Presenter |
---|---|
How it works | Patrick |
Parameterized given types | Patrick |
Anonymous givens | Casey |
Parameterized givens as typeclasses | Casey |
Given imports | Karthik - September 27 |
Rules for context parameters | Casey - September 27 |
When multiple givens apply | Amish - September 27 |
Debugging givens | Amish - September 27 |
Chapter 20 August 30, 2021 | Presenters |
---|---|
A quick tour of abstract members | Casey |
Initializing abstract vals | Casey |
Abstract types | Patrick - September 13 |
Path-dependent types | Casey - September 13 |
Case study: Currencies | Amish - September 13 |
Chapter 19 August 23, 2021 |
|
---|---|
Enumerated data types | Patrick |
Algebraic data types | Amish - August 30 |
Generalized ADTs | Casey - August 30 |
What makes ADTs algebraic | Vlad - August 30 |
Chapter 18 August 16, 2021 | Presenter |
---|---|
Functional queues | Amish |
Information hiding | Amish |
Variance annotations | Vlad |
Checking variance annotations | Vlad |
Lower bounds | Casey |
Contravariance | Casey - August 30 |
Upper bounds | Karthik - August 23 |
Chapter 17 August 9, 2021 | Presenter |
---|---|
Scala’s class hierarchy | Amish |
How primitives are implemented | Amish |
Bottom types | Vlad |
Defining your own value classes | Vlad |
Intersection types | Karthik |
Union types | Casey |
Transparent traits | Patrick |
Chapter 16 August 2, 2021 | Presenter |
---|---|
What makes an object mutable? | Karthik |
Reassignable variables and properties | Amish |
Case study: Discrete event simulation | Amish |
A language for digital circuits | Casey |
The Simulation API | Casey |
Circuit Simulation | Casey |
Chapter 15 July 26, 2021 | Presenter |
---|---|
15.1 Sequences | Casey |
15.2 Sets and Maps | Karthik |
15.3 Selecting mutable versus immutable collections | Karthik - August 2 |
15.4 Initializing collections | Amish - August 2 |
15.5 Tuples | Amish - August 2 |
Chapter 14 July 19, 2021 | Presenter |
---|---|
List literals | jonnie |
The List type | jonnie |
Constructing lists | jonnie |
Basic operations on lists | Patrick |
List patterns | Patrick |
First-order methods on class List | Casey |
Higher-order methods on class List | Casey |
Methods of the List object | Amish - July 26 |
Processing multiple lists together | Amish - July 26 |
Understanding Scala’s type inference algorithm | Casey - July 26 |
Chapter 13 July 12, 2021 | Presenter |
---|---|
A simple example | Casey |
Kinds of patterns | Casey |
Pattern guards | Karthik |
Pattern overlaps | Karthik |
Sealed classes | Vlad |
Pattern matching Options | Vlad |
Patterns everywhere | Amish |
A larger example | Amish |
Chapter 12 June 14, 2021 | Presenter |
---|---|
Putting code in packages | jonnie |
Concise access to related code | jonnie |
Imports | Casey |
Implicit imports | Casey |
Access modifiers | Amish |
Top-level definitions | Karthik |
Exports | Karthik |
Chapter 11 June 7, 2021 | Presenter |
---|---|
How traits work | jonnie |
Thin versus rich interfaces | Karthik |
Traits as stackable modifications | Casey |
Why not multiple inheritance? | vlad |
Trait parameters | vlad |
Chapter 10 May 31, 2021 | Presenter |
---|---|
A two-dimensional layout library | John |
Abstract classes | John |
Defining parameterless methods | John |
Extending classes | Casey |
Overriding methods and fields | Casey |
Defining parametric fields | Casey |
Invoking superclass constructors | Casey |
Using override modifiers | Casey |
Polymorphism and dynamic binding | Karthik |
Declaring final members | Karthik |
Using composition and inheritance | Karthik |
Implementing above, beside, and toString | Casey |
Defining a factory object | Vlad |
Heighten and widen | Vlad |
Putting it all together | Vlad |
Chapter 9 | Presenter |
---|---|
Reducing code duplication | Amish |
Simplifying client code | Casey |
Currying | Amish |
Writing new control structures | Casey |
By-name parameters | Casey |
Chapter 8 May 3, 2021 | Presenter |
---|---|
Methods | John |
Local functions | John |
First-class functions | Casey |
Short forms of function literals | Casey |
Placeholder syntax | Casey |
Partially applied functions | Amish |
Closures | Amish |
Special function call forms | Vlad |
Tail recursion | Vlad |
Chapter 7 April 19, 2021 | Presenter |
---|---|
If expressions | John |
While loops | John |
For expressions | Vlad |
Exception handling with try expressions | Amish |
Match expressions | Vlad |
Living without break and continue | Amish |
Variable scope | Amish |
Refactoring imperative-style code | Vlad |
Chapter 6 April 12, 2021 | Presenter |
---|---|
A specification for class Rational | Karthik |
Constructing a Rational | Karthik |
Reimplementing the toString method | Karthik |
Checking preconditions | Amish |
Adding fields | Amish |
Self references | Amish |
Auxiliary constructors | Casey |
Private fields and methods | Casey |
Defining operators | Casey |
Identifiers in Scala | Vlad |
Method overloading | Vlad |
Extension methods | Vlad |
A word of caution | Vlad |
Chapter 5 April 5, 2021 | Presenter |
---|---|
Some basic types | Amish |
Literals | Amish |
String interpolation | Amish |
Operators are methods | Amish |
Arithmetic operations | Amish |
Relational and logical operations | Vlad |
Bitwise operations | Vlad |
Object equality | Vlad |
Operator precedence and associativity | Vlad |
Rich operations | Vlad |
Chapter 4 April 5, 2021 | Presenter |
---|---|
Classes, fields, and methods | Casey |
Semicolon inference | Casey |
Singleton objects | Casey |
Case classes | Casey |
A Scala application | Casey |
Chapter 3 Next Steps in Scala March 29, 2021 | Presenter |
---|---|
Parameterize arrays with types | Casey |
Use lists | Casey |
Use tuples | Casey |
Use sets and maps | Amish |
Learn to recognize the functional style | Amish |
Transform with map and for-yield | Amish |
Chapter 2 First Steps in Scala March 29, 2021 | Presenter |
---|---|
Learn to use the Scala REPL | Vlad |
Define some variables | Vlad |
Define some functions | Vlad |
Write some Scala scripts | Vlad |
Loop with while; decide with if | Vlad |
Iterate with foreach and for-do | Vlad |
Chapter 1 March 22, 2021 | Presenter |
---|---|
1.1 A language that grows on you | Casey |
1.2 What makes Scala scalable | Amish |
1.3 Why Scala? | Vlad |
1.4 Scala’s roots | Casey |