Mauro,

> On 6. 2. 2025, at 18:24, Mauro Molinari <mauro...@tiscali.it> wrote:
> Isn't the contract of List requiring to throw an IndexOutOfBoundsException 
> though, in case index is invalid?

Far as the API contract goes, I guess it would be probably an undocumented 
behaviour (which actually makes sense, allowing each class to behave as it[s 
creator] wished), given

an index value (-self.size() <= idx < self.size()) 
<https://docs.groovy-lang.org/latest/html/groovy-jdk/java/lang/Iterable.html#getAt(int)>

neither Collection 
<https://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/Collection.html#getAt(java.lang.String)>
 nor List 
<https://docs.groovy-lang.org/latest/html/groovy-jdk/java/util/List.html#getAt(int)>
 itself seem to add anything more of importance to that.

Note the Java documentation, well, for one, is not that relevant for Groovy ;), 
but far as you want to go with it, it knows neither getAt nor indices of 
course; and for get, its contract holds:

===
groovy:000> a=[1]
===> [1]
groovy:000> a[1]
===> null
groovy:000> a.getAt(1)
===> null
groovy:000> a.get(1)
ERROR java.lang.IndexOutOfBoundsException:
Index: 1, Size: 1
groovy:000> 
===

In practice, List indices >= size always returned null and never threw far as I 
can recall.

All the best,
OC

> In data 6 Febbraio 2025 18:00:36 OCsite <o...@ocs.cz> ha scritto:
>> Eric,
>> 
>> I know of no oficial documentation explaining this (which does not mean 
>> there's none; perhaps I've just missed it).
>> 
>> Some time ago Paul wrote unofficially that a list can be sort of seen as a 
>> map from indices to values, and as such, it is expected that non-existing 
>> indices return null instead of throwing.
>> 
>> The question is whether the technical background (an array can be hardly 
>> considered a map, after all) or the polymorphic API (whatever it is, we want 
>> that indexing works consistently) should win. Myself I would vote for the 
>> latter, but alas I have no idea of the original intention (but for the 
>> quoted documentation line, which seems rather to support the latter too). 
>> That's why I've asked :)
>> 
>> On the other hand, there's at least one more polymorphic indexing available, 
>> the one with strings; and in there non-existent indices throw too, quite 
>> consistently with arrays.
>> 
>> Thanks and all the best,
>> OC
>> 
>>> On 6. 2. 2025, at 17:27, Milles, Eric (TR Technology) via dev 
>>> <dev@groovy.apache.org> wrote:
>>> 
>>> Is there any explicit statement about how indexing beyond the end of a 
>>> collection should work?  Does it extend the collection or just return null. 
>>>  Does a withDefault collection do something different?
>>> 
>>> In general, arrays and collections should work the same, so the statement 
>>> in the working with arrays section is a good one.  In the matter of 
>>> indexing beyond the end of the array or collection, what is the shared 
>>> behavior supposed to be:
>>> 
>>> return default value for type — aka null for reference and 0/false for 
>>> primitives
>>> throw out-of-bounds exception
>>> something else?
>>> 
>>> From: OCsite <o...@ocs.cz <mailto:o...@ocs.cz>>
>>> Sent: Thursday, February 6, 2025 10:11 AM
>>> To: dev@groovy.apache.org <mailto:dev@groovy.apache.org> 
>>> <dev@groovy.apache.org <mailto:dev@groovy.apache.org>>
>>> Subject: [EXT] Re: a bug or my fault?
>>>  
>>> External Email: Use caution with links and attachments.
>>> 
>>> The overall intention is that whether you are using an array or a 
>>> collection, the code for working with the aggregate remains the same 
>>> <https://urldefense.com/v3/__https://docs.groovy-lang.org/latest/html/documentation/*_working_with_arrays__;Iw!!GFN0sa3rsbfR8OLyAw!ezrONlzs3yG6lC6cFTDF2ASi61brEmoT2ix7QriL2Tg7vhHIhMXTwpPoYFbS77qNBafdycrQlnIZgRDxsA$>.
>>> 
>>> In this particular case alas that good and noble intention does not quite 
>>> work, and I wonder whether that is intentional (forgive the pun) or a 
>>> mistake to be fixed in future, when there's nothing more pressing to do.
>>> 
>>> On 6. 2. 2025, at 13:30, Søren Berg Glasius <soe...@glasius.dk 
>>> <mailto:soe...@glasius.dk>> wrote:
>>> 
>>> You assign 'b' as an Array, and arrays works differently than lists. Arrays 
>>> are bound to their length, so 'a[2]' should report out of bounds as it is 
>>> not 3 elements long, whereas a list b[2] would report null
>>> 
>>> IMO it's working as intended.
>>> 
>>> Den tors. 6. feb. 2025 kl. 10.20 skrev OCsite <o...@ocs.cz 
>>> <mailto:o...@ocs.cz>>:
>>> Hi there,
>>> 
>>> is this inconsistence intentional and the proper Groovy behaviour, or is 
>>> that a bug and should I add a jira ticket?
>>> 
>>> Thanks!
>>> 
>>> ===
>>> groovy:000> a=[1,2]
>>> ===> [1, 2]
>>> groovy:000> b=a as Object[]
>>> ===> [1, 2]
>>> groovy:000> a[2]
>>> ===> null
>>> groovy:000> b[2]
>>> ERROR java.lang.ArrayIndexOutOfBoundsException:
>>> Index 2 out of bounds for length 2
>>> groovy:000> 
>>> ===
>>> 
>>> 
>>> --
>>> 
>>> Med venlig hilsen,
>>> Søren Berg Glasius
>>> 
>>> Hedevej 1, Gl. Rye, 8680 Ry
>>> Mobile: +45 40 44 91 88
>>> --- Press ESC once to quit - twice to save the changes.
>> 
> 
> 

Reply via email to