メソッド直後のクロージャって何してるの?笑 [Swift]

Swift

どうも〜はっち〜です🍯

早いもので、Swiftの勉強を初めて1ヶ月が経ちました!

プログラミングを勉強していく上で、皆さんも様々な疑問が浮かんでると思います

そして今回は!

はっち〜が直近で理解に苦しんだ、メソッド直後のクロージャについて話していきたいと思います😇

スポンサーリンク

はじめに

メソッド直後のクロージャは一体何だ?と言う疑問を解消するために私が行ったことですが

  1. Jump to Definition で定義を確認する
  2. Qiita,Teratailで同じ質問が無いか調べる
  3. いろんなキーワード検索を行う

の流れで疑問点を調べました🍯

調べていくなかで、自分なりに納得のいく解釈ができました

ただ私、Swiftど素人なので、勘違いもあるかも知れません🙇‍♂️

もっと成長したら、絶対リライトします笑

クロージャって?

読者さん
読者さん

はっち〜そん何知ってるて!笑

という方は、次の見出しに進んでください🍯

ただ、自分の復習も兼ねて、素人なりの簡単なクロージャのおさらいをしたいと思います!

単語の説明

まずは、クロージャについて文章で簡単に説明しますね✍️

  • 名前が付いていないメソッド
  • メソッドの引数として利用されがち
  • 他のプログラミング言語でいうところの無名関数

この記事は、何度も言いますが、超素人が書いているので、ほんとにざっくりいきますよ笑 

ぶっちゃけ、初学者の私が最初から全てを理解できるわけないですし、今はこんなもんなんだ位でいきます👌

ガンガン進みたいんですよね笑

基本文法

続いて、クロージャの基本的な書き方を紹介してきます!

//クロージャ基本形

{(引数名1:引数の型,引数名2:引数の型..,引数名n:引き数の型) -> (戻り値の型) in
  処理
  return 戻り値
}

//例
{(num1:Int, num2:Int) -> Int in
//足し算を行う(処理)
let result  = num1 + num2

//値を返す
return result
<br>はっち〜

はっち〜

中カッコが先頭にあるとなんか変な感じするよね笑

ちょっと論点がズレるんですけど、私と同じくクロージャでつまづいた人って、短縮形が沢山あるせいだと思うんですよね笑

今回のメインの話題ではないので、クロージャの省略形については外部サイトに丸投げします笑

このサイトで超初心者の私でも、クロージャの短縮形を分かりやすく解説されているのでぜひ🍯

メソッドに引っ付くクロージャ

名称

クロージャの意味と、基本文法はおさらいできたので、いよいよ今回の論点

メソッド直後に引っ付いたクロージャを説明していきたいと思います🍯

まずはじめに、メソッド直後につくクロージャには

  • 後置クロージャ
  • Traling Closure

という名称がついています

はっち〜
はっち〜

私はこの名称自体を知らなかったから、調べるのが大変だったよ笑

ぶっちゃけ、名称知らない!って言う方がこのサイトにたどり着つと思います笑

なので、この記事を読んでまだ納得できなかった場合、先程あげた名称で検索することを強くオススメします!

また、この記事では、メソッド直後に引っ付いてくるクロージャのことを統一して

後置クロージャ」と呼びますね🍯

使用される場面

この後置クロージャの使用場面は

メソッドの最後引数がクロージャ

だった場合です

どういうことかを、私が実際に混乱したコードの画像を見つつ解説していこうと思います

コードの内容は重要ではないので、最初の1,2行目だけに注目してください

(注意:in内の処理が気になる人もいるかもなので全体を載せてます)

要するにこの箇所

に注目するとaddDocumentメソッドの直後に{で始まるクロージャが、、、

クロージャのみに注目すると

{(error) in ~(処理) }

の部分

そして、はっち〜は思った

はっち〜
はっち〜

いやいやw

メソッドの引数部分()の中にクロージャ入ってへんやん!!

皆さんもそう思いませんか?笑

読者さん
読者さん

メソッドの最後の引数は、Data型の”data”のはずよ!

って声が聞こえてきます笑

最後の引数にいるはずのクロージャはどこへ?

結論から言うと、省略されてしまったのです😇

はっち〜
はっち〜

まじでさあああ

省略してかけたら便利だけど、初見じゃどうしていいか分からないからあああ笑

心の声が漏れてしまいました笑 解説を続けます

Xcodeが自動的に、この後置クロージャの形に変換する前の状態が次の画像となっています🍯

お! 引数”data”の後ろにcompletionという引数が追加されてますね!

これがクロージャです

つまり、このクロージャを省略して、引数部分(引数リスト)の外側でクロージャを書いているのです

この書き方こそが、後置クロージャなのです!!

付け加えると

引数部分でクロージャを書いてもいいけど、引数リスト()の外でクロージャを書いた方が見やすいよね! 

見やすい書き方を後置クロージャって名前にしましょう!

と言うことです🍯

まだまだわからん!と言う方へ、こちらに後置クロージャを理解するために参考にしたサイトを置いておきます

後置クロージャの引数

もうすでにパンク寸前だとは思いますが、こんな疑問を持ちませんでしたか?

読者さん
読者さん

クロージャの引数”error”はどこから入ってきたの??

まじで、この疑問が沸いた人と友達になりたい笑

どうやら、今回の画像で言うと

addDocumentメソッドに、クロージャ以外の引数が渡され、その返り値がクロージャの引数となっていると私は解釈しました🍯

図で説明すると

こんな感じ🤔

このaddDocumentの中身を調べてみても確認できなかったので

詳しい処理は分かりませんでしたが、この考えだとクロージャの引数に何が入ってくるのか、腑に落ちませんか?🍯

はっち〜
はっち〜

(error)の中に入ってくるとしたら、正直返り値くらししかないよね、、、笑

まとめ

最後に本記事のまとめをしていきましょう!

1.メソッド直後のクロージャは

後置クロージャ」と言う

2.後置クロージャは、引数リストの最後の引数にクロージャが来た際に用いられるクロージャの記述方法

3.後置クロージャの引数は、メソッドの返り値が入ってきていると言うはっち〜の解釈

今回の内容は、頭が痛くなるような内容でしたが最後まで読んで頂きありがとうございます🍯

最後に

プログラミングって本当に短縮形が多いですし、初見だと自分が知っていることでも、全く別物に見えますよね笑

また、そういった疑問の答えを見つける検索能力も大切ですが、質問できる機会もなかなかないですし困りますよね笑

以前の記事で、プログラミング初心者の質問はどこですれば良いか?

また、その質問サイトで実際にあった恐怖体験をご紹介していますので、是非読んで見てください🍯

それではまた次回お会いしましょうブーン🐝

コメント

タイトルとURLをコピーしました