ループは、指定された条件が満たされている限り、同じコードブロックを複数回実行することができます。
ループは時間を節約し、エラーを減らし、コードをより読みやすくするために便利です。
while
ループは、指定された条件がtrueの間、コードブロックを繰り返し実行します:
while (condition) {
// 実行するコードブロック
}
以下の例では、カウンタ変数(i
)が5未満である限り、ループ内のコードが繰り返し実行されます:
var i = 0
while (i < 5) {
println(i)
i++
}
注意:条件で使用している変数を忘れずに増加させてください。そうしないと、ループは決して終了しません。
do..while
ループは、while
ループの変種です。このループは、条件がtrueかどうかをチェックする前に、コードブロックを一度実行し、その後条件がtrueである限りループを繰り返します。
do {
// 実行するコードブロック
}
while (condition);
以下の例では、do..while
ループを使用しています。条件がfalseであっても、コードブロックは条件がテストされる前に一度は必ず実行されます
var i = 0
do {
println(i)
i++
}
while (i < 5)
条件で使用している変数を忘れずに増加させてください。そうしないと、ループは決して終了しません!
if..else式を複数個書く代わりに、より読みやすいwhen
式を使用できます。
when
式は、実行するコードブロックを選択するために使用されます:
曜日の番号を使って、曜日の名前を計算します:
val day = 4
val result = when (day) {
1 -> "月曜日"
2 -> "火曜日"
3 -> "水曜日"
4 -> "木曜日"
5 -> "金曜日"
6 -> "土曜日"
7 -> "日曜日"
else -> "無効な日付。"
}
println(result)
// 出力: "木曜日"(dayが4の場合)
when
式は、Javaのswitch
文に似ています。
when
変数(この例ではday
)が一度評価されます。day
変数の値が各「ブランチ」の値と比較されます。else
を使用して実行するコードを指定します。上記の例では、day
の値が4なので、「木曜日」が表示されます。
Kotlinでは、数学で使う論理条件をサポートしています:
これらの条件を使って、異なる条件に基づいて異なるアクションを実行できます。
Kotlinには以下の条件分岐があります:
if
を使用して、指定された条件がtrueの場合に実行されるコードブロックを指定するelse
を使用して、同じ条件がfalseの場合に実行されるコードブロックを指定するelse if
を使用して、最初の条件がfalseの場合にテストする新しい条件を指定するwhen
を使用して、複数の代替コードブロックを指定する注意: Javaとは異なり、Kotlinではif..elseをステートメントとしても、式としても使用できます(変数に値を代入するための式として)。下のページの例を参照してください。
条件がtrueの場合に実行されるコードブロックを指定するには、if
を使用します。
if (condition) {
// 条件がtrueの場合に実行されるコードブロック
}
if
は小文字で書く必要があります。大文字(IfやIF)ではエラーが発生します。
if (20 > 18) {
println("20は18より大きい")
}
変数をテストすることもできます。
val x = 20
val y = 18
if (x > y) {
println("xはyより大きい")
}
上記の例では、変数xとyを使用して、xがyより大きいかどうかをテストしています(>演算子を使用)。xが20でyが18なので、20が18より大きいことがわかり、「xはyより大きい」と画面に表示します。
条件がfalseの場合に実行されるコードブロックを指定するには、else
を使用します。
if (condition) {
// 条件がtrueの場合に実行されるコードブロック
} else {
// 条件がfalseの場合に実行されるコードブロック
}
val time = 20
if (time < 18) {
println("こんにちは。")
} else {
println("こんばんは。")
}
// 出力: "こんばんは。"
上記の例では、time(20)が18より大きいため、条件がfalseになります。したがって、else条件に進み、”こんばんは”と画面に表示します。もしtimeが18未満だった場合、プログラムは”こんにちは”と表示します。
最初の条件がfalseの場合に、新しい条件を指定するにはelse if
を使用します。
if (condition1) {
// condition1がtrueの場合に実行されるコードブロック
} else if (condition2) {
// condition1がfalseでcondition2がtrueの場合に実行されるコードブロック
} else {
// condition1とcondition2の両方がfalseの場合に実行されるコードブロック
}
val time = 22
if (time < 10) {
println("おはようございます。")
} else if (time < 20) {
println("こんにちは。")
} else {
println("こんばんは。")
}
// 出力: "こんばんは。"
上記の例では、time(22)が10より大きいため、最初の条件はfalseです。次のelse if文の条件もfalseなので、else条件に進み、”こんばんは”と画面に表示します。ただし、もしtimeが14だった場合、プログラムは”こんにちは”と表示します。
Kotlinでは、if..elseステートメントを式として使用することもできます(変数に値を代入して返す):
val time = 20
val greeting = if (time < 18) {
"こんにちは。"
} else {
"こんばんは。"
}
println(greeting)
ifを式として使用する場合は、else
も含める必要があります(必須)。
ifに1つの文しかない場合は、中括弧{}
を省略できます。
fun main() {
val time = 20
val greeting = if (time < 18) "こんにちは。" else "こんばんは。"
println(greeting)
}
この例は、Javaの「三項演算子」(短縮形のif…else)と似ています。
プログラミングでは、2つの値のいずれかを持つデータ型が必要になることがよくあります。例えば:
Kotlinでは、ブーリアン型を使用して、trueまたはfalseの値を取ることができます。
ブーリアン型はBoolean
キーワードを使って宣言でき、値としてはtrueまたはfalseのみを取ることができます。
val isKotlinFun: Boolean = true
val isFishTasty: Boolean = false
println(isKotlinFun) // 出力: true
println(isFishTasty) // 出力: false
前の章で学んだ他のデータ型と同様に、上記の例も型を指定せずに書くことができます。Kotlinは変数がブーリアンであることを理解します。
val isKotlinFun = true
val isFishTasty = false
println(isKotlinFun) // 出力: true
println(isFishTasty) // 出力: false
ブーリアン式は、trueまたはfalseのブーリアン値を返します。
比較演算子を使用して、式(または変数)がtrueかどうかを調べることができます。例えば、greater than(>)演算子を使用して、次のように確認できます。
val x = 10
val y = 9
println(x > y) // 出力: true、10は9より大きい
さらに簡単に書くこともできます。
println(10 > 9) // 出力: true、10は9より大きい
以下の例では、equal to(==)演算子を使用して式を評価します。
val x = 10
println(x == 10) // 出力: true、xの値は10に等しい
println(10 == 15) // 出力: false、10は15に等しくない
ブーリアン式の値は、すべてのKotlinの比較や条件の基礎となります。
文字列はテキストを格納するために使用されます。
文字列はダブルクォーテーションで囲まれた文字の集まりです。
var greeting = "Hello"
Javaとは異なり、変数が文字列であることを指定する必要はありません。Kotlinはダブルクォーテーションのおかげで、上記の例でのgreeting
変数が文字列であると理解します。
ただし、他のデータ型と同様に、指定したい場合は型を明示することもできます。
var greeting: String = "Hello"
注意:値を後から代入したい場合は、変数を宣言する際に型を指定する必要があります。
var name: String
name = "John"
println(name)
これは問題なく動作します。
var name
name = "John"
println(name)
これはエラーを生成します。
文字列の文字(要素)にアクセスするには、角括弧内のインデックス番号を参照する必要があります。
文字列のインデックスは0から始まります。以下の例では、txt
の最初と3番目の要素にアクセスしています。
var txt = "Hello World"
println(txt[0]) // 最初の要素 (H)
println(txt[2]) // 3番目の要素 (l)
[0]は最初の要素、[1]は2番目の要素、[2]は3番目の要素です。
Kotlinの文字列はオブジェクトで、特定の文字列変数の後にドット(.)を記述することで、プロパティや関数を利用して文字列に対する操作を行うことができます。例えば、文字列の長さはlength
プロパティで取得できます。
var txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
println("文字列txtの長さは: " + txt.length)
文字列には多くの関数があります。例えば、toUpperCase()
やtoLowerCase()
があります。
var txt = "Hello World"
println(txt.toUpperCase()) // 出力: "HELLO WORLD"
println(txt.toLowerCase()) // 出力: "hello world"
compareTo(string)
関数は2つの文字列を比較し、両方が等しい場合は0を返します。
var txt1 = "Hello World"
var txt2 = "Hello World"
println(txt1.compareTo(txt2)) // 出力: 0(等しい)
indexOf()
関数は文字列内で指定されたテキストの最初の出現位置(インデックス)を返します(空白も含む)。
var txt = "Please locate where 'locate' occurs!"
println(txt.indexOf("locate")) // 出力: 7
Kotlinは位置をゼロからカウントします。
0が最初の位置、1が2番目の位置、2が3番目の位置です。
文字列内で引用符を使用するには、単一引用符(’)を使用します。
var txt1 = "It's alright"
var txt2 = "That's great"
文字列同士を加算するために+
演算子を使用できます。これを文字列の連結と呼びます。
var firstName = "John"
var lastName = "Doe"
println(firstName + " " + lastName)
ここではfirstName
とlastName
の間に空のテキスト(” “)を追加してスペースを作っています。
また、plus()
関数を使用して2つの文字列を連結することもできます。
var firstName = "John "
var lastName = "Doe"
println(firstName.plus(lastName))
連結の代わりに、「文字列テンプレート」を使用することもできます。これは文字列内に変数や式を簡単に追加する方法です。
変数を参照するには、$
シンボルを使用します。
var firstName = "John"
var lastName = "Doe"
println("私の名前は $firstName $lastName です")
「文字列テンプレート」はKotlinの人気機能で、コード量を減らすことができます。例えば、連結の例のようにfirstName
とlastName
の間に空白を指定する必要がありません。
演算子は変数や値に対して操作を行うために使用されます。
値はオペランドと呼ばれ、2つのオペランドの間で行う操作は演算子によって定義されます。
以下の例では、100と50がオペランドで、+記号が演算子です。
var x = 100 + 50
+演算子は、上の例のように2つの値を加算するのによく使われますが、変数と値、または変数と変数を加算するのにも使用できます。
var sum1 = 100 + 50 // 150 (100 + 50)
var sum2 = sum1 + 250 // 400 (150 + 250)
var sum3 = sum2 + sum2 // 800 (400 + 400)
Kotlinの演算子は以下のグループに分かれています:
算術演算子は一般的な数学的操作を実行するために使用されます。
演算子 | 名前 | 説明 | 例 |
---|---|---|---|
+ | 加算 | 2つの値を加算します | x + y |
– | 減算 | 1つの値から別の値を引きます | x - y |
* | 乗算 | 2つの値を掛け算します | x * y |
/ | 除算 | 1つの値を別の値で割ります | x / y |
% | 剰余 | 除算の余りを返します | x % y |
++ | インクリメント | 値を1増やします | ++x |
— | デクリメント | 値を1減らします | --x |
代入演算子は、変数に値を代入するために使用されます。
以下の例では、代入演算子(=
)を使用して、変数x
に値10を代入しています。
var x = 10
加算代入演算子(+=
)は、変数に値を追加します。
var x = 10
x += 5
全ての代入演算子の一覧:
演算子 | 例 | 同じ意味 |
---|---|---|
= | x = 5 |
x = 5 |
+= | x += 3 |
x = x + 3 |
-= | x -= 3 |
x = x - 3 |
*= | x *= 3 |
x = x * 3 |
/= | x /= 3 |
x = x / 3 |
%= | x %= 3 |
x = x % 3 |
比較演算子は2つの値を比較し、ブール値(true または false)を返します。
演算子 | 名前 | 例 |
---|---|---|
== | 等しい | x == y |
!= | 等しくない | x != y |
> | より大きい | x > y |
< | より小さい | x < y |
>= | 以上 | x >= y |
<= | 以下 | x <= y |
論理演算子は変数や値間の論理を決定するために使用されます。
演算子 | 名前 | 説明 | 例 |
---|---|---|---|
&& | 論理積 | 両方の条件が真であれば true を返します | x < 5 && x < 10 |
|| | 論理和 | いずれかの条件が真であれば true を返します | x < 5 || x < 4 |
! | 論理否定 | 結果を反転させ、結果が真であれば false を返します |
Kotlinでは、変数の型はその値によって決まります。
val myNum = 5 // Int
val myDoubleNum = 5.99 // Double
val myLetter = 'D' // Char
val myBoolean = true // Boolean
val myText = "Hello" // String
ただし、前の章で学んだように、型を指定することも可能です。
val myNum: Int = 5 // Int
val myDoubleNum: Double = 5.99 // Double
val myLetter: Char = 'D' // Char
val myBoolean: Boolean = true // Boolean
val myText: String = "Hello" // String
型を指定する必要がある場合もあれば、指定しなくてもよい場合もありますが、異なる型が何を表すかを知っておくと良いでしょう。型を指定する必要がある場面については、後ほど詳しく学びます。
データ型は以下のグループに分かれます:
数値型は二つのグループに分かれます:
数値型を指定しない場合、整数値は通常 Int
として、浮動小数点数は Double
として返されます。
val myNum: Byte = 100
println(myNum)
val myNum: Short = 5000
println(myNum)
val myNum: Int = 100000
println(myNum)
L
」を付けることができます。val myNum: Long = 15000000000L
println(myNum)
整数値が 2147483647 までであれば Int ですが、それを超えると Long として定義されます。
val myNum1 = 2147483647 // Int
val myNum2 = 2147483648 // Long
浮動小数点型は小数を含む数値を表します。例えば、9.99 や 3.14515 です。Float と Double のデータ型が小数点数を格納できます。
F
」を付ける必要があります。val myNum: Float = 5.75F
println(myNum)
val myNum: Double = 19.99
println(myNum)
浮動小数点値の精度は、小数点以下の桁数を示します。Float の精度は約6〜7桁ですが、Double 変数の精度は約15桁です。そのため、大半の計算には Double を使用する方が安全です。
また、Float 型の値には末尾に「F
」を付ける必要があります。
浮動小数点数は、10のべき乗を示す「e
」または「E
」を使って科学的表記にすることもできます。
val myNum1: Float = 35E3F
val myNum2: Double = 12E4
println(myNum1)
println(myNum2)
ブール型は、値が true または false のいずれかしか取れません。
val isKotlinFun: Boolean = true
val isFishTasty: Boolean = false
println(isKotlinFun) // true を出力
println(isFishTasty) // false を出力
Char
データ型は単一の文字を格納するために使用します。文字は単一引用符で囲む必要があります。例えば、「'A'
」や「'c'
」です。
val myGrade: Char = 'B'
println(myGrade)
Java とは異なり、Kotlin では ASCII 値を使用して特定の文字を表示することはできません。Java では値 66 が「B」を出力しますが、Kotlin ではエラーになります。
val myLetter: Char = 66
println(myLetter) // エラー
String
データ型は文字列(テキスト)のシーケンスを格納するために使用します。文字列はダブルクォーテーションで囲む必要があります。
val myText: String = "Hello World"
println(myText)
配列は、複数の値を一つの変数に格納するために使用され、各値のために個別の変数を宣言する代わりに利用します。
型変換とは、あるデータ型の値を別の型に変換することです。
Kotlin では、数値型の変換は Java とは異なります。例えば、以下のコードでは Int 型を Long 型に変換することはできません。
val x: Int = 5
val y: Long = x
println(y) // エラー: 型が一致しません
数値型を別の型に変換するには、以下の関数のいずれかを使用する必要があります: toByte()
、toShort()
、toInt()
、toLong()
、toFloat()
、toDouble()
、または toChar()
です。
val x: Int = 5
val y: Long = x.toLong()
println(y)
変数はデータ値を格納するためのコンテナです。変数を作成するにはvar
またはval
を使用し、等号(=
)で値を割り当てます。
var 変数名 = 値
val 変数名 = 値
var name = "John"
val birthyear = 1975
println(name) // 名前の値を出力
println(birthyear) // 生年の値を出力
var
キーワードで宣言された変数は変更できますが、val
変数は変更できません。
他の多くのプログラミング言語とは異なり、Kotlinの変数は特定の型(例えば、テキスト用のString
や数字用のInt
)を宣言する必要がありません。以下の例では、テキストを格納する変数と数字を格納する変数を作成します。
var name = "John" // 文字列(テキスト)
val birthyear = 1975 // 整数(数字)
println(name) // 名前の値を出力
println(birthyear) // 生年の値を出力
Kotlinは「John」が文字列(テキスト)であり、1975が整数(数字)の変数であることを自動で理解することができます。しかし、もし必要であれば型を指定することも可能です。
var name: String = "John" // 文字列
val birthyear: Int = 1975 // 整数
println(name)
println(birthyear)
値を割り当てずに変数を宣言し、後で値を割り当てることもできます。ただし、これは型を指定した場合にのみ可能です。
以下のコードは正常に動作します:
var name: String
name = "John"
println(name)
以下のコードはエラーを生成します:
var name
name = "John"
println(name)
val
キーワードで変数を作成すると、その値は変更/再割り当てできません。
以下の例はエラーを生成します:
val name = "John"
name = "Robert" // エラー(valは再割り当てできません)
println(name)
var
を使用すると、値をいつでも変更できます。
var name = "John"
name = "Robert"
println(name)
val
を使用するかval
キーワードは、例えばPI(3.14159…)のように常に同じ値を保持する変数に使用すると便利です。
val pi = 3.14159265359
println(pi)
上記の例で見たように、println()
メソッドは変数を表示するために頻繁に使用されます。テキストと変数を組み合わせるには、+
文字を使用します。
val name = "John"
println("Hello " + name)
また、+
文字を使用して変数を他の変数に追加することもできます。
val firstName = "John "
val lastName = "Doe"
val fullName = firstName + lastName
println(fullName)
数値の場合、+
文字は数学の演算子として機能します。
val x = 5
val y = 6
println(x + y) // x + yの値を出力
上記の例では次のことを行っています。
println()
メソッドを使用してx + y
の値を表示します。結果は11です。変数は短い名前(例えばxやy)や、より説明的な名前(年齢、合計、総容量など)を持つことができます。Kotlinの変数に関する一般的なルールは次のとおりです:
$
および_
で始めることもできます(ただし、このチュートリアルでは使用しません)。myVar
とmyvar
は異なる変数です)。var
やString
などのKotlinキーワード)は名前として使用できません。上記の例でfirstName
とlastName
を変数名として使用したことに気づいたかもしれません。これは「キャメルケース」と呼ばれ、異なる単語を含む変数名を読みやすくするために良い習慣とされています。例えば、myFavoriteFood
やrateActionMovies
などです。
コメントはKotlinコードを説明し、より読みやすくするために使用できます。また、別のコードをテストする際に実行を防ぐためにも使用できます。
シングルラインコメントは二つのスラッシュ(//
)で始まります。//
から行の終わりまでのテキストはKotlinによって無視されます(実行されません)。
以下の例では、コードの行の前にシングルラインコメントを使用しています。
// これはコメントです
println("Hello World")
以下の例では、コードの行の最後にシングルラインコメントを使用しています。
println("Hello World") // これはコメントです
マルチラインコメントは/*
で始まり、*/
で終わります。/*
と*/
の間のテキストはKotlinによって無視されます。
以下の例では、コードを説明するためにマルチラインコメント(コメントブロック)を使用しています。
/* 以下のコードは画面に
Hello Worldと表示します。*/
println("Hello World")
println()
関数は値を出力したり、テキストを表示するために使用します。
fun main() {
println("Hello World")
}
いくつでもprintln()
関数を追加することができます。各関数の実行後に新しい行が追加されることに注意してください。
fun main() {
println("Hello World!")
println("I am learning Kotlin.")
println("It is awesome!")
}
また、数字を表示したり、数学的な計算を行うこともできます。
fun main() {
println(3 + 3)
}
また、print()
関数もあり、これはprintln()
関数と似ています。唯一の違いは、出力の最後に新しい行を挿入しないことです。
fun main() {
print("Hello World! ")
print("I am learning Kotlin. ")
print("It is awesome!")
}