2016-04-05 19 views
2

Neden Kotlin'de döngü için bir val veya var türü belirtemezsiniz. Mesela benNeden Kotlin'de var/val döngüleri belirtemezsiniz?

for (var i in 0...data.size - 1) { 
     for (j in 0..bytes.size - 1) { 
      bytes[j] = data[i++]//cant do i++ in current kotlin because "i" is val 
     } 
     //do stuff 
    } 

yapabilmek istiyorum Ama bunun yerine bu

var i = 0 
    while (i < data.size) { 
     for (j in 0..bytes.size - 1) { 
      bytes[j] = data[i++] 
     } 
     //do stuff 
    } 
+5

Bu soru bana oldukça fikir veriyor. Muhtemelen https://discuss.kotlinlang.org veya https://kotlinlang.slack.com, bunun gibi dil tasarım sorularını tartışmak için daha iyi yerlerdir. Bana göre, bu yapıyı kafa karıştırıcı buluyorum çünkü, çünkü (öğelerdeki öğeler) {...} 'iterasyon anlambilimine sahiptir ve yapınız 'var' ile yapmaz, bunun yerine 'öğenin' değiştirilmesini gerektirir. vücutta, böylece daha fazla karışıklık getiriyor. – hotkey

cevap

3

Örneğiniz, Java'nın tipik for(int i=0;i<data.size;i++) örneğinden biraz farklıdır. Kotlin versiyonunda 'i' aslında i ++ 'nın anlam ifade etmediği bir aralığın bir elemanıdır. Bu sadece sahip olduğunuz dizinin bir dizin listesi olmasıdır.

Döngü için Kotlin'i kullanmanın yolu, Java'nın foreach döngüsüne for(i : indexes) daha yakındır.

+0

i.inc() kullanımı sorunumu çözdü. Açıkladığın için teşekkürler! –

2

Bence yapmak zorunda Kotlin en saygı kolaylaştırmak için çalışan bir dildir çünkü işlevsel programlama kavramları, bu tür davranışları yasaklamayı tercih eder. Ayrıca, ilk kodunuzun karşılaşabileceği olası bir sorun, bayt dizisinin veri dizisinden daha fazla öğeye sahip olduğu durumlarda bir OutOfBoundException olur.

İlgili konular