Tek Fotoluk İpucu-18 (5 Parametreden Fazlası için Struct)

Merhaba Arkadaşlar,

Çok sevgili Juval Löwy der ki : "Bir metod 5den fazla parametre alıyorsa, verileri Struct tipini kullanarak aktarın". Meşhur kod standartlarından birisi olan bu kurala kaçımız ne kadar uyuyoruz acaba? Oysaki kullanımı çok basit. İşte basit bir örnek Winking smile

PhotoTrick18

StructForParameters.rar (22,91 kb)

Yorumlar (5) -

  • Löwy ağabey bence bunu kodun daha okunabilir olması için demiş.
    Ancak methodun parametrelerinde "new" kullanarak struct yaratırsan çok okunabilir olmuyor bence. Tersine daha karışık oluyor. Yukarıdakinin yerine şu şekilde çağırmak çok daha güzel, daha temiz.

    Layer layer = new Layer(X=1,Y=0,Z=90);
    layer.Players = new List<Player>();
    CreateLayer(layer);

  • Bunun temel sebebi guzel, derli toplu gozuksun diye mi, yoksa performans bakimindan bir katkisi varmi?

    Tesekkurler
  • Sadece derli toplu gözüksün, daha sonra bakıldığında kolay anlaşılsın diye.
    Ancak Burak Hoca'nın verdiği örnekteki gibi parametrelerde iç içe girmiş 2-3 new ile kullanınca pek derli toplu gözükmüyor.

    Örnekte new in parametresi 6 tane olmuş.

    Erkan
  • Struct RAM in hangi bloğunu kullanır (class dan farkı)??? parametre olarak verilen değişkenler ValueType ise bence kullanmak okunurluğu kolaylaştırır. Ancak ReferenceType olan parametreler için performans sorunları yaratır (büyük ölçekli projelerde). Metodları aşırı yükleyerek daha efektif çözümler üretilebilir, bence çok sayıda parametre içeren metodlar yazılmaktan kaçınılmalı. Bu noktada design patterns 'lere çok iş düşmekte.
  • 5'ten fazla parametre olan bir metod çağrıldığında bu parametrelerin toplanacağı adresler ramde farklı farklı olacaktır. Value type'lar için stackten reference type'lar için heapten gelecekler.

    Struct kullanarak tüm veriyi stackte toplayıp metoda pass etmek performans açısından etkisi olur mu bilmiyorum. Ancak sadece kod okunabilirli��i için olsaydı struct yerine class'ta da toplanabilirdi.

    Acaba nedendir? Hocam cevap verebilir misiniz? Teşekkürler.

Yorum ekle

Loading