こんにちは!リンコですピヨ!この記事では自分の勉強の復習もかねて、Kotlinでのパッケージを記述する方法を解説するピヨ!
この第39章では、プログラミング言語であるKotlinのパッケージについて、一緒に勉強していきましょう。
この記事を読めばプログラミング未経験の方も、Kotlinのパッケージについて1つ1つ理解しながら勉強できると思うので、是非最後まで読んで頂ければと思います。
※この記事で出てくる「サンプルコード」は、記述が長く画面からはみ出ている場合がありますが、横にスライドすると表示されるのでご安心ください。
【Kotlin】パッケージとは?
まず、そもそもパッケージとは何なのかについて勉強していきましょう。
コードをグループ分けするためのもの
Kotlinのパッケージは、複数のコードをグループ分けするために使うものになります。
パソコンをよく使う方ならわかると思いますが、デスクトップのファイルやブラウザのブックマークを同じカテゴリにフォルダ分けするイメージです。
コードの先頭にパッケージと明記する
Kotlinのそれぞれファイルのコードの先頭に「パッケージ」ということを明記しておくことで、ファイル毎にカテゴリ分けして特定のグループに属しているものと明確にすることができます。
詳しくは、実際にコードを記述していきながら勉強していきましょう。
ファイルの先頭に「パッケージ」ということを記述することで、ファイルをグループ分けすることをパッケージというピヨ!
【Kotlin】パッケージを使ってみよう
では実際にパッケージを使ったコードを記述してみましょう。
パッケージの書式
パッケージの書式は以下のようになります。
package パッケージ名
ファイルの先頭に上記のように記述することで、ファイルをカテゴリ毎に分けられるようになります。
実際にパッケージを使ってみよう
では実際にパッケージを使ったコードを記述してみましょう。
サンプルコード
以下のサンプルコードでは、以前の記事に出てきたBird、Rinko、Sparrowのクラスが全て「鳥関係」というところから、パッケージを使って「birds」という同じグループに分けているていで、Rinkoクラスのみを記述しています。
package birds class Rinko (color: String) : Bird(color) { override fun fly(d: Double) { distance = distance + d println("${color}のリンコが飛んでる!パタパタ!") println("飛んだ距離は${distance}です。") } }
解説
パッケージは上記のコードのように、カテゴリ分けしたいそれぞれのファイルの先頭行に「package パッケージ名」と記述します。
今回であれば、全てのクラスが「鳥」なので「package birds」としました。
またパッケージ名は、自由につけることができます。ただし誰が見てもわかりやすい名前にしましょう。
ユニークなパッケージ名にするには?
ただし上記のようなパッケージ名だと、オープンソースのコードを参照しながらプログラムを組んでいる時に名前がかぶってしまい、Kotlinのコンパイラが「どっちを参照したらいいの?」となってしまう可能性があります。
こういった時に、どこの誰が作ったパッケージなのかをプログラマがKotlinに明示する必要があります。
一般的には、インターネットのドメインは「ユニーク」なもので同じドメインを持っている人がいないことから、会社が持つドメインを逆さにしたものをパッケージ名に使うことが多いです。
サンプルコード
以下のサンプルコードでは、この記事のサイト「ことすた」のドメインの「kotlin-study.com」を使ってパッケージ名にしています。
package com.kotlin-study.birds open class Bird(val color: String) { var distance = 0.0 open fun fly(d: Double) { distance = distance + d println("鳥が${d}km飛びました。") println("飛んだ距離の合計が${distance}キロになりました。") } }
解説
ことすたのドメインは「kotlin-study.com」なので、逆さにして「com.kotlin-study」としました。
その後に「.birds」とパッケージ名を付けています。このようにすることでユニークなパッケージ名になり、誰ともかぶることはなくなりました。
一般的には自信が持つドメインを逆さにしたものをパッケージ名に使うことが多いピヨ!
【Kotlin】パッケージ内のクラスをインポートする2種類の方法
続いて、パッケージ内のクラスをmain関数でインポートして使う方法を、2種類勉強していきましょう。
特定のパッケージをインポートするにも、パッケージ名を記述必要があります。
インスタンス生成時に記述する
まずはインスタンス生成時に記述する方法を勉強していきましょう。
サンプルコード
以下のサンプルコードは、上記で使ったRinkoクラスのパッケージをインポートして、Rinkoクラスのfly関数を呼び出すコードです。
fun main(){ val rinko = com.kotlin-study.birds.Rinko("黄色") rinko.fly(5.0) }
解説
このパッケージをインポートする方法では、インスタンスを生成する際のクラス名の前に、該当のクラスのパッケージ名を記述しています。
このコードだと、Rinkoクラスの手前に「com.kotlin-study.birds.」という風にパッケージ名を記述していますね。
ただしこの方法だと、Rinkoクラスを参照するたびにパッケージ名を記述する必要があるので、タイピング量が増えてめんどくさいですね。
ファイルの先頭に「import インポートしたいパッケージ名.クラス」と記述する
続いて、ファイルの先頭にインポートしたいパッケージの名前を記述する方法を勉強しましょう。
サンプルコード
以下のサンプルコードも基本的には上記と同じですが、パッケージのインポート方法が先程とは違います。どう違うか見てみましょう。
import com.kotlin-study.birds.Rinko fun main(){ val rinko = Rinko("黄色") rinko.fly(5.0) }
解説
この方法では、ファイルの先頭に「import パッケージ名.クラス名」という風に記述しています。
こうすることで「com.kotlin-study.birds」にある「Rinkoクラス」をインポートできていて、このファイルの中でRinkoという記述が見つかったら、全て「com.kotlin-study.birds」のパッケージにあるRinkoクラスを参照してくれるようになります。
さっきのインポート方法だといちいちパッケージ名を記述しないといけませんでしたが、今回のインポート方法だとかなり記述も簡潔になって便利ですね。
簡潔で便利なので、パッケージをインポートする方法としてこちらが主流になるので覚えておきましょう。
「import パッケージ名」とファイルの先頭に記述すると、該当ファイルがインポートできるピヨ!
【Kotlin】パッケージ内のクラスをまとめてインポートする方法
ここまでで特定のコードをグループ分けして、グループ分けしたクラスを必要な時にインポートすることができるようになりました。
しかし、もしとあるパッケージにクラスが複数あり、それらの複数のクラスをすべてインポートしたい場合、インポートする側で1つ1つインポート文を記述しなければならないのでしょうか?
こういった場合「ワイルドカード」という記述方法を使うことで、指定したパッケージにあるコードを全てインポートすることができます。
ワイルドカードを使った書式
以下がワイルドカードを使った書式になります。
import パッケージ名.*
先程は、パッケージ名の後ろにクラス名を記述していましたが、このようにパッケージ名の後ろに「.*」を記述することで、パッケージ内のクラス全てがインポートされることになります。
ワイルドカードを使ったコードを記述してみよう
では最後に、実際にワイルドカードを使ったコードを記述してみましょう。
サンプルコード
以下のサンプルコードでは、パッケージ「com.kotlin-study.birds」をワイルドカードを使ってインポートしています。
import com.kotlin-study.birds.* fun main(){ val rinko = Rinko("黄色") val sparrow = Sparrow("グレー") rinko.fly(5.0) sparrow.fly(10.0) }
解説
上記のコードでは「ワイルドカード」を使って「birds」というパッケージの中身全てをインポートしています。
この記事ではBird、Rinko、Sparrowのクラスが全て「鳥関係」なので同じ「birds」というパッケージにグループ分けしているていでした。
その為「import com.kotlin-study.birds.*」の一文で以下のように記述したのと同じ意味を持ちます。
import com.kotlin-study.birds.Bird import com.kotlin-study.birds.Rinko import com.kotlin-study.birds.Sparrow
このように、パッケージ内のクラス全てをインポートしたい場合は、ワイルドカードを使うようにします。
またワイルドカードを使えば、クラスだけでなく関数もインポートできるので覚えておきましょう。
パッケージ内の全てのクラスや関数をインポートしたい時は「ワイルドカード(*)」を使うピヨ!
まとめ
この記事では、プログラミング言語であるKotlinのパッケージについて勉強していきましたが、いかがでしたでしょうか?今回の記事をまとめると以下のようになります。
- ファイルをグループ分けすることをパッケージと言う
- ファイルの先頭に「package パッケージ名」と記述する
- 他とかぶらないように、自身の持つドメインを逆さにしてパッケージ名に繋げる
- 特定のクラスをインポートしたい時は「import パッケージ名.クラス名」と記述する
- パッケージの中身のクラスや関数全てをインポートする場合はワイルドカード(*)を使う
今回勉強した「パッケージ」は難しくややこしいと思うので、何回も読み直してしっかり覚えておきましょう。
次回の記事では「可視性識別子」について勉強していくピヨ!
プログラミング未経験の方や入門レベルの方、Kotlinについて詳しくなりたい方は、また一緒に勉強するピヨ!
コメント