【Kotlin練習問題】rangeTo/..とcontains/inを用いた範囲のチェック

Kotlin

rangeToで値の範囲を作成する方法

KotlinではrangeTo()関数を用いることで、簡単に値の範囲を作成することができます。

rangeToの代わりに演算子”..“を用いることもできます。rangeTo()はよくin!inと共に使われます。

if (i in 1..4) {  //iが1から4の間 1 <= i && i <= 4と同じ コンパイラにはi in 1.rangeTo(4)と解釈される
    print(i)
}

ちなみに1..4で渡される値はIntRange型という範囲を指定する型になります。

containsで範囲に含まれているかを確認する

ある値(i)がその範囲内にあるかを確認するにはcontains、またはinという演算子を用います。

上記のコードをcontainsを用いて表現する場合、以下のようになります。

if ((1..4).contains(i)) {
    print(i)
}

問題

範囲指定を用いて、ある日付(date)がそれぞれ日付を表すfirstとlastの間(それぞれの値も含む)に含まれているかをチェックする関数を実装してください。

fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
    return TODO()
}

※MyDateクラスは以下のように定義されているものとします。

//MyDate.kt

data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> {
    override fun compareTo(other: MyDate): Int {
        if (year != other.year) return year - other.year
        if (month != other.month) return month - other.month
        return dayOfMonth - other.dayOfMonth
    }
}

ヒント

val list = listOf("a", "b")
"a" in list  // list.contains("a")と同じ
"a" !in list // !list.contains("a")と同じ

date1..date2 // date1.rangeTo(date2)と同じ

Kotlinでは上記コードのようにinはcontainsに、..はrangeToに対応します。

ヒント

答え

fun checkInRange(date: MyDate, first: MyDate, last: MyDate): Boolean {
    return date in first..last
}

[解説]

dateがIntRange型のfirst..lastに含まれているかをdate in first..lastでチェックしています。

戻り値はBoolean型です。

答え

その他の問題はこちらからどうぞ。

完全無料で通えるプログラミングスクール

プログラミング学習はどうしても一人だとつまづいてしまう時がきます。調べればわかることも少なくないですが、最初のうちは調べ方もわからないことが多いため、あまり効率的ではありません。

効率的かつ挫折せずにプログラミングを学習したい方はスクールを検討してみるのも一つの手です。

中には無料で通えるスクールや、就職保証をしてくれるスクールなどもあるので、きっとあなたの目的に応じて最適のスクールが見つかります!以下の記事で評判がよく特におすすめのスクールをいくつかピックアップしているので、スクール選びで後悔したくない方は御覧ください!

おすすめ書籍

Kotlinの文法をまず学びたい!という方には以下の書籍がおすすめです。Kotlinは日本語書籍がまだ豊富とは言えない状況ですが、細かく解説されており、Kotlin入門者のかたでもつまずくことなく学習できると思います。

実際にアプリを作りながら覚えていきたい!という方には以下もお勧めです。はじめに上の書籍で文法をさらっと学んでから取り組むのがお勧めです。

プロフィール

プロフィール
コードラボJP

大学卒業後SEに就職、現在は退職しフリーランスとして活動中。
『初心者でも挫折せずに一人でプログラミングを学べる』をモットーに、コードラボJPを開設
お問い合わせ等はcodelabsjp@gmail.comまで

コードラボJPをフォローする
タイトルとURLをコピーしました