英語の勉強をしようと思い、KotlinのYouTubeを見てみています。
勉強用に英訳したメモです。
- 筆者バックグラウンド
今回見た動画
英訳メモ
// 改善のベースになるプログラム // Javaっぽい書き方(個人的な感想) val fruits = list<String> = listOf("Apple", "Banana", "Cherry", "Durian") fun main() { for (index in 0 .. fruits.size - 1) { val fruit = fruits[index] println("$index: $fruit") } }
- 奇妙な -1 がある
- これは
..
演算子が終端も含むrangeを作成するため - -1せずにfruits.sizeまでループするとOutOfBoundsエラーになる
- Kotlinには
until
演算子というもう一つのrange作成方法がある0 .. fruits.size - 1
を0 until fruits.size
と置き換えることが出来る- Inlay hintsを見ても分かる通り*1、終端を含まないrangeを作成する
0 until fruits.size
の場合に作成されるrange- 0:含む
- fruits.size:含まない
- これでもまだfruits.sizeがインデックスの終端を示していることが分かりづらい
0 .. fruits.lastIndex
と記述することで同等となる- こっちの方が意味を理解しやすい
- さらに簡単に、独自にrangeを作成しない方法もある
0 .. fruits.lastIndex
をfruits.indices
と書き換えることができる
// 上記までの内容を修正した結果 val fruits = list<String> = listOf("Apple", "Banana", "Cherry", "Durian") fun main() { for (index in fruits.indices) { val fruit = fruits[index] println("$index: $fruit") } }
- forループの中で
fruits[index]
としてリストの値を取得しているが、冗長である*2 - 本当にやりたいのはfruitsを使った反復処理
fruits.withIndex
を使うと、val fruit = fruits[index]
を削除し更に簡潔に書ける
// withIndex版.kt val fruits = list<String> = listOf("Apple", "Banana", "Cherry", "Durian") fun main() { for ((index, fruit) in fruits.withIndex) { println("$index: $fruit") } }
// ラムダ式版.kt val fruits = list<String> = listOf("Apple", "Banana", "Cherry", "Durian") fun main() { fruits.forEachIndexed { index, fruit -> println("$index: $fruit") } }
- これで同じ意味の実装をもう少し短く記述することができる
英語表現勉強メモ
- weird
- 奇妙、変、不可解
- instead
- 代わり
- immediately
- 直ちに、すぐ