Dasturlash kontekstida "nusxa orqali o'tkazish" nima?
sobes.tech AI
AIdan javob
"Nusxa olish orqali o'tkazish" (pass-by-value) deganda, funksiyani yoki metodni chaqirishda, o'zgaruvchining qiymatining nusxasi uzatiladi, o'zgaruvchi o'zi emas. Ushbu argument ichida funksiyadan/methoddan o'zgartirishlar, asl o'zgaruvchini ta'sir qilmaydi.
Swiftda, strukturalar (structs), enumlar (enums) va tuplelar (tuples) qiymat turlari (value types) bo'lib, odatda nusxa bilan o'tkaziladi. Sinflar (classes), yopilishlar (closures) va funksiyalar esa havola turlari (reference types) bo'lib, havola orqali o'tkaziladi.
Swiftda nusxa bilan o'tkazish misoli:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // s ning nusxasi yaratiladi
mutableS.value = 20
print("modifyStruct ichida: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("modifyStructdan oldin: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("modifyStructdan keyin: \(originalStruct.value)") // 10 (asl struktura o'zgarmadi)
Bu misolda, modifyStruct funksiyasi originalStruct ning nusxasini oladi. mutableS.value ni funksiyada o'zgartirish, originalStruct.value ga ta'sir qilmaydi.
Havola bilan o'tkazish misoli (sinf yordamida):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("modifyClass ichida: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("modifyClassdan oldin: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("modifyClassdan keyin: \(originalClass.value)") // 20 (asl obyekt o'zgardi)
Bu yerda, modifyClass funksiyasi originalClass ob'ektiga havola oladi. c.value ni bu havola orqali o'zgartirish, asl ob'ektni o'zgartiradi.