Değere Göre Çağrı ve Referansa Göre Çağrı arasındaki fark
Değere Göre Çağrı ve Referansa Göre Çağrı Arasındaki Temel Fark
- Değere göre çağırma yönteminde orijinal değer değiştirilmezken Referansa göre çağırma yönteminde orijinal değer değiştirilir.
- Değere göre çağırmada değişkenin bir kopyası iletilirken Referansa göre çağırmada değişkenin kendisi iletilir.
- Değere göre çağırmada, gerçek ve resmi argümanlar farklı bellek konumlarında oluşturulacak, referansa göre çağırmada ise gerçek ve resmi argümanlar aynı bellek konumunda oluşturulacaktır.
- Değere göre çağırma, aşağıdaki gibi programlama dillerinde varsayılan yöntemdir C++, PHP, Visual Basic NET ve C#, Referansa göre çağırma ise yalnızca Java dil.
- Değere Göre Çağrı değişkenleri basit bir yöntem kullanılarak iletilirken Referansa Göre Çağrı işaretçilerinin değişkenlerin adresini depolaması gerekir.
Programlama dillerinde işlevler iki şekilde çağrılabilir: Değere Göre Çağrı ve Referansa Göre Çağrı olarak bilinir.
Değere Göre Çağrı Yöntemi Nedir?
Değere göre çağırma yöntemi, bir argümanın değerini o fonksiyonun resmi parametresine kopyalar. Bu nedenle ana fonksiyonun parametresinde yapılan değişiklikler argümanı etkilemez.
Bu parametre geçirme yönteminde, gerçek parametrelerin değerleri fonksiyonun formal parametrelerine kopyalanır ve parametreler farklı bellek konumlarında saklanır. Yani fonksiyonların içinde yapılan herhangi bir değişiklik arayanın gerçek parametrelerine yansımaz.
Referansa Göre Çağrı Yöntemi Nedir?
Referansa göre çağırma yöntemi, bir argümanın adresini resmi parametreye kopyalar. Bu yöntemde adres, işlev çağrısında kullanılan gerçek bağımsız değişkene erişmek için kullanılır. Bu, parametrede yapılan değişikliklerin geçen argümanı değiştirdiği anlamına gelir.
Bu yöntemde hafıza tahsisi gerçek parametrelerle aynıdır. Fonksiyondaki tüm işlemler asıl parametrenin adresinde saklanan değer üzerinde gerçekleştirilir ve değiştirilen değer aynı adreste saklanır.
Değere Göre Çağrı Yönteminin C Kodu Örneği
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; }
Çıktı:
before function calling 10 value is 11 after function calling 1-0
Çünkü main()'da bildirilen 'a' değişkeni, artırım()'daki 'x' değişkeninden farklıdır. Bu programda sadece değişken isimleri benzerdir ancak hafıza adresleri farklıdır ve farklı hafıza konumlarında saklanırlar.
Java Referansa Göre Çağrı yönteminin Kod Örneği
Public static void main(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; }
Çıktı:
Before call Value of a =10 After call Value of a =11
Çünkü 'a' olarak bildirilen değişken, main()'deki 'a' değişkenine referans veriyor/işaret ediyor. Burada değişken adı farklıdır, ancak her ikisi de aynı bellek adresi konumlarını işaret ediyor/referans veriyor.
Değere Göre Arama ve Referansa Göre Arama
parametreler | Değere göre çağrı | Referans ile arayın |
---|---|---|
Tanım | Bir işlevi çağırırken, değişkenleri kopyalayarak değerleri ilettiğinizde buna "Değerlere Göre Çağırma" adı verilir. | Bir fonksiyonu çağırırken programlama dilinde değişkenlerin değerlerini kopyalamak yerine değişkenlerin adresi kullanılır buna “Referansa Göre Çağırma” denir. |
Argümanlar | Bu yöntemde değişkenin bir kopyası iletilir. | Bu yöntemde bir değişkenin kendisi iletilir. |
Efekt | Değişkenin bir kopyasında yapılan değişiklikler, işlevin dışındaki değişkenin değerini hiçbir zaman değiştirmez. | Değişkendeki değişiklik, fonksiyonun dışındaki değişkenin değerini de etkiler. |
Değer değişikliği | Gerçek değişkenlerde herhangi bir değişiklik yapmanıza izin vermez. | İşlev çağrılarını kullanarak değişkenlerin değerlerinde değişiklik yapmanızı sağlar. |
Değişkenin geçirilmesi | Değişkenlerin değerleri basit bir yöntem kullanılarak iletilir. | Değişkenlerin adresini saklamak için işaretçi değişkenleri gereklidir. |
Değer değişikliği | Orijinal değer değiştirilmedi. | Orijinal değer değiştirildi. |
Bellek Konumu | Gerçek ve resmi argümanlar farklı şekillerde oluşturulacak hafıza yeri |
Gerçek ve resmi argümanlar aynı şekilde oluşturulacak hafıza yeri |
Güvenlik | Gerçek argümanlar devam ediyor değiştirilemedikleri için güvenli yanlışlıkla. |
Gerçek argümanlar değil Güvenli. Onlar yapabilir yanlışlıkla değiştirildiğinden argüman işlemlerini dikkatli bir şekilde yapmanız gerekir. |
Varsayılan | Birçok programlamada varsayılan gibi diller C++.PHP. Visual Basic NET ve C#. |
Çoğu kişi tarafından desteklenmektedir JAVA gibi programlama dilleri, ancak varsayılan olarak değil. |
C'de değere göre çağrı yöntemini kullanmanın avantajları
C'deki değere göre çağrının artıları/faydaları:
- Yöntem orijinal değişkeni değiştirmez, dolayısıyla verileri korur.
- Bir işlev çağrıldığında, gerçek argümanların gerçek içeriğini asla etkilemeyin.
- Resmi argümanlara aktarılan gerçek argümanların değeri, dolayısıyla resmi argümanda yapılan herhangi bir değişiklik gerçek durumları etkilemez.
Referansla çağrı yöntemini kullanmanın avantajları
Referans yöntemine göre çağrı kullanmanın artıları:
- İşlev, argümanın değerini değiştirebilir ve bu oldukça faydalıdır.
- Yalnızca tek bir değeri tutmak için yinelenen veriler oluşturmaz, bu da bellek alanından tasarruf etmenize yardımcı olur.
- Bu yöntemde yapılan argümanın bir kopyası yoktur. Bu nedenle çok hızlı işlenir.
- Yanlışlıkla yapılan değişiklikleri önlemenize yardımcı olur
- Kodu okuyan kişi, değerin fonksiyonda değiştirilebileceğini asla bilemez.
Değere göre çağrı yöntemini kullanmanın dezavantajları
Burada, değere göre çağrı yönteminin başlıca eksileri/dezavantajları verilmiştir:
- Gerçek parametrelerde yapılan değişiklikler aynı zamanda ilgili argüman değişkenlerini de değiştirebilir
- Bu yöntemde argümanların değişken olması gerekir.
- Bir işlev gövdesindeki bir değişkeni doğrudan değiştiremezsiniz.
- Bazen argüman karmaşık ifadeler olabilir
- Aynı değişken için bellek açısından verimli olmayan iki kopya oluşturuldu.
Referans yöntemiyle çağrı kullanmanın dezavantajları
Referans yöntemine göre çağrı kullanmanın başlıca dezavantajları şunlardır:
- Güçlü sıfır olmayan garanti. Referans alan bir fonksiyonun, girişin boş olmadığından emin olması gerekir. Bu nedenle boş kontrolün yapılmasına gerek yoktur.
- Referans olarak geçmek, fonksiyonun teorik olarak saf olmamasını sağlar.
- Ömür boyu garanti, referanslar açısından büyük bir sorundur. Bu özellikle lambdalar ve çok iş parçacıklı programlarla çalışırken tehlikelidir.