VB’de Şablonların Gerekliliğini Anlamak

Programlamada, DRY prensibi—“Kendini Tekrar Etme”—temiz, verimli ve sürdürülebilir kod yazmanın temelidir. Bu prensip, C++‘taki şablonlar gibi soyutlama teknikleri için sınırlı desteğin bulunduğu Visual Basic for Applications (VBA) gibi dillerde çalışırken özellikle önem kazanır; zira gereksizlik sıklıkla ortaya çıkar.

Eğer birden fazla nesne tipi üzerinde benzer işlevleri gerçekleştiren kod parçacıkları ile karşılaşıyorsanız, daha verimli bir çözümü düşünmenin zamanı gelmiştir. Soru şu: Benzer işlemleri tekrarlayıcı koda başvurmadan nasıl birleştirebiliriz?

VBA’da şablonları (bir şekilde) nasıl kullanabileceğinizi veya mümkünse daha yeni araçları kullanarak hangi yöntemleri izleyebileceğimizi keşfedelim.

Problem: VBA’da Tekrarlayan Kod Parçacıkları

Aşağıdaki örneği düşünün; burada farklı türler için temelde aynı işlemi gerçekleştiren iki kod parçacığı var:

Dim i As Obj1
Set i = RoutineThatReturnsObj1()
i.property = newvalue

Dim i As Obj2
Set i = RoutineThatReturnsObj2()
i.property = newvalue

Bu durumda, her iki rutin de farklı nesne türleri üzerinde bir atama ve özellik ayarlama işlemi gerçekleştirmektedir. Programcı, fazla tekrarı azaltan daha genel bir çözüm oluşturmak istemektedir.

Amaçlanan Çözüm

Genel Bir Rutin Oluşturma

Tekrarlayan kodu ortadan kaldırmak için programcı, her iki durumu da ele alabilen bir rutin önerir:

Sub MyRoutine(o As ObjectType, r As RoutineToInitializeObject, newvalue As value) 
   Dim i As o
   Set i = r
   i.property = newvalue
End Sub

Ancak, yerel VBA’nın C++ gibi dillerdeki sofistike şablon yeteneklerine sahip olmadığını not etmek önemlidir. Bu yüzden, VBA’nın sınırlamaları içinde benzer bir etki sağlamak zor olabilir.

Alternatif: .NET ile VBA Kullanma

Geleneksel VBA, C++ gibi jenerikleri veya şablonları desteklemezken, Visual Studio Tools for Office (VSTO)‘ya geçiş yapmak makul bir alternatif sunar. Eğer yaklaşımınızı modernleştirmek isterseniz veya imkanınız varsa, .NET’te jenerikleri kullanabilirsiniz.

Jenerikleri Uygulama

İşte .NET bağlamında jenerikleri nasıl kullanabileceğinizi gösteren bir örnek:

Function MyRoutine(Of O)(R As Delegate, newvalue As Object) As O
    Dim i As O = CType(r.Method.Invoke(Nothing, Nothing), O)

    ' Kullanılacak özelliği belirlemek için başka bir parametreye ihtiyacınız var 
    ' ardından değeri ayarlamak için yansıma kullanmalısınız'
    i.property = newvalue 
    Return i
End Function

Bu örnekte:

  • Of O, çalışma zamanında belirtilebilen bir tür parametreyi temsil eder.
  • CType, çağrılan delege açısından döndürülen değeri istenen türe dönüştürmek için kullanılır.
  • Özellik değerini ayarlama işlemi için yansıma kullanılır, bu da geleneksel VBA’da mümkün olmayan dinamik bir erişim sağlar.

Sonuç

Geleneksel VBA, C++ gibi daha gelişmiş programlama dillerinde görülen şablonlama özelliklerini barındırmasa da, kod tekrarı sorununu azaltmanın alternatif yöntemleri vardır. .NET ile Visual Studio Tools for Office kullanarak, jenerikleri kullanarak dinamik ve yeniden kullanılabilir kod yapıları oluşturabilirsiniz.

VBA projelerinizde farklı nesne türleri arasında sık sık benzer kodlar yazıyorsanız, geliştirme ortamınızı modernleştirmeyi düşünün. Bu değişiklikleri benimsemek yalnızca kodun netliğini artırmakla kalmaz, aynı zamanda yazılım geliştirme best pratices’ler ile uyumlu hale getirir.

VB’nin sınırlamalarını ve olanaklarını anlayarak, daha temiz ve verimli kod yazabilir ve DRY prensibie etkili bir şekilde uyum sağlayabilirsiniz.