W językach programowania funkcje można wywoływać na dwa sposoby: jako wywołanie według wartości i wywołanie przez odniesienie.
W tym samouczku dowiesz się,
- Co to jest metoda call by value?
- Co to jest metoda Call by Reference?
- Przykład wywołania według metody wartości
- Przykład wywołania za pomocą metody referencyjnej
- Call by Value vs. Call by Reference
- Zalety korzystania z metody Call by value
- Zalety korzystania z Call przez metodę referencyjną
- Wady korzystania z metody Call by value
- Wady używania Call przez metodę referencyjną
Co to jest metoda Call by Value?
Metoda Call by value kopiuje wartość argumentu do parametru formalnego tej funkcji. Dlatego zmiany wprowadzone w parametrze funkcji głównej nie wpływają na argument.
W tej metodzie przekazywania parametrów wartości rzeczywistych parametrów są kopiowane do formalnych parametrów funkcji, a parametry są przechowywane w różnych lokalizacjach pamięci. Zatem wszelkie zmiany wprowadzone w funkcjach nie są odzwierciedlane w rzeczywistych parametrach wywołującego.
KLUCZOWA RÓŻNICA
- W metodzie Call by value oryginalna wartość nie jest modyfikowana, natomiast w Call by reference, oryginalna wartość jest modyfikowana.
- W Call by value przekazywana jest kopia zmiennej, podczas gdy w Call by reference przekazywana jest sama zmienna.
- W Call by value, faktyczne i formalne argumenty zostaną utworzone w różnych lokalizacjach pamięci, podczas gdy w Call przez referencję, rzeczywiste i formalne argumenty zostaną utworzone w tej samej lokalizacji pamięci.
- Wywołanie według wartości jest metodą domyślną w językach programowania, takich jak C ++, PHP, Visual Basic NET i C #, podczas gdy wywołanie przez odwołanie jest obsługiwane tylko w języku Java.
- Call by Value, zmienne są przekazywane przy użyciu prostej metody, podczas gdy Call by Reference, wskaźniki są wymagane do przechowywania adresów zmiennych.
Co to jest metoda Call by Reference?
Call by reference kopiuje adres argumentu do parametru formalnego. W tej metodzie adres jest używany do uzyskania dostępu do rzeczywistego argumentu używanego w wywołaniu funkcji. Oznacza to, że zmiany wprowadzone w parametrze zmieniają przekazywany argument.
W tej metodzie alokacja pamięci jest taka sama, jak rzeczywiste parametry. Wszystkie operacje w funkcji są wykonywane na wartości przechowywanej pod adresem aktualnego parametru, a zmodyfikowana wartość będzie przechowywana pod tym samym adresem.
Przykład metody Call by Value
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;}
Wynik:
before function calling 10value is 11after function calling 1-0
Ponieważ zmienna zadeklarowana jako „a” w main () różni się od zmiennej „x” w funkcji Increment (). W tym programie tylko nazwy zmiennych są podobne, ale ich adresy pamięci są różne i przechowywane w różnych lokalizacjach pamięci.
Przykład metody Call by Reference
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;}
Wynik:
Before call Value of a =10After call Value of a =11
Ponieważ zmienna zadeklarowana jako „a” w odwołuje się / wskazuje na zmienną „a” w funkcji main (). Tutaj nazwa zmiennej jest inna, ale obie wskazują / odwołują się do tych samych lokalizacji adresowych pamięci.
Call by Value vs. Call by Reference
Parametry | Zadzwoń według wartości | Zadzwoń przez odniesienie |
---|---|---|
Definicja | Podczas wywoływania funkcji przekazywanie wartości przez kopiowanie zmiennych jest nazywane „Wywołaniem według wartości”. | Podczas wywoływania funkcji w języku programowania zamiast kopiowania wartości zmiennych używany jest adres zmiennych nazywany „Call By References”. |
Argumenty | W tej metodzie przekazywana jest kopia zmiennej. | W tej metodzie przekazywana jest sama zmienna. |
Efekt | Zmiany dokonane w kopii zmiennej nigdy nie modyfikują wartości zmiennej poza funkcją. | Zmiana zmiennej wpływa również na wartość zmiennej poza funkcją. |
Zmiana wartości | Nie pozwala na wprowadzanie żadnych zmian w rzeczywistych zmiennych. | Umożliwia wprowadzanie zmian wartości zmiennych przy użyciu wywołań funkcji. |
Przekazywanie zmiennej | Wartości zmiennych są przekazywane przy użyciu prostej metody. | Zmienne wskaźnikowe są wymagane do przechowywania adresów zmiennych. |
Modyfikacja wartości | Oryginalna wartość nie została zmodyfikowana. | Oryginalna wartość jest modyfikowana. |
Lokalizacja pamięci | Rzeczywiste i formalne argumenty zostaną utworzone w innym miejscu pamięci | Rzeczywiste i formalne argumenty zostaną utworzone w tym samym miejscu pamięci |
Bezpieczeństwo | Rzeczywiste argumenty pozostają bezpieczne, ponieważ nie można ich przypadkowo zmodyfikować. | Rzeczywiste argumenty nie są bezpieczne. Mogą zostać przypadkowo zmodyfikowane, więc musisz ostrożnie obchodzić się z operacjami na argumentach. |
Domyślna | Domyślnie w wielu językach programowania, takich jak C ++. PHP. Visual Basic NET i C #. | Jest obsługiwany przez większość języków programowania, takich jak JAVA, ale nie domyślnie. |
Zalety korzystania z metody Call by value
Zalety / zalety połączenia według metody wartości:
- Metoda nie zmienia oryginalnej zmiennej, więc zachowuje dane.
- Ilekroć funkcja jest nazywana, nigdy nie wpływaj na rzeczywistą zawartość rzeczywistych argumentów.
- Wartość rzeczywistych argumentów przekazanych do argumentów formalnych, więc wszelkie zmiany wprowadzone w argumencie formalnym nie mają wpływu na rzeczywiste przypadki.
Zalety korzystania z Call przez metodę referencyjną
Zalety korzystania z wywołania przez metodę referencyjną:
- Funkcja może zmienić wartość argumentu, co jest bardzo przydatne.
- Nie tworzy duplikatów danych do przechowywania tylko jednej wartości, co pomaga zaoszczędzić miejsce w pamięci.
- W tej metodzie nie ma kopii przedstawionego argumentu. Dlatego jest przetwarzany bardzo szybko.
- Pomaga uniknąć przypadkowych zmian
- Osoba czytająca kod nigdy nie wie, że wartość można zmodyfikować w funkcji.
Wady korzystania z metody Call by value
Oto główne wady / wady metody wywołania według wartości:
- Zmiany rzeczywistych parametrów mogą również modyfikować odpowiadające im zmienne argumentowe
- W tej metodzie argumenty muszą być zmiennymi.
- Nie możesz bezpośrednio zmienić zmiennej w treści funkcji.
- Czasami argumentem mogą być złożone wyrażenia
- Istnieją dwie kopie utworzone dla tej samej zmiennej, która nie jest wydajna pod względem pamięci.
Wady używania Call przez metodę referencyjną
Oto główne wady korzystania z wywołania przez metodę referencyjną:
- Silna gwarancja non-null. Funkcja pobierająca odwołanie musi upewnić się, że dane wejściowe mają wartość różną od null. Dlatego nie ma potrzeby przeprowadzania kontroli zerowej.
- Przekazywanie przez referencję sprawia, że funkcja nie jest czysta teoretycznie.
- Dożywotnia gwarancja to duży problem z referencjami. Jest to szczególnie niebezpieczne podczas pracy z lambdami i programami wielowątkowymi.