В езиците за програмиране функциите могат да бъдат извикани по два начина: който е известен като Call by Value и Call by Reference.
В този урок ще научите,
- Какво е извикване чрез метод на стойност?
- Какво е методът Call by Reference?
- Пример за обаждане чрез метод на стойност
- Пример за обаждане чрез референтен метод
- Обаждане по стойност спрямо обаждане по референция
- Предимства на използването на метод Call чрез стойност
- Предимства на използването на Call чрез референтен метод
- Недостатъци на използването на метод Call чрез стойност
- Недостатъци на използването на Call чрез референтен метод
Какво представлява методът Call by Value?
Методът call by value копира стойността на аргумент във формалния параметър на тази функция. Следователно промените, направени в параметъра на основната функция, не засягат аргумента.
В този метод за предаване на параметри, стойностите на действителните параметри се копират във формалните параметри на функцията и параметрите се съхраняват в различни места на паметта. Така че всички промени, направени във функциите, не се отразяват в действителните параметри на повикващия.
КЛЮЧОВА РАЗЛИКА
- При метод за повикване чрез стойност оригиналната стойност не се променя, докато при метод за повикване чрез справка първоначалната стойност се променя.
- В Call чрез стойност се предава копие на променливата, докато в Call чрез препратка се предава самата променлива.
- В Call по стойност действителните и формални аргументи ще бъдат създадени в различни места в паметта, докато в Call чрез препратка действителните и официални аргументи ще бъдат създадени в едно и също място в паметта.
- Call by value е методът по подразбиране в езици за програмиране като C ++, PHP, Visual Basic NET и C #, докато Call by reference се поддържа само на Java език.
- Повикване по стойност, променливите се предават с помощта на ясен метод, докато Повикване чрез препратка, указателите са необходими за съхраняване на адреса на променливите.
Какво е методът Call by Reference?
Call чрез референтен метод копира адреса на аргумент във формалния параметър. В този метод адресът се използва за достъп до действителния аргумент, използван при извикването на функцията. Това означава, че промените, направени в параметъра, променят преминаващия аргумент.
При този метод разпределението на паметта е същото като действителните параметри. Всички операции във функцията се извършват върху стойността, съхранена на адреса на действителния параметър, и модифицираната стойност ще се съхранява на същия адрес.
Пример за метод за повикване по стойност
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
Тъй като променливата, декларирана като "a" в main (), се различава от променливата "x" в инкремент (). В тази програма само имената на променливи са сходни, но адресите им в паметта са различни и се съхраняват на различни места в паметта.
Пример за обаждане чрез референтен метод
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
Тъй като променливата, декларирана в 'a', се позовава / сочи към променлива 'a' в main (). Тук името на променливата е различно, но и двете сочат / препращат към едно и също местоположение на адреса на паметта.
Обаждане по стойност спрямо обаждане по референция
Параметри | Обаждане по стойност | Обадете се чрез справка |
---|---|---|
Определение | Докато извиквате функция, когато предавате стойности чрез копиране на променливи, тя е известна като „Обаждане чрез стойности“. | Докато извиквате функция, в програмния език вместо копиране на стойностите на променливите се използва адресът на променливите, който е известен като „Call By References. |
Аргументи | При този метод се предава копие на променливата. | В този метод се предава самата променлива. |
Ефект | Промените, направени в копие на променлива, никога не променят стойността на променливата извън функцията. | Промяната в променливата също влияе върху стойността на променливата извън функцията. |
Промяна на стойността | Не ви позволява да правите промени в действителните променливи. | Позволява ви да правите промени в стойностите на променливи, като използвате извиквания на функции. |
Предаване на променлива | Стойностите на променливите се предават по ясен метод. | Променливите на указателя са необходими за съхраняване на адреса на променливите. |
Модификация на стойността | Оригиналната стойност не е променена. | Оригиналната стойност е променена. |
Местоположение в паметта | Действителни и официални аргументи ще бъдат създадени на различно място в паметта | Действителни и официални аргументи ще бъдат създадени на едно и също място в паметта |
Безопасност | Действителните аргументи остават в безопасност, тъй като не могат да бъдат модифицирани случайно. | Действителните аргументи не са безопасни. Те могат да бъдат случайно модифицирани, така че трябва да обработвате внимателно операции с аргументи. |
По подразбиране | По подразбиране в много езици за програмиране като C ++. PHP. Visual Basic NET и C #. | Поддържа се от повечето езици за програмиране като JAVA, но не по подразбиране. |
Предимства на използването на метод Call чрез стойност
Плюсове / ползи от обаждане чрез метод на стойност:
- Методът не променя оригиналната променлива, така че запазва данни.
- Винаги, когато функция се извика, никога не засягайте действителното съдържание на действителните аргументи.
- Стойност на действителните аргументи, предадени на официалните аргументи, така че всички промени, направени във формалния аргумент, не засягат реалните случаи.
Предимства на използването на Call чрез референтен метод
Плюсове за използване на обаждане чрез референтен метод:
- Функцията може да промени стойността на аргумента, което е доста полезно.
- Той не създава дублирани данни за задържане само на една стойност, която ви помага да спестите място в паметта.
- При този метод няма копие на направения аргумент. Поради това се обработва много бързо.
- Помага ви да избегнете промени, направени по погрешка
- Човек, който чете кода, никога не знае, че стойността може да бъде модифицирана във функцията.
Недостатъци на използването на метод Call чрез стойност
Ето основните недостатъци / недостатъци на обаждане чрез метод на стойност:
- Промените в действителните параметри могат също да променят съответните променливи на аргумента
- В този метод аргументите трябва да са променливи.
- Не можете директно да промените променлива в тялото на функцията.
- Понякога аргументът може да бъде сложен израз
- Има две копия, създадени за една и съща променлива, която не е ефективна за паметта.
Недостатъци на използването на Call чрез референтен метод
Ето основните недостатъци на използването на обаждане чрез референтен метод:
- Силна ненулева гаранция. Функция, приемаща препратка, трябва да се увери, че входът не е нулев. Следователно не е необходимо да се прави нулева проверка.
- Преминаването по препратка прави функцията не чиста теоретично.
- Доживотна гаранция е голям проблем с референции. Това е особено опасно при работа с ламбда и многонишкови програми.