30歳高卒男子がプログラミングを習得してみるブログ -29ページ目

30歳高卒男子がプログラミングを習得してみるブログ

今年30歳になった高卒男子が自分で稼げるスキルを身に着けたいと思いたちSwiftのコードを学習しています。
最近はHTML/CSSとJavascriptをやってます。そのうちまた、スイフトもやろうと思ってます。

こんばんは、世界。

この前学習したfunctionのnestについてなんかわからないんだけど何がわからないのかわからない状態でモヤモヤしてたのでもう一回考えてみようと思います。

検索して出てきた情報もかいつまみながらやってみます。

 

func makeIncrementer() -> ((Int) -> Int)

{

    func addOne(number: Int) -> Int {

        return 1 + number

    }

    return addOne

}

var increment = makeIncrementer()

increment(7)

 
モヤモヤコードはこれですね。
最後の行の"increment(7)"で変数をあたかも関数のように扱ってますね。
その一個上の行で"var increment = makeIncrementer()"と書いてfunctionである"makeIncrementer"を変数"increment"に代入していますね。
この時、"increment"の型を明示すると"var increment: (Int) -> Int; makeIncrementer()"となるらしいです。
ぼくがこのコードで一番難解だと思ったのは"((Int) -> Int)"の部分です。
これって"func makeIncrementer()"の中にある"func addOne(number: Int) -> Int"が"func makeIncrementer"に返す値の型が(Int) -> Intだから"makeIncrementer"に返ってくる値も"((Int) -> Int)"になっているのかなと思いましたけどなんかあんまり腑に落ちないですね。
 
もう少し腑に落ちる答えを考えて探してみたいと思います。