[ツイスト]フロー制御構文と演算子


💌 フロー制御構文と演算子
📌 条件文
💜 if式
// 표현식으로서의 if문
val result = if(a>0) "hello" else "world"	// -> 표현식일 경우 else문 생략 불가능
println(result)

// if 표현식의 반환값 
val result2 = if(a<10){
	println("hello.."
    10 + 20			// -> { }사용할 때 데이터를 맨마지막에 작성
} else {
	print("world..")
    20+20
}

prinln(result2)
🖥
world
hello..30
💜 式#シキ#
1)整数分岐
fun main(args: Array<String>){
	val a2 = 1
    when (a2){
    1 -> println("a2 == 1")
    2 -> println("a2 == 2")
    else -> println("a2 is neither 1 nor 2")
    }
}
🖥
a2 == 1
2)分岐が整数以外の値
val data1 = "hello"
when(data1){
	"hello" -> println("data1 is hello")
    "world" -> println("data1 is world")
    else -> println("data1 is not hello or world")
}
🖥
data1 is hello
3)複数の値に分岐
when(data2){
	10, 20 -> println("data2 is 10 or 20")
    30, 40 -> println("data2 is 30 or 40")
    some() -> println("data2 is 50")
    30 + 30 -> println("data2 is 60")
}
4)範囲値への分岐
when(data3){
	!in 1..100 -> println("invalid data")
    	in 1..10 -> println("1 <= data3 <= 10")
    	in 11..20 -> println("11 <= data3 <== 20")
	else -> println("data2 > 20")
}
🖥
11 <= data3 <== 20
5)マルチブランチ
fun testWhen(data: Any){
	when(data){
   		1-> println("data value is 1")
      		"hello" -> println("data value is hello")
    		is Boolean -> println("data value is Boolean")
    }
}
6)ifelse置換
7)式として使用
📌 複文
💜 複文
fun main(args: Array<String>){
	var sum: Int = 0
    for(i in 1..10){		// 1부터 10까지 1씩 증가하면서 i에 대입하고 10번 반복
    	sum += i
    }
}
🖥
55
コレクションタイプの使用
val list = listOd("Hello", "World", "!")
val sb = StringBuffer()
for(str in list){
	sb.append(str)
}
println(sb)
🖥
HelloWorld!
コレクションタイプのインデックス値の使用
for(i in list.indices){
	println(list[i])
}
🖥
Hello
World
!
コレクション・タイプのインデックスと値の使用
for((index, value) in list.withIndex()){
	println("the element at $index is $value")
}
🖥
the element at 0 is Hello
the element at 1 isWorld
the element at 2 is!
for(iin 1.200)->100を含む
for(i in 1~100)-含まない>100
for(xin 2.10ステップ2)->2インクリメンタル
for(xin 10 downTo)->数字を減らす
💜 複文
while (x<10) {
	sum1 += ++x
}
💜 break文とcontinue文、ラベル
  • break:
  • continue:{}上の最後の行実行フロー
  • ラベル宣言:aaa@/ラベルを指す場合:@aaa
  • 📌 演算子
    💜 代入演算子
    =:割り当て
    💜 算術演算子
    +、-、*、/、%:加算、減算、乗算、除算、その他
    💜 展開演算子
    *A:Aアレイのデータのリスト
    val array1 = arrayOf(10, 20, 30)
    val list = asList(1, 2, *array1, 100, 200)
    list.forEach({println(it)})
    
    val list3 = listOf<String>("a", "b")
    some(*list3.toTypedArray())			// 배열 데이터로 변경해서 이용
    
    🖥
    1
    2
    10
    20
    30
    100
    200
    💜 複合代入演算子
    +=, -=, *=,/=, %=
    💜 増減演算子
    ++, --
    💜 論理演算子
    && : AND
    || : OR
    ! : NOT
    💜 一致演算子
    ==, != : 比較値
    ===, !== : オブジェクトの比較
    💜 比較演算子
    <, >, <=, >=
    💜 範囲演算子
    ..
    💜 Nullセキュリティ演算子
    ? val a: Int? -> 変数を空にする
    ?: A ?: B->Aが空の場合、Bを実行
    ?. A?.length->Aがnullの場合null、そうでない場合length
    !! A!!B->Aがnullでない場合のみBが実行され、nullである場合異常が発生します
    📌 演算子の再定義
    💜 演算子の再定義方法
    オペレータリザーバ
  • を再定義する関数の前に追加
    💜 演算子関数
    +a : a.unaryPlus()
    -a : a.unaryMinus()
    !a : a.not()
    a++ : a.inc()
    a-- : a.dec()
    a+b : a.plus(b)
    a-b : a.minus(b)
    ab : a.times(b)
    a/b : a.dev(b)
    a%b : a.rem(b) , a.mod(b)(deprecated)
    a..b : a.rangeTo(b)
    a in b : b.contains(a)
    a !in b : !b.contains(a)
    a[i] : a.get(i)
    a[I,j] : a.get(I,j)
    a[i] = b : a.set(I,b)
    a[I,j] = b : a.set(I,j,b)
    a() : a.invoke()
    a(i) : a.invoke(i)
    a(i,j) : a.invoke(I,j)
    a+=b : a.plusAssign(b)
    a-=b : a.minusAssign(b)
    a=b : a.timesAssign(b)
    a/=b : a.divAssign(b)
    a%=b : a.modAssign(b)
    a===b : a?.equals(b) ?: (b===null)
    a!=b : !(a?equals(b) ?: (b===null)
    a>b : a.compareTo(b) > 0
    a