Kotlinに入門してみた
Overview
Kotlinは、開発者をより幸せにするために設計された、現代的だがすでに成熟したプログラミング言語だ。簡潔で、安全で、Javaや他の言語と相互運用可能で、生産的なプログラミングのために複数のプラットフォーム間でコードを再利用する多くの方法を提供する。
KotlinはJavaを簡単に書けることから、ベターJavaと呼ばれていたりするそうです。
まずは、Kotlinのツアーに参加してみませんか?このツアーでは、プログラミング言語Kotlinの基礎について説明します。
Kotlinの公式リファレンスのリンク
こちらで、変数、関数、繰り返し処理、条件分岐、クラスについて学習しました。
summary
公式チュートリアルをやってみて、コードを書いてみました。
Playgrandで動かすことができますが、IntelliJ IDEAを使わないとコードの保管機能がなかったので、コピペしないとやりずらかったです。
Github Copilotを使うと、いい感じでサンプルコードを書いてくれるので、写経するより早く学習できる気がします。
色々なパターンをAIに教えてもらえました。
挨拶を返すだけのプログラム
fun main(args: Array<String>) {
val name: String = "Kotlin"
println("Hello, $name!")
}
データの型
Kotlinには以下の基本型がある:
変数
fun main(args: Array<String>) {
val name: String = "Kotlin"// String型はダブルクォーテーションで囲む
val age: Int = 4// Int型は整数
val width: Double = 1.0// Double型は小数
val done: Boolean = true// Boolean型はtrueかfalse
val characters: Char = 'a'// Char型はシングルクォーテーションで囲む
println(name)
println(age)
println(width)
println(done)
println(characters)
}
種類 | 基本的な型 |
---|---|
Integers | Byte, Short, Int, Long |
Unsigned integers | UByte, UShort, UInt, ULong |
Floating-point numbers | Float, Double |
Booleans | Boolean |
Characters | Char |
Strings | String |
List
配列のことですね。listOf丸括弧っていう独特な書き方をしていた。
fun main(args: Array<String>) {
// フルーツというListを作成
val fruits = listOf("apple", "banana", "orange")
// フルーツの要素を1つずつ取り出して表示
for (fruit in fruits) {
println(fruit)
}
// Listの中身を全て表示
print(fruits)
}
リストに型を指定する
ジェネリティクスに型を指定するとリストに型を指定できます。List<型>
fun main() {
val items: List<String> = listOf("apple", "banana", "kiwifruit")
println(items)
val numbers: List<Int> = listOf(1, 2, 3)
println(numbers)
}
filterメソッド
要素から、条件に合うものだけを抽出したい場合は、filterメソッドを使う。
fun main() {
// filterとは、条件に合致する要素だけを取り出す関数
val items: List<String> = listOf("apple", "banana", "kiwifruit")
// appleという要素だけ条件式を使って取り出す
items.filter { it == "apple" }.forEach { println(it) }
// Listから、要素の長さが5以上のものだけを取り出す
items.filter { it.length >= 5 }.forEach { println(it) }
}
Set
Listは重複した要素を持つことができるが、Setは重複した要素を持つことができない。
fun main(args: Array<String>) {
// Setを使って、重複を許さないリスト果物のリストを作る。Setは同じ値を複数持てない。
val fruits = setOf("apple", "banana", "orange", "apple")
println(fruits)
}
Map
Mapはキーと値のペアを保持するコレクションである。key, valueって言われているものですね。
fun main(args: Array<String>) {
// Mapを使用して果物の名前と値段を格納する
val fruits = mapOf("apple" to 100, "banana" to 200, "orange" to 300)
// Mapの要素を順番に処理する
fruits.forEach { key, value ->
println("$key is $value yen.")
}
println(fruits)
}
条件分岐
条件が、同じ値か10以下か、10未満っていう表現で出てくる機能ですね。
if文
ifを使い500円以上なら、ワンコインランチが食べれて、¥500未満だったら変えない条件分岐
fun main(args: Array<String>) {
val money = 400
if (money >= 500) {
println("ワンコインランチが食べれる")
} else {
println("ワンコインランチが食べれない")
}
}
when文
Kotlinには、switch文がないのか、when文なるものを使うようです。
fun main(args: Array<String>) {
// 複数の分岐を持つ条件式がある場合は、whenを使う。
val obj = "ぶどう"
when (obj) {
"りんご" -> println("りんごです")
"みかん" -> println("みかんです")
"ぶどう" -> println("ぶどうです")
else -> println("その他です")
}
}
繰り返し処理
プログラミング言語で基本的なfor文ですね。
for文
fun main(args: Array<String>) {
// for文を使って1から10までの数字を表示する
for (i in 1..10) {
println(i)
}
}
while文
条件式を評価し真の間は処理を行う文法です。
fun main(args: Array<String>) {
// while文を使って1から10までの数字を表示する
var i = 1
while (i <= 10) {
println(i)
i++
}
}
関数
プログラムの処理をまとめておく機能ですね。
// 通常の関数
fun hello() {
println("Hello, world!")
}
// 足し算する関数
fun sum(a: Int, b: Int): Int {
return a + b
}
// ラムダ式で足し算する関数
val sum2 = { a: Int, b: Int -> a + b }
fun main() {
hello()
println("関数で実行-------------")
println(sum(1, 2))
println("ラムダ式で実行-------------")
println(sum2(1, 2))
}
クラス
プログラミング言語の世界では、設計図って意味ですね。変数とメソッドが中に入っていて、インスタンス化(実体化)しないと使えません。
// このクラスは、Personクラスのインスタンスを生成し、greetメソッドを呼び出すだけのクラスです。
class Person(val name: String, val age: Int) {
fun greet() {
println("私の名前は${name}です。年齢は${age}です。")
}
}
fun main() {
val person = Person("田中太郎", 20)
person.greet()
}
thoughts
Kotlinの公式チュートリアルをやってみた感想ですが、Golangよりは簡単かもと思いました。
Javaを簡単にしたものだそうですが、JavaだとHello Worldするだけで、3行ぐらいコード書くのですけど、Kotlinなら、1行で処理が欠けますね。
比較してみた
Javaのコード
class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, world.");
}
}
Kotlinのコード
fun main(args:Array<String>) {
println("Hello, world.")
}
コードも見やすくて、理解しやすい言語だったので書くのが楽しくて気に入っております。
Discussion