 <p>Regarding your 2nd question: If you need cashing for <code>fullName</code>, you may and should do it explicitly:</p> <pre><code>class Client { val firstName: String val lastName: String val fullName = "$firstName $lastName" } </code></pre> <p>This code is equivalent to your snipped except that the underlying getter <code>getFullName()</code> now uses a final private field with the result of concatenation.</p>