5 ms·
Python supports slice[-1] for the last element... Pretty reasonable. Also slice[0:-1] etc. Swift also has a lot of array slice sugar, like array.last, array.end
by janekm 8y ago
Python supports slice[-1] for the last element... Pretty reasonable. Also slice[0:-1] etc.
Swift also has a lot of array slice sugar, like array.last, array.endIndex, array.removeLast ... Obviously there is a trade-off to adding a lot of sugar to a language, in terms of learning the language, but leaving too little sugar in the language just leads to developers / library designers implementing the sugar themselves which leads to a whole mess of inconsistent code.
- laumars 8y ago> Python supports slice[-1] for the last element... Pretty reasonable. Lots of languages offer something akin to that. If not `[-1]` then something more OO like `.last`. Even the language I wrote supports it. This is why I made the complaint about Go. > Also slice[0:-1] etc. In fairness, Go can do that. You just omit the value for where you want the last (or first) element of the slice or array. eg b := []byte("Hello, World") world := b[7:] (this would work with strings too but I'm using a byte to make it clear we're working with slices) edit: just for clarity I mean Go has the syntactic sugar for stating the start or end of a slice - rather than a negative number of elements from the end of the slice. My point being that there is already some syntactic sugar in specifying slices so it's a shame Go doesn't take that further.
- 314 8y agoIn python slice[0:-1] drops the last element. To get the same effect in Go you need world := b[:len(b)-1]. The len() needs to be there (your example is a different case).
- laumars 8y agoYes, I was the one who made the comment about Go's lack of a -1 for slices in the first place. ;) I was actually referencing the 0 part and thus saying Go does already have some syntactic sugar when dealing with slices. ie you can do: slice[5:] // slice[:len(slice)] but not slice[5:-1] // slice[:len(slice)-1] Which is a great pity. However I'll update my previous comment to make that clearer because I can totally understand how it reads confusingly.