News for hackers. Stuff that matters.
Re:Learn Lua in 15 Minutes (2013) by mdorazio on Tuesday June 30, 2020 @07:56PM (#23696212)
In contrast, indices starting at 0 always baffled me in other languages. In pretty much any real-world scenario, you always start at 1 (it's literally "the first element" as in "1st"). It always seemed to me like language developers for some odd reason decided to apply spatial coordinates to arrays.
Re:Learn Lua in 15 Minutes (2013) by dnautics on Tuesday June 30, 2020 @09:54PM (#23696886)
0-based array indexes make sense when what you are working with is laid out in memory from an offset. Honestly, if we cared about purity literally everything else (linked lists, etc) should be 1-indexed, but, stuff like composition and abstraction turned out to be more important, so we're stuck with 0-based indexes for everything.
Re:Learn Lua in 15 Minutes (2013) by bo1024 on Tuesday June 30, 2020 @08:04PM (#23696272)
It's not surprising: in these languages like C, arrays were essentially just pointers (i.e. spatial coordinates).
Re:Learn Lua in 15 Minutes (2013) by bspammer on Tuesday June 30, 2020 @08:42PM (#23696490)
Let's say you want every 5th element of an array, with zero indexing your code can be very elegant. Your indexes are 5 * 0, 5 * 1, 5 * 2. With 1-indexing you have to do (5 * 0)+1, (5 * 1)+1, (5 * 3)+1 etc.
Re:Learn Lua in 15 Minutes (2013) by Pelic4n on Tuesday June 30, 2020 @08:07PM (#23696293)
Re:Learn Lua in 15 Minutes (2013) by ufo on Tuesday June 30, 2020 @11:12PM (#23697372)
This always seems to pop up in these discussions but I don't think I am terribly convinced by his argument. For example, he doesn't mention that option (c) is better than option (a) if you need to iterate backwards. In that case option (a) becomes option (b), which everyone can agree objectively sucks :)
Re:Learn Lua in 15 Minutes (2013) by pansa2 on Tuesday June 30, 2020 @11:45PM (#23697548)
Yes! Reverse ranges in Python are awkward for this reason. The reverse of `range(0, 5)` (i.e. [0, 1, 2, 3, 4]) isn’t `range(5, 0, -1)`, it’s `range(4, -1, -1)`.

I think it would be better if the end-points were “low” and “high” rather than “start” and “stop”, so the reverse of `range(0, 5)` would simply be `range(0, 5, -1)`.

Re:Learn Lua in 15 Minutes (2013) by bad-apple on Wednesday July 01, 2020 @04:50AM (#23699342)
I think Rust has another good alternative to this, although it might be cheating a little: you can just write (lo..hi).rev(). That way, the common case of going forwards is nice, and the case of going backward isn't much worse.