In Chapter 2, Kotlin Basics, we briefly touched on the Kotlin type hierarchy. The notion of a Nothing type was mentioned: a type that is the subtype of all other types, in a similar vein to how Any is a superclass of all types. The idea of a Nothing type is nothing new (pun intended) for those who have used a functional language, such as Scala. For those who are new to the idea, we will cover why such a type is useful.
The first use case is to indicate that a function would never complete normally. What we mean by normally is that it is not expected to return a value. It may intentionally perform an infinite loop, only ending when the process or thread is killed, or it may only return by throwing an exception. For example, the error function defined in the Kotlin standard library has the following implementation:
inline fun error(message: Any): Nothing = throw...