Sobes.tech
Intern

Proqramlaşdırma kontekstində "nüsxə ilə ötürmə" nə deməkdir?

sobes.tech Süni İntellekt

AI-dan cavab

"Nüsxə ilə ötürmə" (pass-by-value) funksiyanı və ya metod çağırıldıqda, dəyişənin dəyərinin nüsxəsinin ötürülməsi deməkdir, dəyişən özü deyil. Bu arqument daxilində funksiyada/metodda edilən hər hansı dəyişiklik, orijinal dəyişəni təsir etmir.

Swift-də, strukturlar (structs), enumlar (enums) və tuple-lər (tuples) dəyər tipləridir (value types) və standart olaraq nüsxə ilə ötürülür. Siniflər (classes), closures və funksiyalar isə istinad tipləridir (reference types) və istinad vasitəsilə ötürülür.

Swift-də nüsxə ilə ötürmə nümunəsi:

struct MyStruct {
    var value: Int
}

func modifyStruct(s: MyStruct) {
    var mutableS = s // s-nin nüsxəsi yaradılır
    mutableS.value = 20
    print("modifyStruct daxilində: \(mutableS.value)") // 20
}

var originalStruct = MyStruct(value: 10)
print("modifyStruct-dən əvvəl: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("modifyStruct-dən sonra: \(originalStruct.value)") // 10 (orijinal struktur dəyişməyib)

Bu nümunədə, modifyStruct funksiyası originalStruct-in nüsxəsini alır. mutableS.value-də edilən dəyişiklik, originalStruct.value-a təsir etmir.

İstinad ilə ötürmə nümunəsi (sinif istifadə edilərək):

class MyClass {
    var value: Int = 0
}

func modifyClass(c: MyClass) {
    c.value = 20
    print("modifyClass daxilində: \(c.value)") // 20
}

var originalClass = MyClass()
originalClass.value = 10
print("modifyClass-dən əvvəl: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("modifyClass-dən sonra: \(originalClass.value)") // 20 (orijinal obyekt dəyişib)

Burada, modifyClass funksiyası originalClass-a istinad alır. c.value-də edilən dəyişiklik, orijinal obyekti dəyişir.