Kotlinの公式ドキュメントを写経し、単一式にreturnを使うとエラーがでてしまう
解決したいこと
Kotlinのドキュメントを写経しながら読んでいますが、エラーが出てしまいます。
何がおかしいのか教えてください。
Kotlin公式ドキュメントのFunctionsの項目:
Single-expression functions(単一式関数)の中に以下の記述があります。
If you use a return statement inside an expression body, you must specify the return type explicitly:
(和訳)式本体内で return 文を使用する場合は、戻り値の型を明示的に指定する必要があります:
fun getDisplayNameOrDefault(userId: String?): String =
getDisplayName(userId ?: return "default")
エラーの状況
このコードをintellijに書くと、returnの部分に赤下線が表示されます。(下のハードコピーをクリックすると拡大し、見やすくなります。)

またコンパイルをすると以下のようにエラーを吐き出します。
Kotlin: Returns are prohibited in functions with expression body. Use block body '{...}'.
式本体を伴う関数では、戻り値は使用できません。ブロック本体「{...}」を使用してください。
本文やIDEの指摘の通りgetDisplayNameOrDefault関数の戻り値型はStringになっていますが、何がおかしいのでしょうか?
ちなみに、returnの語を削除してしまえば、正常に動きます。ただし、userIdがnullのときgetDisplayNameOrDefault関数の処理を途中で切上げることなく、getDisplayName関数へと処理が進んでしまいます。
試験用のコード
上のコードにあるgetDisplayName()関数は自分で想像して以下のように書きました。
// a.本文中のコード(単一式関数形式)
fun getDisplayNameOrDefault(userId: String?): String = getDisplayName(userId ?: return "default")
// b.returnを削除し、正常動作すると思われるコード
// fun getDisplayNameOrDefault(userId: String?): String = getDisplayName(userId ?: "default" )
// c.基本的な{}ブロックを用いた記述方法でのコード
// fun getDisplayNameOrDefault(userId: String?): String {
// return getDisplayName(userId ?: return "default")
//}
// 次の関数は想像して作りました。
fun getDisplayName(userId:String) :String {
println("getDisplayName関数を通過") // getDisplayName関数を通過
return userId
}
fun main(){
println( getDisplayNameOrDefault("abc")) // abc
println()
println( getDisplayNameOrDefault(null)) // default
// 動作結果の表示(プリントデバッグ)
// bのreturnを削除し、正常動作すると思われるコードを利用した時
// getDisplayName関数を通過
// abc
//
// getDisplayName関数を通過
// default
// cの基本的な{}ブロックを用いた記述方法でのコードを利用した時
// getDisplayName関数を通過
// abc
//
// default
}
ご教示のほど、よろしくお願いします。
