On 01/21/2011 09:21 PM, Jonathan M Davis wrote:
The issue is when you don't look at the documentation or trying to avoid having
to look at the documentation. If you see

auto result = replace(str, "hello", "goodbye");

it's quite clear that a copy is taking place. And if a copy/slice is taking
place, then that is what you would normally see when replace is used. However,
if replace alters the array in place, then

replace(str, "hello", "goodbye");

would be what you would normally see. And without looking at the documentation,
it's not clear whether that is doing it in-place or if you're throwing away the
return value. However, in the case where replace does a copy/slice, it_is_
clear, because the return value is saved.

I don't follow you here. You use in your reasoning the particularity of C-like funcs which can be both proper functions and action routines. Indeed, as you say, one can throw away a result after calling a routine which is mainly a function, but for a side-effect; right. But the same applies conversely: one can well call a routine which is mainly an action (in this case, that operates in-place) and returns whatever outcome flag, so that:
        auto result = replace(str, "hello", "goodbye");
actually operates in-place. Which is consistent with its name, an action verb suggesting an action. Replace could eg return the number of replacements performed (actually useful, what do you think?) Without more information, and guessing from the name, that is precisely what I would think (and try to imagine what meta-info replace returns).

Do not misinterpret: I actually support the choice of making return/copy the default (where both would make sense), because it's safer. But since we are changing many names, why not avoid misleading ones, precisely for the default case?


Denis
_________________
vita es estrany
spir.wikidot.com

Reply via email to