Page 1 of 2 1 2 LastLast
Results 1 to 15 of 19

Thread: return objectlist

  1. #1
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382

    return objectlist

    Soms vind ik het best onhandig zonder garbage collection. Voorbeeldje:

    manier (a) het liefst zo
    Code:
    for var error: TError in MyObject.GetErrorList do log(error.message);
    manier (b) safe
    Code:
    var list: TObjectList<TError> := MyObject.GetErrorList;
    try
      for var error: TError in list do log(error.message);
    finally
      list.Free;
    end;
    Zijn er goede manieren om e.e.a op manier (a) te kunnen doen? Zonder expliciet dedicated code te hoeven gebruiken?
    Al die try finally's wordt ik weleens moe van. Liever lui...

  2. #2
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Errorlist een interface maken ?

  3. #3
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Dat kan. Maar dat is niet generiek.

  4. #4
    Waarom niet? Spring kan het in ieder geval:

    Delphi Code:
    1. TCollections.CreateObjectList<T: class>(...): IList<T>;

    http://www.devjetsoftware.com/docs/s...)(Boolean).htm
    https://stackoverflow.com/a/22680202/511529
    1+1=b

  5. #5
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Ik zie hier wel iets interessants: het Shared<T> type
    https://pascal.today/2016/08/13/spring4d/

  6. #6
    Maar dan moet je JouwShared.Value gebruiken om daadwerkelijk bij het object te komen. Het is een handig trucje om objecten te maken die niet zelf een refcounted interface hebben, maar ik zou het gebruik ervan toch zoveel mogelijk proberen te voorkomen. Als je toch Spring gebruikt, zou ik eerder voor de IList i.c.m. CreateObjectList kiezen. Dan heb je een generic interface van een logisch type, i.p.v. een wrapper.
    1+1=b

  7. #7
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Mee eens. Ik heb wel zitten graven in Spring4D. De nullables heb ik "overgenomen" in mijn projecten :-).
    Toen ik zag hoe de property Count van een IList was geimplementeerd begon ik te twijfelen het te gebruiken. Ik ben er nog niet echt aan toegekomen Spring4D echt diepgaand te bekijken.

  8. #8
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Ik vind het sowieso wat vreemd. Of beter gezegd, een voorbeeld doet wat overgesimplificeerd aan. Je geeft bij een exceptie de lijst vrij, maar doet verder niks met de exceptie.

    Bij mijn vorige werkgever hadden we een (dbroot/webhub) webframework waar zulke constructies ook voorkwamen, maar meestal wil je dan toch echt wel loggen welk van de objecten in list de exceptie nu precies veroorzaakte. Als er geen serieuze kans op excepties is, of als zo'n exceptie toch tot afbraak leidt, dan is de hele try-finally overbodig.

    Voor dat soort dingen hadden gewoon een code template gedefinieerd dat je met een toets kon instantieren. Hoefde je alleen de exacte logmsg te construeren, met een ifdef voor verbose (development) en productie logging.

  9. #9
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Wel.. het zit er dik in dat ik binnen afzienbare tijd echt overga naar Visual Studio. Ben ik af van dat try finally free :-)

  10. #10
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Quote Originally Posted by EricLang View Post
    Wel.. het zit er dik in dat ik binnen afzienbare tijd echt overga naar Visual Studio. Ben ik af van dat try finally free :-)
    Visual studio is een IDE. Er zijn verschillende talen met verschillende benaderingen mbt geheugen (b.v. C# en F# resp traag en heel traag).

  11. #11
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    C# inderdaad. traag? hm... nergens een overwhelming proof daarvoor gezien.
    Het is ook alleen op mijn werk dat ik C# gebruik. Het heeft zo zijn voors en tegens. Maar begin steeds minder delphi fan te worden.

  12. #12
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Quote Originally Posted by EricLang View Post
    C# inderdaad. traag?
    Taal of runtime. Take your pick. GC is gewoon duur en een beetje onvoorspelbaar (*), punt. Soms kan je het hebben, soms niet, maar je moet die afweging IMHO wel altijd helder op het netvlies hebben.

    Pas met name op voor naieve benchmarks van GC talen vs niet-gced talen. Die zijn vaak erg verraderlijk omdat die vaak een hoge lokaliteit hebben (b.v. een wiskunde probleem in een enkele sourcefile met amper dynamische allocatie). De JIT kan het probleem vrijwel statisch naar een enkele trace compileren en de GC wordt sowieso al amper geraakt.

    Maar in een productie app heb je dynamische allocatie over meerdere sourcefiles en dan raak je hem echt wel!

    Het is ook alleen op mijn werk dat ik C# gebruik. Het heeft zo zijn voors en tegens. Maar begin steeds minder delphi fan te worden.
    Als je er mee weg kan komen, en geen reden heb dat beetje extra controle(**) aan te houden, waarom niet?

    Een van de redenen waarom ik bij Delphi blijf is omdat projecten hier krankzinnig uitdijen, en ik mijn handen vrij moet houden om er wat extra uit te kunnen persen.

    Als ik dat niet had, ging ik misschien ook wel naar C#. Bij mijn vorige werkgever (en dan heb ik het over 2005-2006) was ik al ongeveer zo ver. Meer moe om Delphi te moeten verdedigen en steeds dat extra beetje moeten geven om die keuze ter rechtvaardigen(***), dan echt overtuiging van superioriteit van .NET, maar het komt op hetzelfde neer. Als het niet genoeg voordeel oplevert, technisch, of op acquisitie vlak, weg ermee!

    Gewoon lekken C# doen, en als het mis gaat gewoon de handen om hoog gooien dat het niet aan jou ligt want het is een industrie standard , en gewoon naar huis met de kinderen gaan spelen! Laat de verkopers die de beloften deden het maar oplossen.

    (*) je weet immers niet wanneer die gaan GCen, en veel GC hebben een globaal lock en gooien alle threads plat. Ja, .NET en Java ook, althans tot zeg 2010-2012, daarna heb ik het niet meer zo gevolgd.
    (**) snelheid, nativenes, deployment
    (***) we hadden letterlijk een contract dat we een vijfcijferig getal aan boete kregen als we oude data (read uncommitted) lieten zien in een web veilingapp. Onze opvolger kreeg een contract waar (met ASP.NET) caching toegestaan was omdat het een industrie standaard was. Mijn schoenen vielen uit. Twee maten en zo.

  13. #13
    Ben ik af van dat try finally free :-)
    Marco en Jos geven je toch een alternatief ....

    Beetje slap argument Eric.

  14. #14
    Reader
    Join Date
    May 2002
    Location
    Holland
    Posts
    3,382
    Dat try finally free was een grapje. Dat ik steeds een stapje minder enthousiast wordt over delphi niet.

    @marcov: post met interesse gelezen. en verbazing over de *** natuurlijk.

  15. #15
    mov rax,marcov; push rax marcov's Avatar
    Join Date
    Apr 2004
    Location
    Ehv, Nl
    Posts
    10,357
    Ik ben ook minder enthousiast over Delphi, maar dat heeft meer met Embarcadero's koers te maken.

    Al kijk ik in deze baan meer naar C++ dan naar C#. Alle compiler features die maar niet komen (Embarcadero heeft vziw nog altijd geen AVX2 ondersteuning, laat staan intrinsics) zijn daar al sinds jaar en dag.

    Maar voor mij is de gehele conversie gewoon niet doendelijk, en voor erge gevallen kan ik nog altijd dlls in C++ maken.

    Thuis heb ik maar heel weinig in Delphi, vrijwel alles is FPC, en wat embedded C hier en daar.
    Last edited by marcov; 06-Jul-19 at 15:17.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •