Pekko
@Pekko (Pekko Pekko)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

関数型をもつ関数

解決したいこと

コードの処理の内容で
(Int) -> Int と{it * 2}がどのように処理されてるのか理解できません。
プログラミングの学習途中で行き詰まってしまい質問いたしました。
よろしくお願いいたします。

該当するソースコード

fun item(x: Int,y: (Int) -> Int) = y(z)
  item(5,{it*2})

自分で知っている範囲

(Int) -> Int 左側は引数の型 右側は戻り値の型
{it * 2} ラムダ式の処理

0

1Answer

どのあたりがわからないのか理解できていないので、うまい説明になっているかわかりませんが。

(Int) -> Int という関数の型は理解できているということですよね。
Int型の引数が一つあって、Int型の値を返す関数、ということです。

{it*2} というラムダ式は、意味としては {it -> it*2} と同じ、引数 it を2倍にして返す「無名の関数」だと思えばよいと思います。

item() の定義は(書いてあるのは y(z) ですが、おそらく y(x) の間違いですよね?)渡された関数に、渡された整数を渡して、その結果を返します。

つまり item(5,{it*2}) は、5*2 を計算して、10 を返すことになります。

  • x = 5
  • y = 引数の値を 2 倍にして返す関数 {it*2}
  • y(x) を計算
    • {it*2} の it に x を代入(つまり 5 を代入)して、結果 10 を求める

他にも、以下のような結果になると思います。

item(5, {it+2}) // => 7

item(5, {it*it}) // => 25
4Like

Comments

  1. @Pekko

    Questioner

    ご回答ありがとうございます。y(z)は y(x)の間違えです。
    {it -> it*2}ということが理解できていなかったことが分かりました。
    とても理解しやすかったです!!

Your answer might help someone💌