This is my own “re-telling” of the tour of Scala from the official Scala website. If you are wondering why another tour , it’s mostly because it was fun and informative. I hope you feel the same way.
You should be able to go through these in the order listed, with each building on previous topics. I’ve also linked to the original tour topics as well as added my own where I thought it might help.
- ScalaBasics - Scala has some surprising syntax for both Javaists and Rubyists. This is a crash course.
- UnifiedTypes - everything is an object. Even
- ScalaClasses - Scala is object-oriented.
- ScalaProperties - Scala intelligently handles so-called “getters” and “setters”…by not having them
- ScalaPackages - Scala allows code to be packaged for visibility and organization.
- ScalaObject - Scala has direct support for singleton objects.
- ScalaTraits - Scala allows multiple inheritance via mixins.
- ScalaGenerics - Scala allows parametrized types.
- ScalaAnnotations - Scala can use Java annotations.
- ScalaOperators - Scala’s flexible syntax lets you create your own operators.
- JavaIntegration - Scala can call anything that Java can.
- ScalaFunctions - Scala has strong support for functional programming.
- PatternMatching - Scala has an advanced
- FunctionCurrying - define a function that has received some of its parameters now, and will get the remainder later.
- CaseClasses - taking switch statements to a useful level.
- ExceptionHandling - Scala does have exceptions, but they are handled more simply than Java
- OptionType - Scala prefers a different way of handling null, by using the null object pattern
- SealedClasses - tightening up CaseClasses .
- XmlLiterals - Scala allows XML literals that are smarter than strings.
- ForComprehensions - don’t let the name confuse you; this is about Scala’s powerful
- TypeBounds - Scala’s generic types can be restricted and bound for (alleged) understandability.
- InnerClasses - Scala supports nesting classes within objects and other classes.
- ImplicitConversions - Scala can implicitly convert objects to other types.
- TypeDependentClosures - Scala has proper support for closures. Take that, Java!
- DefaultParameterValues - Scala 2.8 now supports default parameter values
- NamedParameters - Scala 2.8 introduced named parameters. Take that, Objective-C!
- ImplicitParameters - Scala can automatically pass parameters to methods that need them!
- TypeVariance - Scala supports more advanced generics/type parametrization via covariance and contra-variance. Your instinct is to run far away, but I think I’ve found a way to explain it.
- AbstractTypes - Scala supports type aliasing and abstract types as an alternative to generics/type parametrization.
- AdvancedScalaObjects - Scala’s singleton objects are quite powerful.
- DuckTyping - Scala supports duck typing. Take that, Ruby!
- ActorsAndConcurrency - Scala uses an actor/message-passing style of concurrency.
- TypeSpecialization - Scala 2.8 allows specialization of generics for primitive types.
- PackageObjects - Scala 2.8 provides a means for packages to include things other than just classes and objects.
- ExplcitlyTypedSelfReferences - This is like the final boss in Super Mario 3. Good luck.