スライドショー

【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

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

かい

かい

日向徹かこよすぎか

[email protected]