IT

Androidアプリを作る?Kotlin入門 - 基本概念とデータ構造について詳しく解説します

Kotlinは、2011年にJetBrains社が開発した静的型付けされたプログラミング言語で、Androidアプリケーション開発のために特に注目されています。Javaとの互換性があり、より簡潔で安全なコードを書くことができます。今回は、Kotlinの基礎について、解説していきます。

Kotlinの基本構文

変数

Kotlinでは、変数を宣言する際にvalvarの2つのキーワードがあります。valは読み取り専用の変数で、varは読み書きが可能な変数です。型推論があるため、型を指定する必要はありません。

val name: String = "John Doe" // 読み取り専用変数
var age: Int = 25 // 読み書き可能な変数

関数

関数はfunキーワードを使って定義します。引数は変数名の後にコロンをつけて型を指定し、関数の戻り値の型は、引数リストの後にコロンをつけて指定します。戻り値がない場合は、Unit型を指定するか、省略することができます。

fun greet(name: String): String {
    return "Hello, $name!"
}

fun displayAge(age: Int) {
    println("Your age is $age.")
}

条件式

Kotlinでは、ifelseを使った条件式を使うことができます。また、条件式は値を返すため、三項演算子の代わりに使うことができます。

val age = 18
val status = if (age >= 18) "adult" else "minor"
println("You are a $status.")

繰り返し処理

Kotlinでは、forループとwhileループを使って繰り返し処理を行うことができます。

for (i in 1..5) {
    println("Hello, Kotlin! $i")
}

var count = 5
while (count > 0) {
    println("Countdown: $count")
    count--
}

Kotlinの基本データ型

Kotlinには、数値、文字、文字列、ブール値などの基本データ型があります。

数値

数値型には、IntLongFloatDoubleShortByteなどがあります。型を明示的に指定しない場合は、コンパイラが適切な型を推論します。

val intNumber: Int = 42
val longNumber: Long = 42L
val floatNumber: Float = 42.0f
val doubleNumber: Double = 42.0

文字と文字列

Char型は、単一の文字を表します。文字はシングルクォートで囲まれています。String型は、文字列を表し、ダブルクォートで囲まれています。

val letter: Char = 'A'
val message: String = "Hello, Kotlin!"

ブール値

ブール値はBoolean型で、trueまたはfalseの値を持ちます。ブール値は、論理演算や条件判断に使用され、プログラムの制御フローを決定するために重要な役割を果たします。

val isTrue: Boolean = true
val isFalse: Boolean = false

コレクション

Kotlinでは、リスト、セット、マップなどのコレクションが用意されています。

リスト

リストは、順序付けられた要素のコレクションです。listOf関数を使ってリストを作成することができます。リストは変更不可能(イミュータブル)ですが、mutableListOf関数を使って変更可能(ミュータブル)なリストを作成することができます。

val immutableList = listOf(1, 2, 3)
val mutableList = mutableListOf(1, 2, 3)
mutableList.add(4)

セット

セットは、重複しない要素のコレクションです。setOf関数を使ってセットを作成することができます。セットもイミュータブルですが、mutableSetOf関数を使ってミュータブルなセットを作成することができます。

val immutableSet = setOf(1, 2, 3, 3)
val mutableSet = mutableSetOf(1, 2, 3)
mutableSet.add(4)

マップの基本

マップは、キーと値のペアで構成されるコレクションで、キーを使って値にアクセスすることができます。Kotlinでは、Mapインターフェースを実装したクラスを使ってマップを表現します。主に、HashMapLinkedHashMapSortedMapTreeMapなどの実装がありますが、通常はmapOf関数を使ってイミュータブルなマップを生成します。

マップの作成

イミュータブルなマップを作成するには、mapOf関数を使います。キーと値のペアをto演算子を使って指定します。

val map = mapOf("one" to 1, "two" to 2, "three" to 3)
println(map) // {one=1, two=2, three=3}

ミュータブルなマップを作成するには、mutableMapOf関数を使います。

val mutableMap = mutableMapOf("one" to 1, "two" to 2, "three" to 3)

要素の追加と削除

ミュータブルなマップでは、要素を追加したり削除したりすることができます。

要素を追加するには、putメソッドを使うか、インデックス演算子([])を使ってキーに対応する値を設定します。

mutableMap.put("four", 4)
mutableMap["five"] = 5
println(mutableMap) // {one=1, two=2, three=3, four=4, five=5}

要素を削除するには、removeメソッドを使い、削除したいキーを指定します。

mutableMap.remove("one")
println(mutableMap) // {two=2, three=3, four=4, five=5}

要素へのアクセス

マップから要素にアクセスするには、インデックス演算子([])を使ってキーを指定します。キーが存在しない場合、nullが返されます。

val value = map["two"]
println(value) // 2

キーが存在しない場合にデフォルト値を返すには、getOrElse関数を使います。

val defaultValue = map.getOrElse("unknown") { -1 }
println(defaultValue) // -1

マップの反復処理

マップに対する反復処理は、マップの各エントリ(キーと値のペア)に対して操作を実行するために使用されます。Kotlinでは、さまざまな方法でマップの反復処理を行うことができます。

forループを使った反復処理

forループを使ってマップのエントリを反復処理することができます。デストラクチャリング宣言を利用して、キーと値を別々の変数に代入することができます。

val map = mapOf("one" to 1, "two" to 2, "three" to 3)

for ((key, value) in map) {
    println("$key = $value")
}

forEach関数を使った反復処理

forEach関数を使って、マップのエントリを反復処理することができます。ラムダ式を引数として受け取り、エントリにアクセスすることができます。デストラクチャリング宣言を使用して、キーと値を別々の変数に代入できます。

map.forEach { (key, value) ->
    println("$key = $value")
}

keysとvaluesプロパティを使った反復処理

マップのキーだけを反復処理する場合、keysプロパティを使用できます。これは、マップ内のすべてのキーを含むセットを返します。

for (key in map.keys) {
    println("Key: $key")
}

同様に、マップの値だけを反復処理する場合、valuesプロパティを使用できます。これは、マップ内のすべての値を含むコレクションを返します。

for (value in map.values) {
    println("Value: $value")
}

継承

Kotlinでは、クラスの継承を使って、既存のクラスから新しいクラスを派生させることができます。openキーワードを使って継承可能なクラスを宣言し、:を使って継承を表現します。

open class Animal(val name: String) {
    fun makeSound() {
        println("$name makes a sound.")
    }
}

class Dog(name: String) : Animal(name) {
    override fun makeSound() {
        println("$name barks.")
    }
}

val dog = Dog("Buddy")
dog.makeSound()

拡張関数

Kotlinでは、既存のクラスに新しい関数を追加することができる拡張関数という機能があります。これにより、クラスのコードを変更することなく、新しい機能を追加することができます。

fun String.upperFirst(): String {
    return this[0].toUpperCase() + this.substring(1)
}

val name = "john"
val capitalized = name.upperFirst()
println(capitalized) // "John"

まとめ

今回は、Kotlinの基本構文やデータ型、コレクション、クラス、拡張関数などについて紹介しました。Kotlinは、Javaとの互換性がありながら、より簡潔で表現力豊かな言語であるため、開発者にとって魅力的な選択肢の一つです。これからもKotlinを学ぶきっかけになれると幸いです!

今後も、ITやDX、投資等に関する人生を豊かにして自由な時間を増やせるような情報を発信していきますので是非お楽しみに!

↓ オススメ記事 ↓

一番オールマイティな言語?Javaの基礎- データ型からクラス、例外処理まで徹底解説

サイトの外観を決める言語?CSS入門 - 基本概念とプロパティについて解説します

必須の言語?HTML入門 - ウェブページ構築の基本について解説します

-IT
-, ,