Tembel Değerlendirmeler Çözümleri
- Bu durumda tek sayılı indeksli elemanlar sabit bir değerle değiştirilecekler. Bu yüzden o parametreyi bir giriş değeri olarak kullanılacağı için
inbelirteciyle tanımlayabiliriz: - Sabit değerler kullanabilmeye ek olarak, bir işlevin döndürdüğü değerleri de kullanabilmek için değerin gönderildiği parametreyi
lazyolarak tanımlayabiliriz. Böylece işlev içindedeğerparametresine her erişildiğinde o işlev çağrılır ve o işlevin döndürdüğü değer kullanılır.
import std.stdio; void tekİndeksleriDeğiştir(int[] dizi, in int değer) { foreach (i, ref eleman; dizi) { const bool tekİndeks = ((i % 2) == 1); if (tekİndeks) { eleman = değer; } } } void main() { int[] dizi = [ 0, 11, 22, 33, 44, 55 ]; tekİndeksleriDeğiştir(dizi, 7); writeln(dizi); }
foreach içinde dizinin asıl elemanlarını değiştirmek için ref kullanıldığına da dikkat edin. Yoksa elemanların kendileri değil, kopyaları değiştirilirdi.
import std.stdio; import std.random; void tekİndeksleriDeğiştir(int[] dizi, lazy int değer) { foreach (i, ref eleman; dizi) { const bool tekİndeks = ((i % 2) == 1); if (tekİndeks) { eleman = değer; } } } void main() { int[] dizi = [ 0, 11, 22, 33, 44, 55 ]; // Sabit değerler de hâlâ çalışırlar tekİndeksleriDeğiştir(dizi, 7); writeln(dizi); // Şimdi bir işlevin döndürdüğü değerleri de // kullandırabiliyoruz tekİndeksleriDeğiştir(dizi, uniform(100, 200)); writeln(dizi); }