Scala Learning Tree (for Java developers)

登録は簡単!. 無料です
または 登録 あなたのEメールアドレスで登録
Scala Learning Tree (for Java developers) により Mind Map: Scala Learning Tree (for Java developers)

1. Scope

1.1. private[this]

1.2. private[package]

1.3. private[<whatever>]

2. vals/vars

2.1. 'name:Type' instead of 'Type name'

2.2. equivalent to Java's final

2.3. immutability encouraged by default

3. Type Basics

3.1. Inference

3.1.1. With recursive functions

3.2. Type Ascription

3.2.1. e.g. val b = 2 : Byte

3.3. Any/AnyRef/AnyVal vs Object

4. Specialist Topics

4.1. Testing

4.1.1. Specs

4.1.2. ScalaTest

4.1.3. SUnit

4.2. Java Interop

4.2.1. Collections

4.2.2. Array and GenericArray

4.2.3. Generics (erasure)

4.3. Concurrency

4.3.1. threads

4.3.2. Actors

4.3.2.1. react/reply

4.3.2.2. reactors

4.3.2.3. lift/akka/scalaz

4.3.3. fork/join

4.4. 3rd Party Libs

4.4.1. scaladb

4.4.2. scalaz

4.4.3. scalax

4.4.4. akka

4.4.5. liftweb

5. notes on this map

5.1. Try not to mention any feature unless it's defined in terms of stuff above it on the list

5.1.1. Unless under 'To Be Organised', where anything goes!

6. Oddities and FAQs

6.1. null vs Option[]

6.2. null/None/Nothing/Nil

6.3. Tooling support

6.3.1. Build systems

6.3.2. IDEs

6.3.3. Code Coverage

7. To Be Organised

8. Advanced Functions

8.1. higher-typed functions

8.1.1. call by name

8.2. PartialFunction

8.2.1. From a match block

8.2.2. isDefinedAt

8.3. closures

9. New node

10. Variance in generics

10.1. Declaration vs Use-Site

10.1.1. ±notation

10.2. Co/Con/In-variance

11. Methods (defs)

11.1. Don't *require* parenthesis

11.2. multiple argument lists

11.3. Unit instead of void

11.3.1. '()' syntactic sugar

11.4. ': Unit' vs. not using '='

11.5. If single statement, don't require { braces }

11.6. Named arguments

11.7. Default arguments

11.8. Varargs and the _* notation

11.9. override is a required keyword, not an annotation

11.10. Exception checking is not forced

11.10.1. the @throws annotation

11.11. 'Nothing' subclasses everything

11.12. Nested/inner methods

12. packages and imports

12.1. _ instead of *

12.2. import anywhere

12.3. multiple package statements and resolution

12.4. import from an instance

13. Uniform Access Principle

13.1. How getters/setters work

13.2. Overriding defs with vals/vars

13.3. @BeanPropery and @BeanInfo

14. Objects and Friends

14.1. classes

14.1.1. Body is the primary constructor

14.1.2. Secondary constructors

14.1.3. val & var on params

14.2. Singletons

14.3. Companions

14.3.1. Singleton is provided via companion object

14.4. Traits

14.4.1. mixins

14.5. Case Class Basics

14.5.1. hashcode/equals/canEqual

14.5.2. args as vals

14.5.3. Constructing without 'new'

14.5.3.1. Postpone explanation of how this is achieved

14.5.4. toString

14.5.5. Postpone usage in pattern matching until pattern matching is introduced

14.6. Package Objects

15. First-Class Functions

15.1. apply()

15.2. passing as an argument

15.2.1. higher-typed

15.3. functions vs methods

15.4. anonymous functions

15.4.1. underscore (_) as a placeholder

15.5. Partial Application

15.6. Currying

15.7. Singleton as a Function

15.7.1. Using apply on a companion object - factory pattern

15.8. Anonymous => syntactic sugar

16. For Comprehensions

16.1. Simple for (i <- 0 to 10) {println i}

16.2. Multiple Generators

16.3. Using yield to return a collection of the same type as the input

16.4. Desugaring to map/filter/flatmap/foreach

17. Exception Handling

18. Patterns

18.1. binding

18.2. simple usage - assigning a tuple to 2 vals

18.3. match blocks

18.4. Matching on Structure

18.5. Matching on Type

18.6. Matching on absolutes

18.7. and case classes

18.7.1. sealed cases and exhaustive matches

18.8. catch-all with an undescore

18.9. Use in for comprehension

18.10. Extractors

18.10.1. unapply

18.10.2. unapplySeq

19. Tuples / Pair

19.1. a -> b syntactic sugar

19.2. (a,b) syntactic sugar

20. Collections

20.1. Mutable vs Immutable

20.2. Seq vs List vs Iterable vs Traversable

20.3. Maps

20.3.1. A map is a function

20.4. Lists

20.4.1. cons

20.4.2. head

20.4.3. tail

20.4.4. Nil

21. Basic Generics

21.1. [] notation

22. Implicits

22.1. Conversions

22.1.1. View Bounds

22.1.2. Pimp-My-Library

22.2. Parameters

22.2.1. Final Parameter List may be implicit

22.2.2. e.g Ordering[T] passed to sort method

22.2.3. Context Bounds as syntaactic sugar: foo[T: Ordered](a: Any) === foo[T](a: Any)(implicit ev1$: Ordered[T])

22.2.4. Poor Mans Typeclasses: http://lampwww.epfl.ch/~odersky/talks/wg2.8-boston06.pdf

22.3. Implicit Scope

22.3.1. Local members (vals/vars/object/defs) and Imported members

22.3.1.1. (Shadowed by name!)

22.3.2. Companion object of parts of expected type

23. Reflection

23.1. classOf[]

23.2. Manifest and ClassManifest

23.2.1. Passed with a Context Bound

23.3. instanceof