Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 6716931
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 26, 20262026-05-26T08:47:31+00:00 2026-05-26T08:47:31+00:00

I have a colleague in my team which is extensively using closures in our

  • 0

I have a colleague in my team which is extensively using closures in our projects developed in Delphi. Personal, I don’t like this because is making code harder to read and I believe that closures should be used ONLY when you need them.

In the other hand I’ve read Can someone explain Anonymous methods to me? and other links related to this, and I’m taking into account that maybe I’m wrong, so I’m asking you to give me some examples when is better to use closures instead of a ‘old-fashion’ approach (not using closures).

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-26T08:47:32+00:00Added an answer on May 26, 2026 at 8:47 am

    I believe that this question calls for a very subjective judgement. I am an old-school delphi developer, and inclined to agree with you. Not only do closures add certain risks (as David H points out in comments) they also reduce readability for all classically trained Delphi developers. So why were they added to the language at all? In Delphi XE, the syntax-formatting function and closures weren’t working well together, for example, and this increased my mistrust of closures; How much stuff gets added to the Delphi compiler, that the IDE hasn’t been fully upgraded to support? You know you’re a cranky old timer when you admit publically that you would have been happy if the Delphi language was frozen at the Delphi 7 level and never improved again. But Delphi is a living, powerful, evolving syntax. And that’s a good thing. Repeat that to yourself when you find the old-crank taking over. Give it a try.

    I can think of at least ten places where Anonymous methods really make sense and thus, reasons why you should use them, notwithstanding my earlier comment that I mistrust them. I will only point out the two that I have decided to personally use, and the limits that I place on myself when I use them:

    1. Sort methods in container classes in the Generics.Collections accept an anonymous method so that you can easily provide a sorting bit of logic without having to write a regular (non-anonymous) function that matches the same signature that the sort method expects. The new generics syntax fits hand in hand with this style, and though it looks alien to you at first, it grows on you and becomes if not exactly really nice to use, at least more convenient than the alternatives.

    2. TThread methods like Synchronize are overloaded, and in addition to supporting a single TThreadMethod as a parameter Thread.Synchronize(aClassMethodWithoutParameters), it has always been a source of pain to me, to get the parameters into that synchronize method. now you can use a closure (anonymous method), and pass the parameters in.

    Limits that I recommend in writing anonymous methods:

    A. I have a personal rule of thumb of only ONE closure per function, and whenever there is more than one, refactor out that bit of code to its own method. This keeps the cyclomatic complexity of your “methods” from going insane.

    B. Also, inside each closure, I prefer to have only a single method invocation, and its parameters, and if I end up writing giant blocks of code, I rewrite those to be methods. Closures are for variable capture, not a carte-blanche for writing endlessly-twisted spaghetti code.

    Sample sort:

     var     
       aContainer:TList<TPair<String, Integer>>;  
     begin   
      aContainer.Sort(    
        TMyComparer.Construct(
          function (const L, R: TPair<String, Integer>): integer
          begin
            result := SysUtils.CompareStr(L.Key,R.Key);
          end ) {Construct end}   );  {aContainer.Sort end}  
     end;
    

    Update: one comment points to “language uglification”, I believe that the uglification refers to the difference between having to write:

      x.Sort(     
        TMyComparer.Construct(
          function (const L, R: TPair<String, Integer>): integer
          begin
            result := SysUtils.CompareStr(L.Key,R.Key);
          end )   ); 
    

    Instead of, the following hypothetical duck-typed (or should I have said inferred types) syntax that I just invented here for comparison:

      x.Sort( lambda( [L,R], [ SysUtils.CompareStr(L.Key,R.Key) ] ) )
    

    Some other languages like Smalltalk, and Python can write lambdas more compactly because they are dynamically typed. The need for an IComparer, for example, as the type passed to a Sort() method in a container, is an example of complexity caused by the interface-flavor that strongly typed languages with generics have to follow in order to implement traits like ordering, required for sortability. I don’t think there was a nice way to do this. Personally I hate seeing procedure, begin and end keywords inside a function invocation parenthesis, but I don’t see what else could reasonably have been done.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

My colleague and I both have Outlook 2010 installed and we're using this with
I have this application (Windows form application written in Visual C++) from a colleague
My colleague and I have encountered some rather odd behavour. Our environments are Ubuntu
I have been told by my colleague that void foo(int** p) is used like
I have a colleague who has been using PHP's mysql_pconnect() without my knowing it.
I have to teach a colleague jQuery and I think this would be a
I don't use Tcl in my daily work. However, I have a colleague who
A colleague and I have been partnered on a project for school, in which
Myself and a colleague have a dispute about which of the following is more
I have a colleague in my company whose opinions I have a great deal

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.