[swift-evolution] ed/ing, InPlace, Set/SetAlgebra naming resolution

Dave Abrahams dabrahams at apple.com
Sat Feb 13 15:19:53 CST 2016

on Sat Feb 13 2016, Brent Royal-Gordon <brent-AT-architechies.com> wrote:

>> If we are going to force Set fit the naming guidelines, I would prefer
>> to stay away from the mathematical terms altogether.
>>   func insertingContentsOf(other: Self) -> Self                 // union
>>   mutating func insertContentsOf(other)
>>   func members(in other: Self) -> Self                           // intersection
>>   mutating func removeMembers(notIn: other)
>>   func removingMembersAndAddingNonMembers(in other: Self) -> Self // symmetric difference
>>   mutating func removeMembersAndAddingNonMembers(in other: Self)
>>   func removingMembers(in other: Self) -> Self                    // subtract
>>   mutating func removeMembers(in other: Self)
> If we're abandoning conventional names, I notice that intersect,
> subtract, and xor can be expressed fairly clearly as:
> 	intersect	keep{ing}MembersInCommon(with:)
> 	xor		keep{ing}MembersNotInCommon(with:)
> 	subtract	keep{ing}Members(notIn:)

The latter two names mean the same thing to my eye.

> But union is harder. It could be constructed parallel to subtract, but
> it might sound like intersect this way.
> 	union 	keep{ing}Members(in:)
> On the other hand, you could style union and subtract as insert and
> remove operations, and use keep operations for intersect and xor.

I don't think there's any advantage in trying to make all these
(different) operations look the same.

> I notice, though, that one big problem with using methods is that
> these operations (well, except subtract) are symmetric. Having one set
> be the target and another be the parameter implies that the parameter
> is subordinate, but in reality the two are peers. That creates false
> impressions which are hard to overcome through naming.

I think that issue pales in importance when compared with expressing the
right semantics.  If you get that right, whether or not the operation is
in fact symmetric becomes academic.


More information about the swift-evolution mailing list