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.