
Android Developers > スタートガイド > Kotlin と Android をゼロから学ぶ > Unit1 – Kotlin を用いた Android の基本 >Unit1-4 第1回 の内容をまとめたものです(翻訳ではありません)
Unit1 – 4 の内容
- Androidアプリとしてサイコロプログラムを作成する
- Kotlinのみでクラスを使ったプログラムを作成する
- Androidアプリにボタンを追加する
- ボタンを押したときの処理を記述する
- Kotlinコード作成はブラウザベースのKotlin実行環境を使うと便利(もちろんAndroid Studioで行うことも可能)
Unit1 – 4 の 第1回

第1回の内容は以下の通りです
- まず Kotlin のみで乱数を生成するプログラムを作る
- 変数とメソッドを持つクラスを作る
- 作ったクラスからオブジェクトインスタンス(object instance)を生成して、変数(プロパティ)を書き換えたり、メソッドを使ったりしてみる
Step1 のKotlinコード
IntRange
型をつかいます
fun main() {
val diceRange = 1..6
val randomNumber = diceRange.random()
println("Random number: ${randomNumber}")
}
val
による変数宣言のしかた(Kotlinによる型推論)1..6
は IntRange型- IntRange では
random()
メソッドが使える
Step2 のKotlinコード
はじめての class
ですね
fun main() {
val myFirstDice = Dice()
println(myFirstDice.sides)
myFirstDice.roll()
}
class Dice {
var sides = 6
fun roll() {
val randomNumber = (1..6).random()
println(randomNumber)
}
}
- クラスは
class クラス名 { 内容 }
とclass
キーワードを使って宣言すればよい - クラス名はPascalCaseで、変数名や関数名はcamelCaseで書く。関数名は動作をあらわす動詞からはじめるとよい
- クラス内にまとめる変数をプロパティと言う
- 書き方は普通の変数宣言と同じ
val 変数名 = 値
- 書き方は普通の変数宣言と同じ
- クラス内の関数がメソッド。fun キーワードを使った書き方も通常の関数と同じ
- 引数がなくても関数名のあとには()をつける
- クラスの中に関連する機能をまとめることをカプセル化(encapsulation)という
- クラスには「属性と動作」が「変数と関数」という形でまとめられている
- インスタンスの生成は
val 変数名 = クラス名()
- クラスから生成されたインスタンスはオブジェクトです
- インスタンスを生成するときはクラス名の後ろに()を忘れずにつける
- プロパティにアクセスするには「
インスタンス名.プロパティ名
」、メソッドにアクセスするには「インスタンス名.メソッド名()
」とする- この表し方を dot notation(ドット表記)という
- IntRange型の変数をつくらなくても、いきなり
(1..6).random()
で乱数を返すことも可能
Step3 のKotlinコード
関数で return
しますね
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..6).random()
return randomNumber
}
}
return
を使ってメソッドが値を返すようにできる- 関数名のあとに戻り値の型を指定できる
- “文字列” の中で
${変数}
とすることで文字列の中に変数の内容を埋め込むことが可能(文字列テンプレート) - 文字列テンプレートには
${インスタンス変数.プロパティ}
としてプロパティの値を埋め込むことも可能
Step4 のKotlinコード
クラスのプロパティ(変数)にアクセス!
fun main() {
val myFirstDice = Dice()
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.sides} sided dice rolled ${diceRoll}!")
myFirstDice.sides = 20
println("Your ${myFirstDice.sides} sided dice rolled ${myFirstDice.roll()}!")
}
class Dice {
var sides = 6
fun roll(): Int {
val randomNumber = (1..sides).random()
return randomNumber
}
}
- プロパティの値を変更するとメソッドの戻り値が変化する
- 文字列テンプレートには
${インスタンス変数.メソッド()}
としてメソッドの戻り値を埋め込むことも可能
Step5 のKotlinコード
クラスをちょっと改造してみますね
fun main() {
val myFirstDice = Dice(6)
val diceRoll = myFirstDice.roll()
println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
val randomNumber = (1..numSides).random()
return randomNumber
}
}
- クラスには関数の引数のように変数に値を渡す書き方ができる
- 引数のように書かれた変数は、クラスのプロパティと同じように扱える
Step6 のKotlinコード
return
のところがすっきり
fun main() {
val myFirstDice = Dice(6)
println("Your ${myFirstDice.numSides} sided dice rolled ${myFirstDice.roll()}!")
val mySecondDice = Dice(20)
println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!")
}
class Dice (val numSides: Int) {
fun roll(): Int {
return (1..numSides).random()
}
}
return
のところで乱数を作ってそのまま返してもよい
Step7 ここまでのKotlinコードまとめ
できました!今回はこれで完成ですね
fun main() { val myFirstDice = Dice(6) val diceRoll = myFirstDice.roll() println("Your ${myFirstDice.numSides} sided dice rolled ${diceRoll}!") val mySecondDice = Dice(20) println("Your ${mySecondDice.numSides} sided dice rolled ${mySecondDice.roll()}!") } class Dice (val numSides: Int) { fun roll(): Int { return (1..numSides).random() } }