Sobes.tech
Junior

Ի՞նչ է հղումով փոխանցումը։

sobes.tech AI

Պատասխան AI-ից

Նշանառուի փոխանցում (pass by reference) — մեխանիզմ է, որի ժամանակ ֆունկցիային փոխանցվում է հիշողության հասցե (հղում), որտեղ պահվում է արգումենտ փոփոխականի տվյալը: Նման դեպքում, ցանկացած փոփոխություն, որը կատարվում է ֆունկցիայի ներսում, անդրադառնում է սկզբնական փոփոխականի վրա՝ նրա սահմաններից դուրս:

Հիմնական հատկանիշները:

  • Հաղորդվում է հիշողության հասցե, ոչ թե արժեքի պատճենը:
  • Ֆունկցիան աշխատում է անմիջապես սկզբնական տվյալների հետ:
  • Փոփոխությունները, որոնք կատարվում են ֆունկցիայի ներսում, պահպանվում են նրա ավարտից հետո:
  • Հարմար է օբյեկտների, զանգվածների և այլ հղումային տիպերի համար շատ ծրագրավորման լեզուներում:
  • Որոշ լեզուներում (օրինակ՝ C++) հնարավոր է հստակ փոխանցել բազային տիպերը հղումներով կամ ցուցիչներով:

Python-ում օրինակ՝

# Ցուցակի փոխանցում (հղումային տիպ)
def modify_list(my_list):
    my_list.append(4) # Օրիգինալ ցուցակի փոփոխություն

data = [1, 2, 3]
modify_list(data)
print(data) # Արդյունք՝ [1, 2, 3, 4]

# Թվային արժեքի փոխանցում (պարզ տիպ՝ փոխանցում արժեքով Python-ում)
def modify_number(my_number):
    my_number += 1 # Ստեղծվում է տեղական պատճեն, որը փոխվում է

value = 5
modify_number(value)
print(value) # Արդյունք՝ 5, սկզբնական արժեքը չի փոխվել

C++-ում օրինակ՝

#include <iostream>

// Հղումով փոխանցում
void modify_value_ref(int &val) {
    val += 10; // Օրիգինալ փոփոխականի փոփոխություն
}

// Արժեքով փոխանցում (համեմատության համար)
void modify_value_copy(int val) {
    val += 10; // տեղական պատճենի փոփոխություն
}

int main() {
    int a = 5;
    modify_value_ref(a);
    std::cout << "After ref: " << a << std::endl; // Արդյունք՝ After ref: 15

    int b = 5;
    modify_value_copy(b);
    std::cout << "After copy: " << b << std::endl; // Արդյունք՝ After copy: 5

    return 0;
}

Առավելություններ՝

  • Էֆեկտիվ է մեծ տվյալների հետ աշխատելիս, քանի որ չի պահանջում պատճենավորում:
  • Հնարավորություն է տալիս ֆունկցիային փոխել մի քանի արժեքներ արգումենտների միջոցով:

Թերություններ՝

  • Կարող է դարձնել կոդը քիչ կանխատեսելի, եթե ֆունկցիան փոխում է արգումենտները առանց հստակ նշելու կամ փաստաթղթավորելու:
  • Պահանջում է զգուշություն՝ չտարածելու անօգտակար կողմնակի ազդեցություններ։