明らかに、引数がある場合、値が変更可能なオブジェクトに依存する場合、または値が特性メンバーに依存する場合、def を使用する必要があります。また、式が例外をスローする可能性がある場合は、val を使用できません。しかし、どちらも当てはまらない場合はどうなりますか? より具体的には、そのような状況で def を使用する理由はありますか? val (式が例外をスローしない場合) と lazy val (式が例外をスローする可能性がある場合) を使用することをお勧めしますか?
例えば:
class FifthElement(seq: Seq[Element]) {
def hasFifthElement = seq.length > 5 // is it better to use val than def?
def fifthElement = seq(5) // is it better to use lazy val than def?
}