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