Junior
İstinadla ötürmə nədir?
sobes.tech Süni İntellekt
AI-dan cavab
İstinadla ötürmə (pass by reference) mexanizmi, funksiyaya yaddaş sahəsinin ünvanını (istinadını) ötürməklə həyata keçirilir və burada arqumentin məlumatları saxlanılır. Nəticədə, funksiyada dəyişdirilən hər hansı dəyişən, onun xaricindəki orijinal dəyişənə təsir edir.
Əsas xüsusiyyətlər:
- Yaddaş ünvanı ötürülür, dəyərin nüsxəsi deyil.
- Funksiya birbaşa orijinal məlumatlarla işləyir.
- Funksiya daxilində edilən dəyişikliklər onun sonunda da saxlanılır.
- Bu, çoxlu proqramlaşdırma dillərində obyektlərə, massivlərə və digər istinadlı məlumat tiplərinə aiddir.
- Bəzi dillərdə (məsələn, C++) primitiv tipləri göstəricilər və ya istinadlar istifadə etməklə açıq şəkildə ötürmək mümkündür.
Python kod nümunəsi:
# Siyahının ötürülməsi (istinadlı tip)
def modify_list(my_list):
my_list.append(4) # Orijinal siyahıya dəyişiklik
data = [1, 2, 3]
modify_list(data)
print(data) # [1, 2, 3, 4] göstərəcək
# Rəqəmin ötürülməsi (primitiv tip - Python-da dəyər ilə ötürmə)
def modify_number(my_number):
my_number += 1 # Lokal nüsxə yaradılır və dəyişdirilir
value = 5
modify_number(value)
print(value) # 5 göstərəcək - orijinal dəyər dəyişməyib
C++ nümunəsi:
#include <iostream>
// İstinadla ötürmə
void modify_value_ref(int &val) {
val += 10; // Orijinal dəyişəni dəyişir
}
// Dəyər ilə ötürmə (müqayisə üçün)
void modify_value_copy(int val) {
val += 10; // Lokal nüsxəni dəyişir
}
int main() {
int a = 5;
modify_value_ref(a);
std::cout << "İstinaddan sonra: " << a << std::endl; // 15 göstərəcək
int b = 5;
modify_value_copy(b);
std::cout << "Kopyadan sonra: " << b << std::endl; // 5 göstərəcək
return 0;
}
Üstünlüklər:
- Böyük məlumat həcmləri ilə işləyərkən səmərəlidir, çünki nüsxə tələb etmir.
- Funksiyaların arqumentlər vasitəsilə çoxsaylı dəyərləri dəyişməsinə imkan verir.
Çatışmazlıqlar:
- Funksiya arqumentləri ad və ya sənəddə açıq şəkildə göstərmədən dəyişdirsə, kodun proqnozlaşdırılması çətinləşir.
- İstənməyən yan təsirlərin qarşısını almaq üçün ehtiyatlı olmaq lazımdır.