ターゲット・イテレーション:whileとforループ

3634 ワード

cottlinwhileループはjavaと同じです.
forはjavaのfor-eachサイクルにのみ存在します.
このforループは,集合の小バージョンに最もよく用いられる.
イテレーションとは?
結果を生成するためにプロシージャの繰り返しを表します.

どうじサイクル

while(조건) {
	/* ... */
}
そしてdo whileサイクル
do {
	/*...*/
} while(조건)

カウントのイテレーション:範囲とカウント


コトリンのfor使用範囲.
val oneToTen = 1..10
コトリンの範囲は両端を含む区間です.これは、最初の値1と最後の値10を含むことを意味する.
このようにある範囲に属する値を一定の順序で反復する場合を数列と呼ぶ.
fun fizzBuzz(i: Int) = when {
	i % 15 == 0 -> "FizzBuzz " // i가 15로 나눠 떨어지면(3 또는 5) FizzBuzz 반환
    i % 3 == 0 -> "Fizz " // i가 3으로 나눠떨어지면 Fizz 반환
    i % 5 == 0 -> "Buzz " // i가 5로 나눠떨어지면 Buzz 반환
    else -> "$i" // 다른 경우에는 그 수 자체를 반환
}

for ( i in 1..100 ) { // 1부터 100까지 순차적으로
	... print(fizzBuzz(i))
}

for (i in 100 downTo 1 step 2) { // 100부터 1까지 2씩 건너뛰어서 ( step을 증가값이 아니라 건너뛰는 개념으로 이해하자. 사실은 역방향 수열에서 절대값이 2만큼 증가하는 이터레이션이지만 고려하기 귀찮다.)
	... print(fizzBuzz(i))
}
最後の範囲を含めたくない場合はuntillを使用します.
for(x in 0 until size)

는

for(x in 0..size-1) 과 같다.

マップされたイテレーション

val binaryReps = TreeMap<Char, String>() // 키에 대해 정렬하기 위해 TreeMap을 사용한다.

for ( c in 'A'..'F' ) { // A부터 F까지 문자의 범위를 사용해 이터레이션한다.
	val binary = Integer.toBinaryString(c.toInt()) // 아스키 코드를 2진 표현으로 바꾸는 메서드
    binaryReps[c] = binary // c를 키로 c의 2진 표현을 맵에 넣는다.
}

for ((letter, binary) in binaryReps) {
	println("$letter = $binary")
}
...演算子を数値タイプの値と文字タイプの値に適用できます.
binaryReps[C]=binaryはjavaのbinaryRepsです.put(c,binary)に等しい.cottlin機能では、map[key]またはmap[key]=valueを使用して値を取得および設定できるので、より便利です.
var list = arrayListOf("10", "11", "1001")
for ((index, element) in list.withIndex()) { // 인덱스와 함께 컬렉션을 이터레이션 한다.
	println("$index: $element")
}
withIndexのアイデンティティについては、次の章を参照してください.

ローカルセットまたは範囲内の要素のチェック


in演算子を使用して、範囲に属する値を確認できます.逆に!inを使用して、どのバッテリが範囲外であるかを確認します.
fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'

-> println(isLetter('q')) // q가 포함되어 있는가?
true

-> println(isNotDigit('x')) // x가 포함되어 있지 않은가?
true
理科!in演算子はwhen式で使用できます.
fun recognize(c: Char) = when(c) {
	in '0'..'9' -> "It's a digit!"
    in 'a'..'z' in 'A'..'Z' -> "It's a letter!"
    else -> "I don't know..."
}

-> println(recognize('8'))
It's a digit!
Compareable(比較可能なインタフェースを実装するクラス)を使用する範囲では、その範囲内のすべてのオブジェクトを常に小バージョン化することはできません.たとえば、JavaとKotlinの間のすべての文字列を反復できますか?そうはいかない.ただし、in演算子を使用すると、常に値が範囲内にあるかどうかを決定できます.
-> println("Kotlin" in "Java".."Scala") // "Java" <= "Kotlin" && "Kotlin" <= "Scala" 와 같다.
true
StringのCompabiledインプリメンテーションでは2つの文字列をアルファベット順に比較するため,ここでのinチェックでも文字列をアルファベット順に比較する.
-> println("Kotlin" in setOf("Java", "Scala")) // 이 집합에는 Kotlin이 들어있지 않다.
false
上記の例のように、集合はin演算も使用できます.