[Gambas-user] My confusion Re: New Syntax, SUPER && !comprehension(mine) Re.: SUPER example at gambasdoc

Stephen sbungay at ...3301...
Mon May 12 18:31:28 CEST 2014


  Hi Fabien!


> Le 12 mai 2014 12:12, "Stephen"<sbungay at ...3301...>  a écrit :
>> Hi Tobias, thanks for the reply, things got busy and I'm just getting
>> back to the keyboard.
>>
>> It was how things were being done in the (broken) GAMBASDOC example
>> confused me.
>> In one area the programmer is using the Add method of a string object
>> array, but this line
>>
>> $cPos[Key] = $aKey.Count
>>
>> caused me to pause.
>>
>> My thought at the time of reading it went something like this:
>>
>> "What being done here? There's been no use of the Add method! How can
>> you reference
>> something that doesn't yet exist and why is no error being thrown for
>> doing so"?
> A collection automatically add an non existant entry ... Or just assign the
> new value... If the value is null then the entry is deleted.
>
Yes, it is a convenient way of adding, editing, or deleting items from a 
collection,
but I personally will never use it. Why? Because IMHO it introduces
inconsistencies in the language. The short form of adding, updating, or
deleting items to/from a collection exactly mimics the syntax of assigning
a value to an array element, but they can not actually be used the same way;

' This throws an error
DIM X AS NEW Integer[]
X[0] = 1


' This doesn't
DIM X AS NEW Collection
X[0] = 1

Even GambasDoc lead me astray as it says a collection is a "class" that 
"acts like a read 
<http://gambasdoc.org/help/comp/gb/collection/_get?view> / write 
<http://gambasdoc.org/help/comp/gb/collection/_put?view> array.", but it
doesn't does it? The second example above doesn't work with an array 
unless the element has been Added
first, which IMHO is as it should be.

>> Now I think that the Add method of the collection is being implicitly
>> called using older
>> non OOP array assignment syntax.
>>
>> IMHO enforcing the explicit use of the object's Add method
>>
>> $cPos.Add($aKey.Count, Key)
>>
>> might take more keystrokes, but it definitely better communicates what
>> is being manipulated (an object vs an array) and what is being done
>> (Adding).
>>
>>
>> On 05/08/2014 09:28 AM, Tobias Boege wrote:
>>> On Thu, 08 May 2014, Stephen wrote:
>>>>      Looking at the thread "New syntax for using variables arguments in
> a
>>>> function call" I realized that I needed to really brush up on my
>>>> somewhat marginal understanding of the evolving (a good thing) GAMBAS
>>>> and OOP. Not fully understanding "SUPER" (I've never used it but can
> see
>>>> a use for it) I trotted off to Google and the GAMBAS documentation,
>>>> where much reading was done, and (as usual) more questions raised.
>>> If you write a class and inherit from another class, you can override
>>> methods and properties in your inheriting class. However, sometimes the
>>> inherited class does a pretty good job already and you don't want to
>>> reinvent the wheel for doing something. That's when Super comes into
> play
>>> because Super knows where the method and property implementations of the
>>> inherited class (the super class) are. So you can still call methods of
>>> the super class in your subclass that you have actually just overridden.
>>>
>>> In the example below, you want to skim data in ListBox' Add() method but
>>> you don't want to implement the actual addition of a new element so you
>>> resort to the original ListBox' Add() implementation - which is
> available
>>> as Super.Add() and knows how to do the thing.
>>>
>>>>      Studying the "SUPER" example at
> http://gambasdoc.org/hemp/lang/super,
>>>> I wondered at the purpose of a collection that seems not to be used but
>>>> once and some syntax in it's use in the example, which didn't make any
>>>> sense to my old brain. Below is a snippet from the example (where $cPos
>>>> is a collection, $aKey an Array of String Objects (I think) and Key a
>>>> string object;
>>>>
>>>> $cPos.Clear
>>>> $cPos[Key] = $aKey.Count
>>>> $aKey.Add(Key)
>>>>
>>>>      OK, the first line clears the collection, got it, and the last line
>>>> adds the contents of "String" to $aKey, got that.... but what does the
>>>> second line do? It looks like it is adding the count of elements in
>>>> $aKey to the collection $cPos... but in OOP I would use a method call
>>>> i.e. $cPos.Add(Key,Key). Oh, and in trying to implement the example
>>>> GAMBAS (3.5.3) complained that "ListBox.Add is incorrectly overridden".
>>>>
>>> $cPos[Key] = $aKey.Count followed by $aKey.Add(Key) will store the
> *index*
>>> of Key in the $aKey array in the $cPos collection, indexed by the
> *value* of
>>> the key. (Think about it.)
>>>
>>> That means if the user gives you a Key, you can look up the index of
> that
>>> key in the $aKey array using $cPos[Key], i.e. the statement
>>>
>>>     $aKey[$cPos[Key]]
>>>
>>> will always return Key (or raise an error, but see below for that). This
>>> also explains why the Collection is named $cPos.
>>>
>>> Not sure what that implies or what we can do with it and how
> $cPos.Clear()
>>> fits into the picture because it already deletes that additional
> information
>>> we collected...
>>>
>>> Either I don't get it or the example is just broken (I'd prefer the
> second
>>> option, of course :-)).
>>>
>>> Regards,
>>> Tobi
>>>
>>
>> --
>> Kindest Regards
>> Stephen A. Bungay, Prop.
>> Smarts On Site
>>
>>
>>
> ------------------------------------------------------------------------------
>> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
>> Instantly run your Selenium tests across 300+ browser/OS combos.
>> Get unparalleled scalability from the best Selenium testing platform
> available
>> Simple to use. Nothing to install. Get started now for free."
>> http://p.sf.net/sfu/SauceLabs
>> _______________________________________________
>> Gambas-user mailing list
>> Gambas-user at lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/gambas-user
> ------------------------------------------------------------------------------
> "Accelerate Dev Cycles with Automated Cross-Browser Testing - For FREE
> Instantly run your Selenium tests across 300+ browser/OS combos.
> Get unparalleled scalability from the best Selenium testing platform available
> Simple to use. Nothing to install. Get started now for free."
> http://p.sf.net/sfu/SauceLabs
> _______________________________________________
> Gambas-user mailing list
> Gambas-user at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gambas-user


-- 
Kindest Regards
Stephen A. Bungay, Prop.
Smarts On Site




More information about the User mailing list