Kotlin(二)の演算子と式
文書ディレクトリ演算子と式 区間演算子 演算子リロード フロー制御 ラベル 演算子と式 kotlinではjavaの3つの演算子はサポートされず、if式を使用して3つの演算子の代わりに使用します. kotlinの演算子は、+、*などの特定の記号と固定された優先度を有する方法で実現される.各演算子に対応するメソッド名は固定されており、特定の名前のメソッド、メンバーメソッド、または拡張メソッドをタイプに指定すればよい.Kotlinのすべての演算子の機能は一般化されており、数値型、文字列だけでなく、任意のカスタムKotlinクラスにも使用できます.Kotlinの中の&&&、|、?:、===、!==リロードできない です単一接頭辞 自己増減 両目演算子、 inと!in インデックスアクセス演算子 呼び出し演算子 一般化割付演算子 は不等演算子 と等しい.比較演算子 is演算子javaのinstanceofに似ていますが、instanceofの判断後に強制変換が必要ですが、is演算子は自動変換 を表示する必要はありません. as演算子は、参照タイプの表示タイプ変換を実行するために使用され、変換するタイプが指定したタイプと互換性がある場合、変換は成功します.タイプが互換性がない場合、ClassCastException異常が放出されます.asを使ってもいいですか?演算子、変換に失敗した場合null を返します.
区間演算子区間演算子 閉区間:a...bは、a~b(境界を含む)のすべての値を定義する区間である.閉区間については、aはb より大きくてはならない.開区間:半開区間a until b[a,b]、a~b(前閉後開)のすべての値の区間から、配列やリストを巡るのが便利(インデックス値が0から長さ-1まで) 逆方向区間:a downTo bは、区間が大きいから小さい(downToは実は より大きくてはならない step演算子( を明示的に指定することができる.
ケース 演算子の再ロード Kotlinの演算子は、特定の名前の方法でサポートされています.したがって、これらの名前を再ロードする方法だけで、任意のクラスにこれらの演算子を追加できます.
プロセス制御 kotlinは、switchの代わりに2つのブランチifとwhenを提供し、ifは式であり、すなわち、ifブランチコードブロックの最後の式がブロックの値として返され、ifが式としてelseブランチが必要である場合.kotlinには三元演算子はなくif式により を実現できる. when はcaseキーワード を使用する必要はありません. case値の後のコロンは、矢印(->) を使用するように変更されました. defaultをより意味のある、より明確なelse に変更 whenは、複数の値 に一致することができる when分岐後の値は定数を必要とせず、任意の式 であってもよい. whenブランチ条件式のタイプには何の要求もありません(条件式がブランチの値と==比較してtrueを返す限り) whenブランチは式 としてもよい whenブランチ処理可能範囲 ケース whenを用いて階乗関数 を実現する breakは外層サイクルを中断し、カスタムラベルouter@ を使用します. continue外層サイクル をスキップ
タブ Kotlinではどの式でもラベル(label)を使用してタグ付けできます.ラベルの形式は識別子の後に@記号が付きます.たとえば を制御できます.
/**
*
*
* +a a.unaryPlus()
* -a a.unaryMinus()
* !a a.not()
*/
var a = 20;
val b = -a
val c = a.unaryMinus()
// :b:-20,c:-20
println("b:${b},c:${c}")
val d = +a
val e = a.unaryPlus()
// :b:20,c:20
println("b:${d},c:${e}")
var flag = true
val f = !flag
val g = flag.not()
//f:false,g:false
println("f:${f},g:${g}")
/****
*
*
*
* a++ a.inc()
* a-- a.dec()
*/
//var a = 20, :20
println("a:${a++}")
// :22
println("a:${++a}")
/***
*
*
* a+b a.plus(b)
* a-b a.minus(b)
* a*b a.times(b)
* a/b a.div(b)
* a%b a.rem(b)
* a..b a.rangeTo(b)
*/
// :11
println(5 + 6)
// :11
println(5.plus(6))
// :30
println(5 * 6)
// :30
println(5.times(6))
// kotlin 1+"" , Int + 1.toString()+""
// kotlin ""+1
/**
* a in b b.contains(a)
* a !in b !b.contains(a)
*/
var str = "jannal"
println(str.contains("jan"))
println("jan" in str)
/**
*
* a[i] a.get(i)
* a[i,j] a.get(i,j)
* a[i1,...,in] a.get(i1,...,in)
* a[i] = b a.set(i,b)
* a[i,j] = b a.set(i,j,b)
* a[i1,...,in]=b a.set(i1,...,in,b)
* get set , String ArrayList
*/
var list = ArrayList<String>()
list.add("jannal")
list.add("tom")
list.add("jack")
//tom
println(list[1])
list[1] = "tomcat"
//tomcat
println(list[1])
/**
*
* a() a.invoke()
* a(b) a.invoke(b)
* a(b1,b2) a.invoke(b1,b2)
* a(b1,b2,b3...) a.invoke(b1,b2,b3)
*
*/
val s = "java.lang.String"
val method = Class.forName(s).getMethod("length");
// :4
println(method.invoke("java"))
// :4
println(method("java"))
/**
*
* a+=b a.plusAssign(b)
* a-=b a.minusAssign(b)
* a*=b a.timesAssign(b)
* a/=b a.divAssign(b)
* a%=b a.remsAssign(b)
*
* plusAssign()
* - , plus() , 。
* - , plus() , plusAssign , '
* - , a+=b a=a+b
*/
/**
*
*
* a==b a?.equals(b)?:(b===null)
* a!=b !(a?.equals(b)?:(b===null))
* == equals , ==
* java == != kotlin === !== ,=== !==
*/
var s1 = java.lang.String("java")
var s2 = java.lang.String("java")
println(s1 == s2)//true
println(s1.equals(s2))//true
println(s1 === s2)//false
println(s1 !== s2)//true
var s3 = "java"
var s4 = "java"
println(s3 == s4)//true
println(s3 === s4)//true
/**
*
* a>b a.compareTo(b)>0
* a=b a.compareTo(b)>=0
* a<=b a.compareTo(b)<=0
* compareTo ( Compareable )
*/
var s5 = "java"
var s6 = "kotlin"
println(s5 > s6)//false
println(s5.compareTo(s6) > 0)//false
if(a is String){
println(a.length)
}
open class Parent
class Child : Parent()
val parent = Parent()
val child = Child()
//
println(child as Parent)
//
println(parent as? Child) //null
val parent1: Parent = child
println(parent1 as Child) // ,
println(parent as Child) // , java.lang.ClassCastException
区間演算子
infix
関数である).b a infix
関数)によって区間のステップ長 var rangeNum = 2..6
for (num in rangeNum) {
println("${num} * 5 = ${num * 5}")
}
var users = arrayOf("jannal", "tom", "jack")
for (index in 0 until users.size) {
println(" ${index + 1} :${users[index]}")
}
// 6 2, 1
var rangeNum1 = 6 downTo 2
for (num in rangeNum1) {
//65432
print(num)
}
println()
// 6 2, 2
var rangeNum2 = 6 downTo 2 step 2
for (num in rangeNum2) {
//642
print(num)
}
/**
*
* 1. unaryPlus()、unaryMinus()、not()
* 2. operator
*
*
*/
data class Data(val x: Int, val y: Int) {
operator fun unaryMinus(): Data {
return Data(-x, -y)
}
}
// Data not()
operator fun Data.not(): Data {
return Data(-x, -y)
}
fun main(args: Array<String>) {
val d = Data(4, 10)
println(-d)
println(!d)
}
プロセス制御
//if
var age = 20
var str = if (age > 20) "age 20" else if (age < 20) "age 20" else "age 20"
//age 20
println(str)
//
var result = if(true) 1 else 0
println(result)
fun main(args: Array<String>) {
//if
var age = 20
//age 20
var str = if (age > 20) "age 20" else if (age < 20) "age 20" else "age 20"
println(str)
var score = 'B'
when (score) {
'A' -> println(" ")
'B' -> println(" ")
'C' -> println(" ")
'D' -> println(" ")
'E', 'F' -> {
println(" ")
}
else -> println(" ")
}
}
//when in、!in ,
var num: Int = Random().nextInt(100)
var str1 = when(num){
in 1..60 -> "1~60"
in 61..70 -> "61~70"
in 71..80 -> "71~80"
in 81..90 -> "81~90"
else -> "91~100"
}
println(num)
println(str1)
// Kotlin 1.3 , when , when
when (val num2: Int = Random().nextInt(100)) {
in 1..60 -> println("1~60")
in 61..70 -> println("61~70")
in 71..80 -> println("71~80")
in 81..90 -> println("81~90")
else -> println("91~100")
}
var a: String? = "1"
val mode = when {
a == "1" -> 1
a == "2" -> 2
else -> 0
}
//1
println(mode)
fun fact(n: Int): Int {
return when (n) {
0, 1 -> 1
else -> n * fact(n - 1)
}
}
// break
outer@ for (i in 0 until 5) {
var j = 0
while (j < 3) {
println("i:${i},j:${j++}")
if (j == 2) {
break@outer
}
}
}
// continue
outer@ for (i in 0 until 5) {
var j = 0
while (j < 3) {
println("i:${i},j:${j++}")
if (j == 2) {
continue@outer
}
}
}
タブ
abc@
は有効なラベルです.ラベルでreturn、break、continue文のジャンプ var array = intArrayOf(1, 2, 3, 4)
// lambda start@,
// lambda
array.forEach start@{
if (it == 3) {
return@start
}
println(it)
}
//
array.forEach {
if (it == 3) {
return@forEach
}
println(it)
}
:
1
2
4
1
2
4