27

Aprill

Iluvõtted koodile III

Marek Tihkan 2 kommentaari

Toidupoodides tihti võib leida väga huvitavaid teid. Mõned noorendavad, teised salendavad, osa isegi annavad energiat juurde. Üldiselt selliste turundussiltide tõttu tekkib mul tung need järjest prügikasti visata (soovitan pigem minna korralikku tee poodi ja sealt mõned sobilikud teed endale välja valida). Kui prügikast oleks samalaadne nagu tarkvaraarenduse käigus loodud lisamismeetodid kollektsiooni, siis mul läheks ühe paki äraviskamiseks liigselt aega.

public class Teabag
{
  //..
}

public class Trashbin<TTrash>
{
  public void Add(TTrash trash)
  {
    //..
  }
}

var trashbin = new Trashbin<Teabag>();
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());
trashbin.Add(new Teabag());

Selle probleemi saab lahendada küllaltki lihtsalt kasutades params võtmesõna:

public class Trashbin<TTrash>
{
  public void Add(params TTrash[] trash)
  {
    //..
  }
}

var trashbin = new Trashbin<Teabag>();
trashbin.Add(
  new Teabag(),
  new Teabag(),
  new Teabag()
);

Alati ei pruugi seda vaja minna ärimudeli puhul, kuid küllaltki kasulik on seda kasutada registreerimistel, seadistustes:

ServiceLocator.Register(
  Requested.Service<ITrashbin>()
    .IsImplementedBy<Trashbin>(),
  Requested.Service<IShop>
    .IsConstructedBy(() => ShopFactory.Create())
);

Vahel tasub seda võtet kaaluda. Mida huvitavat olete ise selle küllaltki nurka jäetud võtmesõnaga korda saatnud?

Head teejoomist!

  • Share/Bookmark

KATEGOORIAD » Arendus

SILDID » , ,

2 kommentaari

1

Eriti mõnus selle params võtmesõna juures tundub mulle see, et eraldi argumentide asemel võib anda ka lihtsalt massiivi:

Teabag[] bags = {new Teabag(), new Teabag()};
trashbin.Add(bags);

Ruby võimaldab sama asja väljendada * abil:

def my_func(*args)

end

my_func(1, 2, 3, 4);

Kuid erinevalt C#-st tuleb massiivi argumendiks andmisel tärniga märku anda, et seda massiivi tuleks käsitleda kui eraldi argumente:

my_func(*[1, 2, 3, 4]);

Aga eks see erinevus tuleneb peamiselt sellest, et C# on staatiliselt- ja Ruby dünaamiliselt tüübitud.

Rene Saarsoo
16:17, 27. aprill

2

Nüüd saab vähemalt Rubyle midagi ette heita :)

Marek Tihkan
09:37, 28. aprill

Lisa kommentaar

  • * Kuvatakse kommentaari juures
  • * Ei publitseerita