Sobes.tech
Intern

Č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.