fun changeTextView(view: View){ var calendar = Calendar.getInstance() val minute = calendar.get(Calendar.MINUTE) messageTextView.text = "Hello android!" textView.text = minute.toString() }
勝手が異なるから、スクリーンショットの転送も最初は一仕事だ。
valは変更不可
varは変更可
ソフトウェアエンジニアの技術ブログ:Software engineer tech blog
随机应变 ABCD: Always Be Coding and … : хороший
fun changeTextView(view: View){ var calendar = Calendar.getInstance() val minute = calendar.get(Calendar.MINUTE) messageTextView.text = "Hello android!" textView.text = minute.toString() }
勝手が異なるから、スクリーンショットの転送も最初は一仕事だ。
valは変更不可
varは変更可
getter, setter
class User(var name: String){ var team = "red" get(){ return field.toUpperCase() } set(value){ if (value !=""){ field = value } } fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val tom = User("tom") println(tom.team) tom.sayHi() }
class override
class AdminUser(name: String): User(name){ fun sayHello(){ println("hello $name") } override fun sayHi(){ println("what $name") } } open class User(var name: String){ open fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val bob = AdminUser("bob") println(bob.name) bob.sayHi() }
アクセス修飾子: privateとpublic
open class User(private var name: String){ open fun sayHi(){ println("hi $name") } }
class extension
fun User.sayHello(){ println("hello $name") } val User.myName: String get() = "I am $name" class User(var name: String){ open fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val bob = User("bob") bob.sayHello() bob.sayHi() println(bob.myName) }
抽象クラス
abstract class User { abstract fun sayHi() } class Japanese: User(){ override fun sayHi(){ println("こんにちは") } } class American: User(){ override fun sayHi(){ println("hi") } } fun main(args: Array<String>){ val tom = American() val taro = Japanese() tom.sayHi() taro.sayHi() }
interface
interface Sharable{ // 抽象プロパティ、抽象メソッド、メソッド val version: Double fun share() fun getInfo(){ println("Share I/F ($version)") } } class User: Sharable { override val version = 1.1 override fun share(){ println("Sharing..") } } fun main(args: Array<String>){ val user = User() user.share() user.getInfo() }
generics
class MyData<T> { fun getThree(x: T){ println(x) println(x) println(x) } } fun main(args: Array<String>){ val i = MyData<Int>() i.getThree(32) val s = MyData<String>() s.getThree("hello") }
データクラス
data class Point(val x: Int, val y: Int) fun main(args: Array<String>){ val p1 = Point(3, 5) val p2 = Point(3, 5) val p3 = p1.copy() println(p1) println(if (p1 == p2) "same" else "not same") }
List
fun main(args: Array<String>){ val sales: List<Int> = listOf(20, 30, 40) println(sales[1]) println(sales.size) for (sale in sales){ println(sale) } }
set
fun main(args: Array<String>){ val answers: Set<Int> = setOf(3, 5, 8, 3) println(answers) println(answers.contains(3)) val set1 = setOf(1, 3, 5, 8) val set2 = setOf(3, 5, 8, 9) println(set1.intersect(set2)) println(set1.union(set2)) println(set1.subtract(set2)) }
Map
fun main(args: Array<String>){ val users: Map<String, Int> = mapOf("kobayashi" to 10, "kagawa" to 22, "tanaka" to 33) println(users["kobayashi"]) println(users.size) println(users.keys) println(users.values) println(users.entries) }
map, filter, foreach
fun main(args: Array<String>){ val prices = listOf(53.2, 48.2, 32.8) prices /*.map { n -> n + 1.08} //*/ .map { it * 1.08 } .filter { it > 50 } .forEach { println(it) } }
例外処理
fun div(a: Int, b: Int){ try { println(a / b) } catch(e: ArithmeticException) { println(e.message) } } fun main(args: Array<String>){ div(3, 0) }
Nullable型
fun main(args: Array<String>){ val s: String? = null /*println(s)*/ /*if (s != null){ println(s.length) } else { println(null) }*/ println(s?.length ?: -1) }
変数
fun main(args: Array<String>){ val msg: String = "Hello World" println(msg) }
データ型
val msg: String = "Hello World" val c: Char = 'a' val i: Int = 100 val l: Long = 555555555555L val d: Double = 234.352 val f: Float = 123.345 val flag: Boolean = true
データ演算
val x = 10 println(x / 3) println(x / 3.0) println(x % 3) var y = 5 y++ y-- println(y) var z = 4 z += 12 println(z) val flag = true println(!flag)
文字列
println("hello " + "world") val name = "yoshimoto" println("my name is $name") println("my score is ${12 + 43}") println("hello\n worl\td")
ifの条件分岐
val score = 85 if (score > 80){ println("Great!") } elseif (score > 60){ println("good!") } else { println("soso ..") }
when 条件分岐
val num = 3 when (num){ 0 -> println("zero") 1 -> println("one") in 4.. 10 -> println("many") else -> println("other") }
while, for
var i = 0 while (i < 10){ println("loop: $i") i++ } for (i in 0..9){ println(i) }
関数
fun sayHi(name: String = "tebes", age: Int = 23){ println("hi! $name ($age)") } fun main(args: Array<String>){ sayHi("tom", 22) sayHi() }
関数の返り値
fun sayHi(): String { return "hi!" } fun main(args: Array<String>){ val msg = sayHi() println(msg) }
class
class User { var name = "me!" fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val user = User() // インスタンス println(user.name) user.sayHi() }
コンストラクタ引数
class User(var name: String) { //コンストラクタ引数 /*var name = name*/ var team = "red" init { println("instance created: name: $name, team: $team") } fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val tom = User("tom") println(tom.name) tom.sayHi() }
JetBrain社が作った、Javaを簡潔に書けるようにした言語です。JVM、Androidで動くことから、Android開発で人気を博しています。
エディタにKotlinのSyntaxを入れます。
インストールは公式サイトのGettingStarted->Working with the CommandlineよりSDKMAN!をインストールします。
[vagrant@localhost ~]$ curl -s https://get.sdkman.io | bash [vagrant@localhost ~]$ source "/home/vagrant/.sdkman/bin/sdkman-init.sh" [vagrant@localhost ~]$ cd kotlin [vagrant@localhost kotlin]$ sdk version ==== BROADCAST ================================================================= * 15/11/16: Kotlin 1.0.5-2 released on SDKMAN! #kotlin * 14/11/16: Gradle 3.2 released on SDKMAN! #gradle * 10/11/16: Grails 3.2.3 released on SDKMAN! #grailsfw ================================================================================ SDKMAN 5.1.7+91 [vagrant@localhost kotlin]$ sdk install kotlin
インストールが終了したら、動作確認しましょう。
[vagrant@localhost kotlin]$ kotlin -version Kotlin version 1.0.5-2 (JRE 1.8.0_111-b15) [vagrant@localhost kotlin]$ kotlinc Welcome to Kotlin version 1.0.5-2 (JRE 1.8.0_111-b15) Type :help for help, :quit for quit >>> 1 + 2 3
fun main(args: Array<String>){ println("Hello World") }
[vagrant@localhost kotlin]$ kotlinc myapp.kt -include-runtime -d myapp.jar [vagrant@localhost kotlin]$ ls myapp.jar myapp.kt [vagrant@localhost kotlin]$ java -jar myapp.jar Hello World