Aracılığıyla paylaş


Bağımsız Değişkenleri Değere ve Başvuruya Göre Geçirme (Visual Basic)

Visual Basic'te bir bağımsız değişkeni bir yordama değer olarak veya referans olarak geçirebilirsiniz. Bu, geçiş mekanizması olarak bilinir ve çağıran kodda bir yordamın bağımsız değişkenin altta yatan programlama öğesini değiştirip değiştiremeyeceğini belirler. Yordam bildirimi, ByVal veya ByRef anahtar sözcüğünü belirterek her parametre için geçiş mekanizmasını belirler.

Farklılıklar

Bir bağımsız değişkeni bir prosedüre geçirirken, birbirleriyle etkileşimde olan birkaç farklı ayrım olduğunu unutmayın.

  • Alttaki programlama öğesinin değiştirilebilir veya değiştirilemez olup olmadığı

  • Bir argümanın değiştirilebilir mi yoksa değiştirilemez mi olduğu

  • Bağımsız değişkenin değere göre mi yoksa başvuruya göre mi geçirildiği

  • Bağımsız değişken veri türünün bir değer mi yoksa başvuru türü mü olup olmadığı

Daha fazla bilgi için bkz. Değiştirilebilir ve Değiştirilemeyen Bağımsız Değişkenler Arasındaki Farklar ve Bağımsız Değişkeni Değere ve Başvuruya Göre Geçirme Arasındaki Farklar.

Geçiş Mekanizması Seçimi

Her bir bağımsız değişken için geçiş mekanizmasını dikkatlice seçmelisiniz.

  • Koruma. İki geçiş mekanizması arasında seçim yaparken en önemli ölçüt, çağrılan değişkenlerin değişime maruz kalma durumudur. Bağımsız değişken ByRef geçirmenin avantajı, yordamın o bağımsız değişken aracılığıyla çağıran koda bir değer döndürebilmesidir. Bağımsız değişkeni ByVal geçirmenin avantajı, bir değişkeni yordam tarafından değiştirilmeye karşı korumasıdır.

  • Performans. Geçiş mekanizması kodunuzun performansını etkileyebilir, ancak fark genellikle önemsizdir. Bu durumun bir istisnası, ByVal olarak geçirilen bir değer türüdür. Bu durumda, Visual Basic bağımsız değişkenin tüm veri içeriğini kopyalar. Bu nedenle, ByRef olarak geçmek, bir yapı gibi büyük bir değer türü için daha verimli olabilir.

    Başvuru türleri için yalnızca veri işaretçisi kopyalanır (32 bit platformlarda dört bayt, 64 bit platformlarda sekiz bayt). Bu nedenle, performansa zarar vermeden tür String veya Object olan değerleri bağımsız değişken olarak geçirebilirsiniz.

Geçiş Mekanizmasının Belirlenmesi

Yordam bildirimi, her parametre için geçiş mekanizmasını belirtir. Çağıran kod bir ByVal mekanizmayı geçersiz kılamaz.

Eğer bir parametre ByRef ile bildirilirse, çağıran kod bağımsız değişken adını çağrısında parantez içine alarak mekanizmayı ByVal yapmaya zorlayabilir. Daha fazla bilgi için bkz: Nasıl Yapılır: Bağımsız Değişkeni Değere Göre Geçirilmeye Zorlama.

Visual Basic'te varsayılan ayar, bağımsız değişkenleri değer üzerinden geçirmektir.

Bir Argümanı Değer Olarak Ne Zaman Geçirmeli

  • Bağımsız değişkenin temel aldığı çağıran kod öğesi değiştirilemez bir öğeyse, karşılık gelen ByVal parametresini bildirin. Değiştirilemez bir öğenin değerini hiçbir kod değiştiremez.

  • Eğer temel öğe değiştirilebilirse ancak yordamın bu öğenin değerini değiştirebilmesini istemiyorsanız, parametreyi ByVal olarak bildirin. Değer olarak iletilen değiştirilebilir bir öğenin değerini yalnızca çağıran kod değiştirebilir.

Ne Zaman Bir Argümanı Referansla Geçirmeli

  • Yordamın, çağıran koddaki temel öğeyi değiştirmesi için orijinal bir gereksinimi varsa, karşılık gelen ByRef parametresini bildirin.

  • Kodun doğru yürütülmesi, çağıran koddaki temel öğeyi değiştiren yordama bağlıysa parametresini ByRefbildirin. Eğer değeri olarak geçirirseniz veya çağıran kod bağımsız değişkeni parantez içine alıp ByRef geçirme mekanizmasını geçersiz kılarsa, yordam çağrısı istenmeyen sonuçlara neden olabilir.

Örnek

Açıklama

Aşağıdaki örnek, bağımsız değişkenlerin değere göre ne zaman ve referansa göre ne zaman geçirileceğini gösterir. Prosedürün hem Calculate hem de ByVal parametresi vardır. Bir faiz oranı rate ve bir para toplamı debt verildiğinde, yordamın görevi, debt'ün özgün değerine debt faiz oranını uygulamanın sonucu olan yeni bir değer hesaplamaktır. Çağıran koddaki bağımsız değişkenin değeri, debt bir ByRef parametresi olduğu için debt ile karşılık bulur ve yeni toplam bu değere yansıtılır. Parametresi rate bir ByVal parametredir çünkü Calculate değerini değiştirmemelidir.

Kod

Module Module1

    Sub Main()
        ' Two interest rates are declared, one a constant and one a 
        ' variable.
        Const highRate As Double = 12.5
        Dim lowRate = highRate * 0.6

        Dim initialDebt = 4999.99
        ' Make a copy of the original value of the debt.
        Dim debtWithInterest = initialDebt

        ' Calculate the total debt with the high interest rate applied.
        ' Argument highRate is a constant, which is appropriate for a 
        ' ByVal parameter. Argument debtWithInterest must be a variable
        ' because the procedure will change its value to the calculated
        ' total with interest applied.
        Calculate(highRate, debtWithInterest)
        ' Format the result to represent currency, and display it.
        Dim debtString = Format(debtWithInterest, "C")
        Console.WriteLine("What I owe with high interest: " & debtString)

        ' Repeat the process with lowRate. Argument lowRate is not a 
        ' constant, but the ByVal parameter protects it from accidental
        ' or intentional change by the procedure. 

        ' Set debtWithInterest back to the original value.
        debtWithInterest = initialDebt
        Calculate(lowRate, debtWithInterest)
        debtString = Format(debtWithInterest, "C")
        Console.WriteLine("What I owe with low interest:  " & debtString)
    End Sub

    ' Parameter rate is a ByVal parameter because the procedure should
    ' not change the value of the corresponding argument in the 
    ' calling code. 

    ' The calculated value of the debt parameter, however, should be
    ' reflected in the value of the corresponding argument in the 
    ' calling code. Therefore, it must be declared ByRef. 
    Sub Calculate(ByVal rate As Double, ByRef debt As Double)
        debt = debt + (debt * rate / 100)
    End Sub

End Module

Ayrıca bakınız