У програмским језицима, функције се могу позивати на два начина: који је познат као позив по вредности и позив по референци.
У овом упутству ћете научити,
- Шта је позив методом вредности?
- Шта је метода позивања референцом?
- Пример позива методом вредности
- Пример позива референтном методом
- Позив према вредности у односу на позив по референци
- Предности коришћења Цалл би валуе методе
- Предности коришћења позива референтном методом
- Мане употребе методе позива по вредности
- Недостаци коришћења позива референтном методом
Шта је метода позива помоћу вредности?
Метода позива по вредности копира вредност аргумента у формални параметар те функције. Према томе, промене извршене у параметру главне функције не утичу на аргумент.
У овом начину преношења параметара, вредности стварних параметара се копирају у формалне параметре функције, а параметри се чувају на различитим меморијским локацијама. Дакле, све промене направљене унутар функција не одражавају се у стварним параметрима позиваоца.
КЉУЧНА РАЗЛИКА
- У методу Цалл би валуе оригинална вредност се не мења, док се у Цалл би валуе методу мења оригинална вредност.
- У Цалл би валуе прослеђује се копија променљиве док се у Цалл би референце прослеђује сама променљива.
- У позиву по вредности, стварни и формални аргументи ће се креирати на различитим меморијским локацијама, док ће се у позиву по референци, стварни и формални аргументи креирати на истој меморијској локацији.
- Позив по вредности је задата метода у програмским језицима као што су Ц ++, ПХП, Висуал Басиц НЕТ и Ц #, док је Позив путем референце подржан само Јава језик.
- Цалл би Валуе, променљиве се прослеђују једноставном методом, док Цалл би Референце, показивачи су потребни за чување адресе променљивих.
Шта је метода позивања референцом?
Позив методом референце копира адресу аргумента у формални параметар. У овом методу адреса се користи за приступ стварном аргументу који се користи у позиву функције. То значи да промене направљене у параметру мењају аргумент који пролази.
У овој методи, додељивање меморије је исто као и стварни параметри. Све операције у функцији извршавају се на вредности сачуваној на адреси стварног параметра, а измењена вредност ће бити сачувана на истој адреси.
Пример методе позива помоћу вредности
void main() {int a = 10,void increment(int);Cout << "before function calling" << a;increment(a);Cout << "after function calling" << a;getch();void increment(int x) {int x = x + 1;Cout << "value is" << x;}
Излаз:
before function calling 10value is 11after function calling 1-0
Зато што се променљива декларисана 'а'ин маин () разликује од променљиве' к 'у инкременту (). У овом програму су само имена променљивих слична, али њихове меморијске адресе су различите и чувају се на различитим меморијским локацијама.
Пример позива методом референце
Public static void(string args[]) {int a = 10;System.out.println("Before call Value of a = ", a);Void increment();System.out.println("After call Value of a = ", a);}Void increment(int x) {int x = x + 1;}
Излаз:
Before call Value of a =10After call Value of a =11
Јер променљива декларисана са 'а' у референцира / показује на променљиву 'а' у маин (). Овде се име променљиве разликује, али оба упућују / упућују на исте локације адреса меморије.
Позив према вредности у односу на позив по референци
Параметри | Позив по вредности | Позовите путем референце |
---|---|---|
Дефиниција | Док позивате функцију, када преносите вредности копирањем променљивих, она је позната као „Позив према вредностима“. | Током позива функције, у програмском језику се уместо копирања вредности променљивих користи адреса променљивих која је позната као „Позив референцама“. |
Аргументи | У овој методи се прослеђује копија променљиве. | У овој методи се преноси сама променљива. |
Ефекат | Промене направљене у копији променљиве никада не мењају вредност променљиве изван функције. | Промена променљиве такође утиче на вредност променљиве изван функције. |
Промена вредности | Не дозвољава вам да извршите било какве промене у стварним променљивим. | Омогућава вам да направите промене у вредностима променљивих помоћу позива функције. |
Пролазак променљиве | Вредности променљивих се преносе једноставном методом. | Показатељи променљиве су потребни за чување адресе променљивих. |
Модификација вредности | Оригинална вредност није измењена. | Оригинална вредност је измењена. |
Локација меморије | Стварни и формални аргументи ће се створити на различитим меморијским локацијама | Стварни и формални аргументи ће се створити на истој меморијској локацији |
Сигурност | Стварни аргументи остају сигурни јер се не могу случајно модификовати. | Стварни аргументи нису сигурни. Могу се случајно изменити, тако да морате пажљиво руковати операцијама аргумената. |
Уобичајено | Подразумевано у многим програмским језицима попут Ц ++. ПХП. Висуал Басиц НЕТ и Ц #. | Подржава га већина програмских језика попут ЈАВА, али не као подразумевани. |
Предности коришћења Цалл би валуе методе
Предности / користи позива методом вредности:
- Метода не мења оригиналну променљиву, тако да чува податке.
- Кад год се функција зове, никада не утичите на стварни садржај стварних аргумената.
- Вредност стварних аргумената прослеђених формалним аргументима, тако да све промене извршене у формалном аргументу не утичу на стварне случајеве.
Предности коришћења позива референтном методом
Предности коришћења позива референтном методом:
- Функција може променити вредност аргумента, што је врло корисно.
- Не ствара дупликате података који садрже само једну вредност која вам помаже да уштедите меморијски простор.
- У овој методи не постоји копија изнетог аргумента. Због тога се обрађује врло брзо.
- Помаже вам да избегнете грешком учињене промене
- Особа која чита код никада не зна да се вредност може променити у функцији.
Мане употребе методе позива по вредности
Ево главних недостатака / недостатака позива методом вредности:
- Промене стварних параметара могу такође изменити одговарајуће променљиве аргумената
- У овој методи, аргументи морају бити променљиве.
- Не можете директно променити променљиву у телу функције.
- Некада аргумент може бити сложени израз
- Постоје две копије креиране за исту променљиву која није ефикасна у меморији.
Недостаци коришћења позива референтном методом
Ево главних недостатака коришћења позива помоћу референтне методе:
- Снажна неважећа гаранција. Функција која узима референцу мора бити сигурна да унос није нулл. Због тога не треба вршити нулл проверу.
- Пролазак референцом чини функцију теоријски нечистом.
- Доживотна гаранција је велики проблем са референцама. Ово је посебно опасно када радите са ламбдама и програмима са више нити.