スライドショー

【Kotlin入門】mapの概念を理解して使い方をマスターしよう


Kotlinでmapの使い方がよくわからない
mapの種類がよくわからない

Kotlinでmapの使い方がそもそもよくわからなかったり、immutabilityについてよくわからず使いこなせないという方はいませんか?

こんにちは!エンジニアのかいです。Kotlinをこれから始めようとしている人、もしくは始めたての人であればプログラミングの基本であるmapについて悩んでいる人もいると思います。

そこで本日はKotlin初心者の方を対象にmapの使い方を基本的なところや、immutabilityについてなども詳しく解説していきます。

この記事はこんな人のために書きました。

  • Kotlinでmapの基本的な使い方を知りたい
  • mapの種類を理解して場面によってつかいわけたい

Kotlinのmapとは

さて、実際にmapの使い方を紹介していきたいところですが、中にはmapという概念についてよくわかっていない人もいると思うので簡単に説明しておきます。

Kotlinではmapと呼ばれていますが、他言語では、ハッシュや、辞書(ディクショナリ)と呼ばれています。これらは基本的にはKVS(Key Value Store)といってkeyとvalueを一つのセットにしてデータを管理しようというものです。

配列はindexと値をセットとしてデータを管理しますが、mapではそのindexがkeyにあたります。例えば{"name": "taro"}というKVSがあったら、基本的には"name"というkeyを指定して、"taro"というvalueを取り出します。

mapの種類を理解してよう

KVSはWebなどでも良く使われるのでmapについては少しプログラムを書いたことがある人ならだいたい分かっていただけたと思います。そこでKotlinのmapに焦点を戻していきましょう。

実はKotlinには大きく分けて2種類のmapがあります。その2つはimmutabilityという概念によって分けられていてこれはKotlinでは良く利用される概念なので理解しておきましょう。

immutabilityとは

immutabilityとは簡単に言えば、値が上書きできるか否かということです。

あれ、それはつまり定数か変数かということですか?という疑問も出ると思いますがそれは違います。

varかvalかということです。変数と定数、varとvalについて理解が浅い方はここで、ん?となる方もいると思うのでそれらの概念について説明しておきます。

まず大きい概念では、定数(const)と変数(variable)があります。そして変数の中に(var(mutable), val(immutable))があります。正確にはKotlinでは、定数(const)は変数の中のvalのなかにありますが、まあそこは今日は置いておきます。

そして、

const 常に同じ値。何回呼び出しても同じ値
variable
mutable
実装によって値が変わる
imuutable
最初に代入された値から変化しない。呼び出しごとに値を変えることは可能

というのがそれぞれの定義です。

つまりvalというのはこういうことですね。

fun test(s: String){
    val test = s
    println(test)
}


fun main() {
    test("hello")
    test("goodnight")
}
hello
goodnight

mutableなmap

さてimmutabilityについて分かったところで話を戻しましょう。mapにはmutableとimmutableがあるんでしたね。

mutableなmapはmutableMapOfという関数を利用して作成します。

immutableなmap

immutable、つまり読み取り専用なmapはmapOfという関数を利用します。

実際に使ってみよう

さて、説明はほどほどにして実際に使ってみましょう。まずは、mapの作り方です。

fun main() {
    val testmap = mapOf("name" to "taro")
    println(testmap)
}
{name=taro}

まずはミニマムでみてみましょう。このようにkey to taroといった風に"to"を使って作成するのは最初は馴染みがあまりないかもしれませんが使っていればすぐ慣れます。

fun main() {
    val testmap = mapOf("name" to "taro", 2 to "yuko")
    println(testmap["name"])
    println(testmap[2])
}
taro
yuko

このように、keyの値を使ってvalueを呼び出せることがわかりますね。

fun main() {
    val testmap = mapOf("name" to "taro", 2 to "yuko")
    testmap["name"] = "yuji"
}

また、先ほど説明した通りmapOfはreadOnlyなのでこのように値を変更することはできずコンパイルが通りません。次にmutableなmapについてもみていきます。

fun main() {
    val testmap = mutableMapOf("name" to "taro", 2 to "yuko")
    println(testmap["name"])
    testmap["name"] = "yuji"
    println(testmap["name"])
}
taro
yuji

このように、値が書き換えられていることがわかりますね。当然ですが、mutableMapOfの中身は変更することはできますが、testmap自体はvalなので上書きはできません。

fun main() {
    val testmap = mutableMapOf("name" to "taro", 2 to "yuko")
    println(testmap["name"])
    testmap["name"] = "yuji"
    println(testmap["name"])
    testmap = mapOf("name" to "yuji")
}

このようなコンパルは通らないということですね。

まとめ

さて、immutabilityに着目してmapの基本的な2種類の使い方を説明してきました。正しくコーディングすることで効率が良くバグの少ないプログラムを作ることができるのでしっかり違いを理解してつかいこなしていきましょう!

それでは!!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

かい

かい

日向徹かこよすぎか

[email protected]

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説