Kotlinは、2011年にJetBrains社が開発した静的型付けされたプログラミング言語で、Androidアプリケーション開発のために特に注目されています。Javaとの互換性があり、より簡潔で安全なコードを書くことができます。今回は、Kotlinの基礎について、解説していきます。
目次
Kotlinの基本構文
変数
Kotlinでは、変数を宣言する際にval
とvar
の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では、if
とelse
を使った条件式を使うことができます。また、条件式は値を返すため、三項演算子の代わりに使うことができます。
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には、数値、文字、文字列、ブール値などの基本データ型があります。
数値
数値型には、Int
、Long
、Float
、Double
、Short
、Byte
などがあります。型を明示的に指定しない場合は、コンパイラが適切な型を推論します。
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
インターフェースを実装したクラスを使ってマップを表現します。主に、HashMap
、LinkedHashMap
、SortedMap
、TreeMap
などの実装がありますが、通常は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の基礎- データ型からクラス、例外処理まで徹底解説