[swift-evolution] Issues with 0005-Better Translation of Objective-C APIs Into Swift

Dave Abrahams dabrahams at apple.com
Wed Feb 3 10:57:14 CST 2016


on Wed Feb 03 2016, Gwendal Roué <gwendal.roue-AT-gmail.com> wrote:

>> Le 3 févr. 2016 à 01:54, Dave Abrahams via swift-evolution
>> <swift-evolution at swift.org> a écrit :
>> 
>> 
>> on Tue Feb 02 2016, David Owens II <swift-evolution at swift.org> wrote:
>
>> 
>>>> On Feb 2, 2016, at 12:48 PM, Jarod Long via swift-evolution
>>>> <swift-evolution at swift.org> wrote:
>>>> 
>>>> This is definitely more clear when you completely separate these
>>>> lines from their context, but code isn't written or read in complete
>>>> isolation like this, so I think these examples significantly
>>>> exaggerate the ambiguity of the pattern in the real world.
>>>> 
>>>> Even if you only make the minor change of renaming p to proximity
>>>> (which is really what it should be), the first example becomes
>>>> pretty clear:
>>>> 
>>>>> let next = current.updating(proximity)
>>>> 
>>>> 
>>> 
>>> I just want to comment on this as I keep seeing this for arguments on
>>> the lists. APIs themselves should not be relying on well named inputs
>>> into them to create clear API signatures.
>> 
>> I don't think *anybody* on this list believes they should.
>> 
>> […]
>> 
>>> Similarly,
>>> 
>>> let content = listItemView.text.trimming(characters: .whitespaceAndNewlines)
>>> 
>>> At least I have some context at the call site what the purpose of
>>> .whitespaceAndNewlines.
>> 
>> You wouldn't say "go to the garden and trim the plant: rhododendrons".
>> It isn't necessary for comprehension.  Why do you feel characters: is
>> necessary here?
>
> Precisely because of what you stated a few lines above : "I don't
> think *anybody* on this list believes [API] should [be relying on well
> named inputs »:
>
> 	let s: NSCharacterSet = .whitespaceAndNewlines
> 	let content = listItemView.text.trimming(s)	// what?

That's not relying on well named inputs; it's relying on context, and
*that* is perfectly alright.  We are never going to get to the point
that you can do without context in reading code.  Proof: there's no
label for the receiver, yet you're not complaining.  is

      v.text.trimming(characters: s)

somehow perfectly clear when

      listItemView.text.trimming(s)

is not?

-- 
-Dave


More information about the swift-evolution mailing list