Fixed-Size Data
Data Modeling
Sigh, So Sorry :(
Code
Instructions to Process Data
String Templates
What are Functions?
Conditional Code
Expressions and Statements
Type-Driven Function Shape/Templates
Higher-Order Functions (HOFs): Taking in and Producting Functions
Design
Designing Programs with Functions and Data
Type-Driven Testing
Designing Interactive Programs (without reactConsole)
Designing Interactive Console Programs with reactConsole: Overview
Designing Interactive Console Programs with reactConsole: Doubling
Designing Interactive Console Programs with reactConsole: Valid Number
Designing Interactive Console Programs with reactConsole: Madlib
Arbitrarily-Sized Data
Introduction to Sequences
Common Abstractions
Integer Ranges and Progressions
Strings Revisited
Lists
Files
Introduction to Files with the Khoury Library
Programming Paradigms
Overview
Methods of Representing and Iterating Over Lists
List Representations (Conceptually)
Representing a Linked List in Kotlin
Using a for-loop to Iterate Over Sequences
Type-Driven Recursion on Lists
Methods of Iteration for Problem-Solving
Conditional Looping
Divide-and-Conquer via Recursion
Creating Abstractions
The Process of Abstraction
Abstracting Types
Effective Coding with Abstractions
Representing Small Functions Effectively
Object-Oriented Programming
Ideas and Terms
Example Class with Member Functions
Interfaces
Inheritance
Data Classes ala Inheritance
Sealed Classes and Nullable Types ala Inheritance
Mutation
Ideas, Terms, Best Practices
Effective Design
Best Practices: Abstractions and Recursion
The Accumulator Design Pattern
Fold via the Lens of the Accumulator Pattern