Pattern matching
Programming languages that support algebraic data types often support a set of features to work with fields of composite types or variants of a type. These features are essential in defining functions to operate on different fields or variants in a type-safe manner.
One such feature is called pattern matching, that enables us to define functions that operate differently on each of a type's variants and extract individual fields from a composite type while maintaining the language's type safety guarantees.
In fact, the compilers of many languages with pattern matching will issue warnings or errors if we do not handle all of a type's fields or variants properly. These warnings help us write safer and more robust code.
The following example presents simple pattern matching with a switch statement:
let theTeam = MLSTeam.montreal switch theTeam { case .montreal: print("Montreal Impact") case .toronto: print("Toronto FC") case .newYork: print("Newyork Redbulls...