I would support Option 3. Neither iPad nor NeXT are acronyms, so they needn’t 
fall under the same rule.

Rule A: Acronyms
all lowercase, all uppercase
URL -> urlString, URLRequest
LaTeX -> latexSource, LATEXRenderer
GIF -> gifRepresentation, GIFGenerator

Rule B: Brand names
all lowercase, first uppercase and rest as usual
iPad -> ipadIcon, IPadDevices
NeXT -> nextIcon, NeXTCompany
LinkedIn -> linkedinIcon, LinkedInCompany

Now you might argue that LaTeX is a brand name, so perhaps it should fall under 
rule B. Deciding whether something is an acronym or a brand name can evolve 
over time, and is something that should lay outside the naming guidelines I 
think. In the same way radar and scuba have become normal words, they are 
decided by culture.


> On 6 May 2016, at 3:09 AM, Jordan Rose via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> Terminology-wise, most of these are not acronyms 
> <https://en.wiktionary.org/wiki/acronym#Noun> (or initialisms 
> <https://en.wiktionary.org/wiki/initialism#Noun>), but you’re right that 
> that’s a third option consistent with the existing guidelines.
> 
> Jordan
> 
>> On May 5, 2016, at 08:56, Basem Emara <cont...@basememara.com 
>> <mailto:cont...@basememara.com>> wrote:
>> 
>> Yes I digress and agree with you consistency is absolute key. Another 
>> thought came to mind:
>> 
>> Option 3 3: Uppercase all acronyms including those with mixed casing. This 
>> is both consistent and clear. Isolating acronyms is important because they 
>> loose their meaning and bleed into word boundaries, so making even mixed 
>> acronyms all uppercase clearly identifies them. In context, that might be 
>> “supportsIPAD”, “LATEXRenderer”, “isNEXTPlatform”, and “signalingNAN”, 
>> alongside “IPADIcon”, “LATEXSource”, “NEXTLogo”, and “NANValue”.)
>> 
>>> On May 5, 2016, at 11:41 AM, Jordan Rose <jordan_r...@apple.com 
>>> <mailto:jordan_r...@apple.com>> wrote:
>>> 
>>> [resending to include list]
>>> 
>>> Hm. I’m not sure why these words would be special, though—if we were going 
>>> to use underscores, shouldn’t we consistently go for “snake_case” or 
>>> something?
>>> 
>>> (A leading underscore is also often used to denote something private in a 
>>> lot of conventions, including the standard library.)
>>> 
>>> Jordan
>>> 
>>> 
>>>> On May 5, 2016, at 08:38, Basem Emara <cont...@basememara.com 
>>>> <mailto:cont...@basememara.com>> wrote:
>>>> 
>>>> Indeed the scenario has always been tricky for conventions. In both option 
>>>> 1 and 2, it looses the meaning, so I propose option 3 (which still sux too 
>>>> ha):
>>>> 
>>>> Option 3: Surround with underscores to isolate the acronym with mixed 
>>>> casing. It clearly retains the original meaning since acronys already 
>>>> create ambigiouty. An added degree of ambiguity could lose it’s meaning 
>>>> complete. This way with underscores, it is clear what it is referring to. 
>>>> In context, that might be “supports_iPad”, “_LaTeX_Renderer”, 
>>>> “is_NeXT_Platform”, and “signaling_NaN”, alongside “_iPad_Icon”, 
>>>> “_LaTeX_Source”, “_NeXT_Logo”, and “_NaN_Value”.)
>>>> 
>>>>> On May 5, 2016, at 11:26 AM, Jordan Rose via swift-evolution 
>>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>>> 
>>>>> Hi, everyone. Today in the API Design Guidelines 
>>>>> <https://swift.org/documentation/api-design-guidelines/> we have this 
>>>>> section on case:
>>>>> 
>>>>>> Follow case conventions. Names of types and protocols are 
>>>>>> UpperCamelCase. Everything else is lowerCamelCase.
>>>>>> 
>>>>>> Acronyms and initialisms that commonly appear as all upper case in 
>>>>>> American English should be uniformly up- or down-cased according to case 
>>>>>> conventions:
>>>>>> 
>>>>>> var utf8Bytes: [UTF8.CodeUnit]
>>>>>> var isRepresentableAsASCII = true
>>>>>> var userSMTPServer: SecureSMTPServer
>>>>>> 
>>>>>> Other acronyms should be treated as ordinary words:
>>>>>> 
>>>>>> var radarDetector: RadarScanner
>>>>>> var enjoysScubaDiving = true
>>>>> 
>>>>> However, this doesn't directly address words that are conventionally 
>>>>> written with mixed case. Usually these are names, such as "iPad", 
>>>>> "LaTeX", or “NeXT”, but sometimes they’re just acronyms or initialisms 
>>>>> with very strong conventions, like “NaN”. (Yes, the FloatingPoint 
>>>>> proposal is what prompted this whole thing.)
>>>>> 
>>>>> There are a few options for what we could do with these words to make 
>>>>> them consistent with our existing rules for words that are all-uppercase, 
>>>>> all-lowercase, or capitalized (first letter uppercase, remaining letters 
>>>>> lowercase). It’s pretty clear from the “utf8Bytes” example above that use 
>>>>> at the start of a “lowerCamelCase” identifier means uniformly downcasing 
>>>>> all of the letters: “ipad”, “latex”, “next”, “nan”. However, it’s unclear 
>>>>> exactly what operation is being applied to subsequent words in an 
>>>>> identifier:
>>>>> 
>>>>> Option 1: Upcase the first letter, leave all the other letters alone. 
>>>>> This is consistent with all of the examples shown in the API design 
>>>>> guidelines, and produces “IPad”, “LaTeX”, “NeXT”, and “NaN”. (In context, 
>>>>> that might be “supportsIPad”, “LaTeXRenderer”, “isNeXTPlatform”, and 
>>>>> “signalingNaN”, alongside “ipadIcon”, “latexSource”, “nextLogo”, and 
>>>>> “nanValue”.)
>>>>> 
>>>>> Option 2: If any letters are lowercase, upcase the first letter and 
>>>>> downcase all other letters. This is also consistent with all of the 
>>>>> examples shown in the API design guidelines, and produces “Ipad”, 
>>>>> “Latex”, “Next”, and “Nan”. (In context, that’s “supportsIpad”, 
>>>>> “LatexRenderer”, “isNextPlatform”, and “signalingNan”, alongside 
>>>>> “ipadIcon”, “latexSource”, “nextLogo”, and “nanValue”.)
>>>>> 
>>>>> I prefer option 1 because I think it’s easier to recognize the original 
>>>>> form of the word; DaveA notes that under option 2 it’s easier to find the 
>>>>> word boundaries.
>>>>> 
>>>>> (“NeXT” is an especially tricky case because without case it’s not 
>>>>> distinguishable from the normal word “next”. This situation is rare but 
>>>>> not nonexistent. Then again, “Apple” is not distinguishable from the 
>>>>> normal word “apple” either, and we seem to do fine there.)
>>>>> 
>>>>> Thoughts?
>>>>> Jordan
>>>>> 
>>>>> P.S. The rules also don’t special-case all-lowercase initialisms, like 
>>>>> “mph” (for “miles per hour”). Under either option above, we’d get “Mph”. 
>>>>> If we want some other behavior, 
>>>>> _______________________________________________
>>>>> swift-evolution mailing list
>>>>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>>>>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>>>>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>> 
>>> 
>>> 
>> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to