絶滅しないようにkotlinの勉強を進めていこうかと思いますw
今回はkotlin自体の基本的なところを見てみます。
今回はkotlin自体の基本的なところを見てみます。
様々なプラットフォーム
- Kotlin for Server Side
- Kotlin for Android
- Kotlin for JavaScript
- KotlinをJavaScriptにコンパイルする
- Kotlin/Native
- Kotlinのコンパイラ LLVMを使っている様子
知らない間に色々ある。。。
基本実装
変数
kotlin
fun main(args: Array<String>) {
val a: Int = 1 // Int型として変数宣言かつ値代入
val b = 2 // `Int` 型を推論
val c: Int // 値代入しない場合は型は必須
c = 3 // 後で値を設定
println("a = $a, b = $b, c = $c") // a = 1, b = 2, c = 3
}
文字列テンプレート
kotlin
fun main(args: Array<String>) {
var a = 1
// 文字列中に`$a`で値を展開できる
val s1 = "a is $a"
a = 2
// 展開時に式も書ける
val s2 = "${s1.replace("is", "was")}, but now is $a"
println(s2) // a was 1, but now is 2
}
メソッドの書き方
- 2つのInt型の引数をとって1つのInt型の戻り値を返すkotlin
fun sum(a: Int, b: Int): Int { return a + b }
- 上のはこんな感じでも書けるkotlin
fun sum(a: Int, b: Int) = a + b
- 戻り値が無い場合kotlin
fun printSum(a: Int, b: Int): Unit { println("sum of $a and $b is ${a + b}") }
Unit
は省略できるkotlinfun printSum(a: Int, b: Int) { println("sum of $a and $b is ${a + b}") }
- if-expressions.kotlin
fun maxOf(a: Int, b: Int) = if (a > b) a else b fun main(args: Array<String>) { println("max of 0 and 42 is ${maxOf(0, 42)}") // max of 0 and 42 is 42 }
- nullが返るかもしれない場合
Int?
みたいにかくkotlinfun parseInt(str: String): Int? { return str.toIntOrNull() }
is オブジェクトがキャスト可能か調べる
kotlin
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` is automatically cast to `String` in this branch
return obj.length
}
// `obj` is still of type `Any` outside of the type-checked branch
return null
}
for ループ
kotlin
val items = listOf("apple", "banana", "kiwi")
for (item in items) {
println(item)
}
// or
val items = listOf("apple", "banana", "kiwi")
for (index in items.indices) {
println("item at $index is ${items[index]}")
}
when - switchみたいなもの
kotlin
fun describe(obj: Any): String =
when (obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a string"
else -> "Unknown"
}
fun main(args: Array<String>) {
println(describe(1)) //One
println(describe("Hello")) // Greeting
println(describe(1000L)) // Long
println(describe(2)) // Not a string
println(describe("other")) // Unknown
}
range
kotlin
for (x in 1..5) {
print(x) // 12345
}
collection
kotlin
fun main(args: Array<String>) {
val items = setOf("apple", "banana", "kiwi")
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
} // apple is fine too
リスト内に特定の文字が含まれているかチェックできる!
kotlin
fun main(args: Array<String>) {
val fruits = listOf("banana", "avocado", "apple", "kiwi")
fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }
}
// APPLE
// AVOCADO
クラス
kotlin
fun main(args: Array<String>) {
val rectangle = Rectangle(5.0, 2.0) //no 'new' keyword required
val triangle = Triangle(3.0, 4.0, 5.0)
println("Area of rectangle is ${rectangle.calculateArea()}, its perimeter is ${rectangle.perimeter}")
println("Area of triangle is ${triangle.calculateArea()}, its perimeter is ${triangle.perimeter}")
}
abstract class Shape(val sides: List<Double>) {
val perimeter: Double get() = sides.sum() // getterの`perimeter`プロパティ
abstract fun calculateArea(): Double
}
interface RectangleProperties {
val isSquare: Boolean
}
// Primary なコンストラクタは`height`と`length`の引数を受け取る
class Rectangle(
var height: Double,
var length: Double
) : Shape(listOf(height, length, height, length)), RectangleProperties {
override val isSquare: Boolean get() = length == height
override fun calculateArea(): Double = height * length
}
class Triangle(
var sideA: Double,
var sideB: Double,
var sideC: Double
) : Shape(listOf(sideA, sideB, sideC)) {
override fun calculateArea(): Double {
val s = perimeter / 2
return Math.sqrt(s * (s - sideA) * (s - sideB) * (s - sideC))
}
}
// Area of rectangle is 10.0, its perimeter is 14.0
// Area of triangle is 6.0, its perimeter is 12.0
0 件のコメント:
コメントを投稿