Che.4外部重複と法規整合


多才多芸の誤ったプログラミング学習をまとめた文章です.
範囲と繰り返し
範囲クラス
コトリンはrangesクラスを提供し、範囲を作成することができます.
val oneToFive: IntRange = 1..5
範囲タイプは、タイプ推定を行うこともできます.
val aToE = 'a'..'e'
元のタイプ以外の範囲を作成することもできます.
val seekHelp: ClosedRange<String> = "hell".."help"
..演算子には、前後の2つの値が含まれます.
フォワードリピート
コトリンでは、for文によって特定の範囲を繰り返すことができる.
for (i in 1..5) {
    print("$i, ")
}
// output: 1, 2, 3, 4, 5,
forゲートで使用されているivalなので変更できません.
非元のタイプの範囲にはデフォルトのiterator()関数はありません.繰り返し文で使用するには、拡張関数を作成する必要があります.
バックリピートdownTo()メソッドを使用して、減少した方向を繰り返すこともできます.
for (i in 5.downTo(1)) {
    print("$i, ")
}
// output: 5, 4, 3, 2, 1,
中位記号を使用すると、コードをより簡潔に書くことができます.
for (i in 5 downTo 1) {
    print("$i, ")
}
範囲内の値をスキップ
繰り返し文の最後の値をスキップするには、until()メソッドを使用して範囲を作成する必要があります.
for (i in 1 until 5) {
    print("$i, ")
}
// output: 1, 2, 3, 4,
繰り返し文では、step()メソッドを使用して一定の単位でスキップする必要があります.
for (i in 1 until 10 step 3) {
    print("$i, ")
}
// output: 1, 4, 7,
繰り返し文の特定の値をスキップするには、filter()メソッドを使用する必要があります.
for (i in (1..9).filter { it % 3 == 0 || it % 5 == 0}) {
    print("$i, ")
}
// output: 3, 5, 6, 9,
配列とリストの繰り返し
コーナーでは、arrayOf()の方法でアレイを作成できます.関数で使用される値は、アレイのタイプを決定します.
val array = arrayOf(1, 2, 3)
作成されたシナリオは、for文で繰り返すことができます.
for (e in array) {
    print($e, ")
}
// output: 1, 2, 3,
Cottlinでは、関数で使用される値に応じて、listOf()メソッドを使用してリストを作成できます.
var list = listOf(1, 2, 3)

for (e in list) {
    print($e, ")
}
// output: 1, 2, 3,
範囲内のインデックス値indices属性も使用できます.
val names = listOf("Tom", "Jerry", "Spike")
for (index in names.indices) {
    println("Position of ${names.get(index)} is $index")
}
インデックスと値は、withIndex()関数によって一度に取得することもできる.
for ((index, name) in names.withIndex()) {
    println("Position of $name is $index")
}
whenを使用する必要がある場合
whenwhen文は、if-else文を単純な式に変換することができる.
fun isAlive(alive: Boolean, neighbors: Int) = when {
    neighbors < 2 -> false
    neighbors > 3 -> false
    neighbors == 3 -> true
    else -> alive && neighbors == 2
}
cottlinコンパイラは、elseセクションがあるかどうか、およびすべての式入力の作成値があるかどうかを検証します.
値または式はwhenに渡すことができる.
fun whatToDo(dayOfWeek: String) = when (dayOfWeek) {
    "Saturday" -> "Relax"
    "Friday" -> "Party"
    else -> "Work"
}
->の後に{}が現れることもでき、この場合、最後の式は条件の結果を返す.可読性の点では、->の後に短い単一の式または関数呼び出しがあることを推奨する.したがって、{}を関数として定義し、その関数を呼び出すことを推奨します.
命令文->文としてwhenを使用する場合、whenは必要ありません.
fun printWhatToDo(dayOfWeek: String) {
    when (dayOfWeek) {
        "Saturday" -> println("Relax")
        "Friday" -> println("Party")
    }
}
elseと変数のスキャン
また、whenに一致する変数をwhenに制限することもできます.
fun systemInfo(): String = when (val core = getCoreNum()) {
    1 - > "1 core"
    in 2..16 -> "$core cores"
    else -> "$core cores!"
}