LoginSignup
1
0

More than 3 years have passed since last update.

拡張関数って、いつ使うの?(初心者向け)

Last updated at Posted at 2020-08-29

自分が学んだときに思った疑問

  • いつ使うのか?
  • そもそも拡張関数って、 なんで必要なの?

業務上で使うことがあり、「あ、そのときに使うのか」といったアハ体験的なことを感じたので、
その体験を言語化(アウトプット)をするために投稿しました。

ではでは、早速・・・

拡張関数って何?(なぜ、必要なのか?)

  • 既存のクラス(String, Int, 自分が作ったクラス)に対して、関数を追加することができる
  • クラスの継承する必要がない。
  • 新たなクラスを作成する必要がない

いつ使うの?

  • 標準クラスにない処理を作る場合

実装(コードで示すと・・・)


fun String.listSplitStr(): List<String>{
    return this.split("").filter { it != "" }
}

fun main(){
    val str = "アイウエオ"
    println(str.listSplitStr()) //-> [ア, イ, ウ, エ, オ]
}

新しい関数としての処理は、

  • String型の値を一文字ずつに分割する処理(処理自体は、競技プログラミングで使われているかも!?)

それで???(単純な関数にした方が楽ではないか?)

はい・・・・・。
実は、今回作った関数は、こうやって単純に新しい関数を作って行うことも可能なのです。


fun listSplitStr(str: String): List<String>{
    return str.split("").filter { it != "" }
}

fun main(){
    val str = "アイウエオ"
    println(listSplitStr(str)) //-> [ア, イ, ウ, エ, オ]
}

しかし、これでは、

  1. 引数を必ず入れないといけない
  2. 単純な関数なので、変数名(中身: List型、Map型など).メソッド名で使うことができない

※ 3に関しては、思わない人もいると思う。ドット.をつけられるだけだから

一回の処理、使われるクラスが少ない場合は良いが、何度も使用するとなると、使いやすさに問題が出てきそうな感じがする

拡張関数を使えば、ドット.で書くこともできて、型が合えば、すぐにクラス関係なしに使うことができるので、利用しやすいと思えた。

何が「アハ体験」だったのか?

Kotlinの data class を使った拡張をした時に、ドット .で関数を呼ぶことができたことが、「アハ体験」でした。

今までは、拡張関数を使用せずにprivate関数を作ったりして、処理を作成していました。


data class Splitlist(
    val str: String
)

private fun listsplit(splitlist: Splitlist): List<String> {
    return splitlist.str.split("").filter { it != "" }
}

fun main(){
    val str = Splitlist("アイウエオ")
    println(listsplit(str))
}

しかし、拡張関数を利用することで、以下のような形にすることができます。

data class Splitlist(
    val str: String
)

fun Splitlist.listsplit(): List<String> {
    return this.str.split("").filter { it != "" }
}

fun main(){
    val str = Splitlist("アイウエオ")
    println(str.listsplit())
}

大きな違いはほとんどないですが、個人的には

  • ドット .で処理を作成することができたのが、わかりやすい・見やすいと思えました。

まとめ

  • 「学んだが、どこで使えば良いのかわからない」ことを一つ、わかるようになり良かったと思えました。
  • 実際の開発では、他の人や規則(ユーティリティクラスなど)があるので、これが良いとは言えませんが、使える知識が一つ増えたことで、使い分けをすることができるようになったのは,良かったことではないかなと思っております。(自己満足!!!:sunglasses:)
1
0
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0