[REQUEST] Add 'With…End With' Statement in Monkey2 language

Home Forums Monkey 2 Development [REQUEST] Add 'With…End With' Statement in Monkey2 language

This topic contains 9 replies, has 6 voices, and was last updated by  seyhajin 1 month ago.

Viewing 10 posts - 1 through 10 (of 10 total)
  • Author
    Posts
  • #9828

    seyhajin
    Participant

    Hi,

    Can you add the statement “With … End With” for the language Monkey2?
    It can be a good addition to the language, moreover, it allows to clarify the source code and avoids redundancies. Especially with objects that contains other objects, it can be very long … 🙂
    I have no idea about the work that it represents, I let you decide.

    Here is an example of an implementation in Visual Basic: https://docs.microsoft.com/en-us/dotnet/visual-basic/language-reference/statements/with-end-with-statement

    Example VB Code :

    Translate to Monkey2

    #9895

    Mark Sibly
    Keymaster

    Still can’t decide how much/if I like that.

    It doesn’t help that the example doesn’t make any sense (where is InfoLabel declared?) but I can’t really see myself using it, I guess if I had to initialize a massive struct or something…

    Any other opinions on this? I think Amiga blitz actually had something like this, but it looks like it didn’t have much of an impact on me!

    #9896

    scurty
    Participant

    Ahh I see it’s just so you don’t have to reference the class you’re messing with over and over as far as I can tell.

    GML from Game Maker as something like this only the syntax is a bit changed, it allows you to edit collections of objects by using “all” or a single parent class.

    This would be useful for some but I personally don’t really think it would be too necessary.
    Very cool concept though!

    #9899

    seyhajin
    Participant

    “With statement” work with ObjectClass expression only (class if you want use static function/variable or instance of class) and use “.” (dot) or “->”, if object’s pointer, in the block to avoid rewrite ObjectClass.

    Syntax :

    [ObjectExpression] : Required. An expression that evaluates to an object or class/struct
    [Statements] : Optional. One or more statements between ‘With’ and ‘End’ that may refer to members of an objects that’s produced by the evaluation of [ObjectExpression]
    [End] : Required. Terminates the definition of the “With” block

    Monkey2 example :

    #9900

    therevills
    Participant

    Isnt this the same and less verbose?

    #9901

    seyhajin
    Participant

    Obviously this has a real interest if there are many members called for the same object, or calling the members of these nested objects. In use it will always be much less verbose.

    #9902

    AdamStrange
    Participant

    mmm, good concept.

    Really bad code example though.

    This is a much better example of using that class concept:

     

    You don’t need to use ‘with’

    Just initialise with new and use add. there is no need to have functions cluttering up everything…

    #9905

    seyhajin
    Participant

    The right subject is to request to integrate “With” statement in Monkey2 language, no how to use an equivalent. 🙂

    Do you think this is possible to add this in Monkey2 simply?

    #9929

    Simon Armstrong
    Participant

    Having two ways of doing something makes a language more complicated not simpler.

    If you adopt use of methods for modifying objects and avoid any reference of fields from outside an objects implementation the programs you create will be easier to expand and maintain.

    #9943

    seyhajin
    Participant

    The “With … End” statement is considered as a “helper” to have a clearer and less verbose source code, neither more nor less, it does not modify the control structures. A bit like the use of “Alias” which allows to “simplify” a type of variable or function. For example, you can write “Rect <Float>” to “Rectf” in your “Rect <Float>” and with “Alias”, and nothing prevents you from writing “Rect <Float>” elsewhere of your application. There are two different ways to use it but quite compatible.

    1. You define an “ObjectClass” with “With” keyword as the current “Object” to use in the block
    2. Inside the “With” block, you use (dot) “.MyMethod or .MyProperty” directly without rewriting your declared “With”
    3. “End”
Viewing 10 posts - 1 through 10 (of 10 total)

You must be logged in to reply to this topic.