5 Replies Latest reply on Apr 19, 2017 2:47 AM by akiva_atwood

    Functional Programming?

    akiva_atwood

      Just curious if anyone is using FP with their scripting?

       

      And to what degree?

       

      Thanks

        • 1. Re: Functional Programming?
          [Jongware] Most Valuable Participant

          Out of the box, InDesign supports JavaScript, AppleScript (Mac), and Visual Basic (Windows). Neither of these languages are well-known for their support of FP, which is a rather different programming paradigm -- these three fall under imperative programming languages. It may be possible to write a framework that runs pseudocode, written as FP ... but why would you? Do you see any advantages?

           

          That said, InDesign contains a smalllish ("poor man's", heh heh) implementation of an XSLT processor, and XSLT is a proper example of FP. However, its implementation is messy (I find it's prone to crashing, and refusing even the simplest of stylesheets and/or XML documents, so I avoid it and use an external XSLT processor), and it lacks integration with the main engine of InDesign, so all you can do is move some text around.

           

          Perhaps you can consider ScriptUI as some sort of Functional Programming, because this handles objects and message events.

          • 2. Re: Functional Programming?
            akiva_atwood Level 1

            Javascript DOES support FP -- that's why I asked.

             

            (I'm wondering if the investment would be worth the result)

            • 3. Re: Functional Programming?
              Vamitul Level 4

              Javascript does support FP. But:
              1) ExtendScript is not quite JavaScript, or more specifically is a implementation of EcmaScript (ECMA-262 3rd edition) stuck in the year 2000. Think of Internet Explorer 5.

              2) Most of the things that make FP possible in JS are missing in ExtendScript (Array.map, Array.filter etc). Tail-end recursivity is also a no-no and even normal recursivity is iffy because memory leaks.

              3) Some of the missing properties can be extended can be appended via polyfills etc, but ExtendScript is stuck in the year 2000, so it is missing things like Object.create and property attributes, some polyfills will fail or give strange results.

              4) InDesign's DOM is nat very well suited for FP because almost every access to it has side effects.

               

               

              All this being said, with a bit of work and preparation you can use FP, or at least FP-like coding (side effects being unavoidable in InDesign scripting). I do it whenever I can and it makes sense.

               

              LE: This GitHub - ExtendScript/extendscriptr: An NPM command line tool to compile modern javascript (es5 & es6) into executable e…  might also help you, but debugging is a major pain.

              2 people found this helpful
              • 4. Re: Functional Programming?
                akiva_atwood Level 1

                Thanks. This what what I was looking for;

                 

                Like everyone I wish Adobe would update ExtendScript...

                 

                I've Polyfilled map and filter so far -- and run into the object.create issue with a few of the prototypes. Memory leaks are a problem I've run into as well.

                 

                I'm going to keep experimenting -- like you said, it makes sense. (My original goal was to minimize the side effects but the other benefits of FP can come in useful, within the limits of the DOM)

                 

                And thanks for the link -- downloading now. Looks like it might be very useful

                 

                Thanks again

                • 5. Re: Functional Programming?
                  akiva_atwood Level 1

                  This might be useful too:

                   

                  https://github.com/fabianmoronzirfas/extendscript.prototypes

                   

                  HAven't had a chance to test them yet though