That's a good point. Also, now that I think of it, with the help of a
profiler it should be straightforward to identify places where iterating
over a slice is a problem regardless of how the iteration is expressed. I'm
convinced!

On Tue, Nov 5, 2019 at 4:05 PM Robert Engels <reng...@ix.netcom.com> wrote:

> I think that’s splitting hairs a bit. Even if you see the loop you don’t
> know the cost unless you know the size of a slice. For instance, a lookup
> in a small slice is actually cheaper than a small map - in memory and
> speed. So you need to know more than “it’s a slice” to make a judgement.
>
> On Nov 5, 2019, at 5:58 PM, Tyler Compton <xavi...@gmail.com> wrote:
>
> 
> I agree with you that an original writer of the code should be expected to
> know that a theoretical "contains" or "in" expression has O(n) properties.
> However, I've always thought of this from the perspective of someone
> looking at the code later and trying to identify performance issues. It's
> easy to identify a potentially very costly iteration through a slice if
> it's more verbose and always expressed the same way.
>
> On Tue, Nov 5, 2019 at 2:44 PM Robert Engels <reng...@ix.netcom.com>
> wrote:
>
>> Is it though?
>>
>> You would have the same problem if you thought the size of mySlice was
>> always small, and it wasn't - range could be quite expensive (or not) - and
>> if that was not valid workable you should be using something other than a
>> slice.
>>
>> You need understanding of the types and cost of operations in any
>> language, and the naming (or something else) should make the types easily
>> recognizable (and understandable).
>>
>>
>> -----Original Message-----
>> From: Tyler Compton
>> Sent: Nov 5, 2019 3:57 PM
>> To: toddsu...@icloud.com
>> Cc: golang-nuts
>> Subject: Re: [go-nuts] Why doesn't Go include a contains method for
>> things like slices?
>>
>> Ian's answer addresses your question about the absence of a
>> slice.Contains method, but there have been discussions in the past about
>> adding such a feature to the language itself as well. You brought up the
>> idea of a builtin "contains" function, and I've seen others suggest adding
>> something like Python's "in" operator as well. To most of these proposals,
>> the answer has been "no" because of concerns about hiding a potentially
>> very expensive operation behind a builtin or operator. There's no doubt
>> that:
>>
>> return myObj in mySlice
>>
>> ... is easier to miss than:
>>
>> for _, obj := range mySlice {
>>     if obj == myObj {
>>         return true
>>     }
>> }
>> return false
>>
>> On Tue, Nov 5, 2019 at 12:30 PM toddsurfs via golang-nuts <
>> golang-nuts@googlegroups.com> wrote:
>>
>>> Sorry if this question reveals my newness to Go. I tried searching the
>>> mailing list but I couldn't find anything in a quick search. It seems like
>>> many languages include the ability to check if an array, or slice contain a
>>> particular value. I understand that you could do this easily with a for
>>> loop or alternatively use a map instead. However, is there a reason why Go
>>> doesn't just have slice.Contains(interface{}) or maybe a builtin
>>> contains(mySlice, interface{}) ?
>>>
>>> I assume one reason might be because slices could potentially be really
>>> large? Or maybe the community feels that a simple for loop is so easy that
>>> it is not necessary? I would love to understand this more.
>>>
>>> Thank You!
>>> -Todd
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golang-nuts+unsubscr...@googlegroups.com.
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/7d4c52e3-8c0f-4ba6-ae24-67ddb4a07ede%40googlegroups.com
>>> <https://groups.google.com/d/msgid/golang-nuts/7d4c52e3-8c0f-4ba6-ae24-67ddb4a07ede%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to golang-nuts+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/golang-nuts/CAA%3DXfu33vuhzU1krGJKUZNaj6fNOhYQQY4%2BBfNtsdq0o7Q116w%40mail.gmail.com
>> <https://groups.google.com/d/msgid/golang-nuts/CAA%3DXfu33vuhzU1krGJKUZNaj6fNOhYQQY4%2BBfNtsdq0o7Q116w%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>>
>>
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAA%3DXfu3LVUjcz7jg%2BmUhGvbmhHL%2B6ycgh7zNouRx6_JwN-eDoQ%40mail.gmail.com.

Reply via email to