A read-only property is declared with Kotlin’s `val` keyword. Code can read its value but cannot reassign it through the property declaration. Kotlin properties replace the usual field-and-accessor pattern with a compact, idiomatic syntax. section 2.2.1
A read-only property beside a mutable property
```kotlin class Person( val name: String, var isStudent: Boolean ) ``` `name` is read-only, while `isStudent` can be changed after construction: ```kotlin val person = Person("Bob", true) println(person.name) // Bob person.isStudent = false // allowed ``` The declaration of `name` provides a getter but no setter. Kotlin still exposes that property to Java as `getName()`, while the `isStudent` property is exposed through `isStudent()` and `setStudent(...)`. section 2.2.1
A `val` property is read-only through its public declaration; it does not necessarily mean that every related implementation detail is immutable. By default, Kotlin generates storage and a getter, and custom accessors can compute a property using different logic. section 2.2.1
