Merhaba,
Aslında her ikisi birbirinden kıymetli ama aradaki farkı vurgulamak önemli. Özellikle de put()
'un aslında bir şeyi bir yere koymasında çok adeta fill()
gibi yapıp dolduruyor. Örneklere bakalım:
void main()
{
import std.algorithm.mutation : kopyala = copy;
import std.range : iDoldur = put;
enum len = 10;
auto buf = new int[len]; // önbellek
auto RAK = [7, 1, 2, 3]; // rakamlar
auto fark = len - RAK.length;
auto rem = RAK.kopyala(buf);
assert(buf[0..$ - fark] == [7, 1, 2, 3]);
import std.algorithm : swap;
buf[0].swap(rem[0]);
assert(rem == [7, 0, 0, 0, 0, 0]);
// rem'i DEVAMI ile doldur
auto DEVAMI = [4, 5, 6, 7, 8, 9];
rem.iDoldur(DEVAMI); // ile
assert(buf == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
import std.stdio : writeln;
rem.writeln; // [] (boş çünkü tüketildi)
// orta beşliyi eksileriyle doldur:
auto orta5 = buf[2..$-3];
orta5.iDoldur([-2, -3, -4, -5, -6]);
buf.writeln; // [0, 1, -2, -3, -4, -5, -6, 7, 8, 9]
}
Her ikisinin de isimlerini Türkçe cümle ile uyumlu olacak şekilde değiştirdim. Dikkat edilirse kopyalandıktan sonra boşta kalan aralığı dilim olarak döndürmesi copy()
'nin çok kıymetli olmasını sağlıyor.
Aynı şekilde put()
'un ona verilen aralığı/dilimi tüketmesine de dikkat edin ve son bir not:
Sanki copy()
'nin target'ı (destination) 2. parametreyken put()
'da bu yer değiştirmiş. Yani put'lanan aslında solda, yani hedef 1. parametre.
Başarılar...