Although I’ve never seen Ruby cited as an inspiration for Kotlin, ever since I first ran into it, I couldn’t but notice how closely it resembles Ruby.
Kotlin shares many of Ruby’s niceties: you can do a lot with a very small amount of code; its standard library includes many useful tools that help you express your intent clearly; it can be used to create beautiful domain specific languages; it has an interactive shell; and it includes a number of functional constructs. Even its syntax is very Ruby-like at times — it has a block-lookalike!
So if they share many similarities, what does Kotlin bring to Rubyists? Quite a bit, actually.
If you find yourself needing to work or interoperate with a Java environment, Kotlin and its tooling were built to allow easy migration from Java. It’s very easy to incrementally move a codebase from Java to Kotlin, and there are even automatic translation tools. Yes, this also means that Kotlin can make use of all the niceties of the Java and JVM environment: just-in-time compilation, state-of-the-art garbage collection, first-class concurrency tooling, and its many, many libraries and frameworks. Additionally, it is also a first-class citizen and officially supported by Google as an alternative to Java when building Android applications.
For those seeking static validation, Kotlin is both statically typed and null-safe. Static typing ensures that a number of common errors happen at compile-time, when you’re preparing your code for execution, rather than at runtime (no more mysterious
NoMethodErrors!). Null safety means that the compiler can distinguish between nullable and non-nullable types, and is able to enforce that if before calling a method on something that can be
nil), you’ve checked if the value is not
null. Kotlin’s type system also includes a number of other niceties, such as zero-overhead inline classes that work as a kind of aliases to existing classes — e.g. you’ll be able to get a compile-time error if you try to assign a
Password value to an
Username field, even if both are actually compiled as
Last but not least, Kotlin can also be compiled — using LLVM — into an optimized machine code executable. This feature is still experimental, and it allows interoperating with compiled languages such as C/C++/Objective-C/Swift.
In short, although I remain a committed Ruby lover 😉, I believe that Kotlin deserves a place in every Rubyist’s toolkit.
Curious to check it out? At the 2019 edition of the awesome Ruby on Ice conference, I presented a workshop called “Kotlin for Rubyists”.
This workshop covered not only an introduction to the language, but also to the ecosystem: how to install it, which build system to use, testing, performance tooling, etc.
We also build several example applications (including a nice microservice). I’ve made available all of the example material on this git repository.
You can find the slide deck from the workshop embedded below:
Feedback is very welcome 😁