Functions without () are usually used to express functionality without side effects, as @Tomasz noted (for example, the length of a string - if you have the same string, the length will be the same)
If you define a function without parentheses, you cannot use them when calling a function:
scala> def fun = "x" fun: java.lang.String scala> fun res0: java.lang.String = x scala> fun() <console>:9: error: not enough arguments for method apply: (n: Int)Char in trait StringLike. Unspecified value parameter n. fun() ^ scala> def fun() = "x" fun: ()java.lang.String //now you may use () or may not - it is up to you scala> fun res2: java.lang.String = x scala> fun() res3: java.lang.String = x
source share