Čo znamená "odovzdanie kópiou" v kontexte programovania?
sobes.tech AI
Odpoveď od AI
"Prechod hodnotou" (pass-by-value) znamená, že pri volaní funkcie alebo metódy sa odovzdá kópia hodnoty premennej, nie samotná premenná. Akékoľvek zmeny vykonané v tomto argumente vo vnútri funkcie/metódy neovplyvnia pôvodnú premennú.
V Swift sú štruktúry (structs), enumy (enums) a tuple (tuples) typy hodnôt (value types) a predvolene sa odovzdávajú kópiou. Triedy (classes), uzávierky (closures) a funkcie sú referenčné typy (reference types) a odovzdávajú sa odkazom.
Príklad odovzdania hodnotou v Swift:
struct MyStruct {
var value: Int
}
func modifyStruct(s: MyStruct) {
var mutableS = s // Vytvorí sa kópia s
mutableS.value = 20
print("Vo vnútri modifyStruct: \(mutableS.value)") // 20
}
var originalStruct = MyStruct(value: 10)
print("Pred modifyStruct: \(originalStruct.value)") // 10
modifyStruct(s: originalStruct)
print("Po modifyStruct: \(originalStruct.value)") // 10 (pôvodná štruktúra sa nezmenila)
V tomto príklade funkcia modifyStruct prijíma kópiu originalStruct. Zmena mutableS.value vo vnútri funkcie neovplyvní originalStruct.value.
Príklad odovzdania odkazom (s použitím triedy):
class MyClass {
var value: Int = 0
}
func modifyClass(c: MyClass) {
c.value = 20
print("Vo vnútri modifyClass: \(c.value)") // 20
}
var originalClass = MyClass()
originalClass.value = 10
print("Pred modifyClass: \(originalClass.value)") // 10
modifyClass(c: originalClass)
print("Po modifyClass: \(originalClass.value)") // 20 (pôvodný objekt bol zmenený)
Tu funkcia modifyClass prijíma odkaz na objekt originalClass. Zmena c.value cez tento odkaz mení pôvodný objekt.