langyizhao
Posted on December 2, 2021
Feature | Kotlin | Scala |
---|---|---|
Function Keyword | fun | def |
Nullability | Default not nullable except by adding ? at the end of variable type | Null is discouraged, but no hard check |
Null Check | Use ?. and/or ?: | Use Option |
Lambda/Anonymous Functions | Need to be surrounded with {} | Can be used anywhere |
Covariant | [out T] | [+T] |
Contravariant | [in T] | [-T] |
Pattern Matching | (partial) when statement | (full) match/case |
Default Case | else -> |
case _ => |
Loop a Range | i in 1..10 step 2 (closed) i in 1 until 10 step 2 (half-closed) | i <- 1 to 10 by 2 (closed) i in 1 until 10 by 2 (half-closed) |
Read File into Strings | File(fileName).useLines { it.toList() } | scala.io.Source.fromFile("file.txt").mkString |
For Comprehension (for/yield) | No Equivalent | Supported |
Companion Object |
companion object keyword inside class |
object keyword besides class |
New Immutable Sequence | listOf("one", "two", "one") | Seq("one", "two", "one") |
New Immutable Set | setOf("one", "two", "three") | Set("one", "two", "one") |
New Immutable Map | mapOf("key1" to 1, "key2" to 2, "key3" to 3, "key4" to 1) | Map("key1" -> 1, "key2" -> 2, "key3" -> 3, "key4" to 1) |
Top Level Functions (Package Level) | Supported | Will be supported in Scala 3 |
Extension Functions | fun Any?.toString(): String { if (this == null) {return "null"} return toString()} | extension (c: Circle) def circumference: Double = c.radius * math.Pi * 2 |
Operator Overloading | with operator infix keyword |
operators are just normal functions |
Regex String | "[0-9]".toRegex() | "[0-9]".r |
Tuple 2 | Pair(a, b) | (a, b) |
Tuple 3 | Triple(a, b, c) | (a, b, c) |
Destructuring Assignment | Objects with componentN() (data classes and collections) |
Objects with unapply() (extractors like case classes) |
Tail Recursive Function |
tailrec keyword |
@tailrec annotation |
Multiple Inheritance Resolution | Must override function in question manually | Later trait wins |
Class Inheritance | only with open or abstract keyword |
allowed |
The sealed keyword |
sealed class is something like enum | sealed types are confined in its source file |
Secondary/Auxiliary Constructors |
constructor keyword |
this() functions |
Reference Equality (the Java == ) |
=== |
eq |
Map Entry Literal | k to v |
k -> v |
💖 💪 🙅 🚩
langyizhao
Posted on December 2, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.