Among the reasons I've always preferred Mac development is the common
use of CamelCase.  I have poor eyesight and commonly eye fatigue as
well, that leads to it being difficult for me to distinguish
underscores from hyphens:

   foo = unix_style;
   foo = unix-style;

It is for that same reason that I adopted someone else's practice of
putting spaces inside of parentheses:

   void foo( int x, char y )

I've done that for decades but I've never seen anyone else do it.

On 6/1/15, Britt Durbrow <bdurb...@rattlesnakehillsoftworks.com> wrote:
> In no particular order:
>
>> On Jun 1, 2015, at 7:27 PM, Michael David Crawford <mdcrawf...@gmail.com>
>> wrote:
>>
>> I quite commonly fix bugs by refactoring all the lengthy routines into
>> several shorter ones.
>>
>
>
> I have the same rule of thumb - if it's not obvious what's going on, I
> should probably think about refactoring it into smaller chunks.
>
> --------------------------------------------------------------------------------------------------------------------------
>
>>
>>
>> On Jun 1, 2015, at 6:09 PM, Graham Cox <graham....@bigpond.com> wrote:
>>
>> If you have a complex method whose function can't be determined at a
>> glance (and that in itself could be a good argument for a refactoring)
>> with multiple exit points rather than one clear exit point at the end, it
>> can often be hard to follow the flow of control.
>
> Um... don't do that? :-)
>
> Yes, early returns & gotos are power tools that can be misused. YMMV, wear
> proper personal protective equipment, void where prohibited and/or
> uninitialized, not for sale to miners, etc...
>
> ...and no, I have no idea why people who dig ore out of the ground shouldn't
> be allowed to buy it (I suppose that's what I get for asking a muppet for
> legal advice, eh? :-)
>
> --------------------------------------------------------------------------------------------------------------------------
>
>
>>
>> On Jun 1, 2015, at 4:39 PM, Quincey Morris
>> <quinceymor...@rivergatesoftware.com> wrote:
>>
>> On Jun 1, 2015, at 14:52 , Britt Durbrow
>> <bdurb...@rattlesnakehillsoftworks.com> wrote:
>>>
>>> I happen to like an extra semicolon after a closing brace when it's the
>>> end of the logical block. It's just the way I like it to look (it feels
>>> 'funny' to me to have a statement end without one); the compiler ignores
>>> it. YMMV.
>>
>> The issue here is that you may find it comforting to see ';' at the "end"
>> of a statement, but it skates right over the ambiguity of when a "{ ... }"
>> construct is to be regard as a "logical block". The compiler does *not*
>> ignore the ";" after "}". The following does *not* compile:
>>
>>      if (...) {...}; else {...};
>>
>> You can argue that the intermediate ';' not the end of a logical block,
>> but if a "}" isn't the end of a logical block, you've just changed a
>> stylistic rule into a syntax rule.
>>
>
> The entire if statement is what I consider a logical block: the else {...}
> does not, and indeed cannot, stand alone.
>
>       if(someCondition)
>       {
>               [someObject doSomething];
>       }
>       else
>       {
>               [someObject doSomeOtherThing];
>       };
>       
>       [anotherObject doesSomethingElseEntirely];
>
> is the same to the compiler as:
>
>       if(someCondition)
>       {
>               [someObject doSomething];
>       }
>       else
>       {
>               [someObject doSomeOtherThing];
>       }
>       
>       [anotherObject doesSomethingElseEntirely];
>
> or even:
>
>       someCondition?[someObject doSomething]:[someObject
> doSomeOtherThing],[anotherObject doesSomethingElseEntirely];
>
> although I will say that the readability on the third example does suffer
> somewhat. :-)
>
> --------------------------------------------------------------------------------------------------------------------------
>
>>> I don't use underscores to prefix ivars. I think it's ugly, and
>>> unnecessary -- it doesn't help with namespacing (if a subclass and a
>>> superclass both declare _someVariable with the underscore they will
>>> collide just as badly as if they declare someVariable without one)
>>
>> The real reason for this convention is something else. In the bad old days
>> (meaning, more or less, pre-Leopard), there were multiple conflicting
>> conventions about using "_" for naming. Perhaps it was when the clang
>> compiler was introduced, I can't remember exactly, but Apple decreed the
>> current convention, to work around the inherent unsafety of Obj-C
>> namespacing:
>>
>> -- Private 3rd party instance variables *should* use the underscore.
>>
>> -- Private 3rd party methods *must not* use the underscore.
>>
>> It's not really a question of good or bad. It's more a question of what we
>> were required to do to avoid future Cocoa frameworks releases from
>> retroactively breaking our apps.
>>
>
> There were multiple arguments for and against underscores; the namespace
> issue is one of them; readability was another. FWIW, once upon a time, Apple
> claimed the entire namespace prefixed with an underscore as reserved (for
> both instance variables and methods). I believe that the modern runtime does
> indeed get around the issue with ivars (I don't have a documentation
> reference to point to, but a quick check in Xcode indicates this; as does
> Charles Srstka's posted code).
>
> --------------------------------------------------------------------------------------------------------------------------
>
>> On Jun 1, 2015, at 7:11 PM, Charles Srstka <cocoa...@charlessoft.com>
>> wrote:
>>
>> On Jun 1, 2015, at 6:39 PM, Quincey Morris
>> <quinceymor...@rivergatesoftware.com> wrote:
>>>
>>> On Jun 1, 2015, at 15:14 , Charles Srstka <cocoa...@charlessoft.com>
>>> wrote:
>>>>
>>>> Which is not at all, actually:
>>>
>>> The answer is "not at all" only with the modern ABI. 32-bit Mac
>>> compilations will conflict.
>>
>> That's true. Also, code written for the Mac Plus using THINK C 3.0 will
>> conflict. However, compilation targets that people are actually still
>> using in 2015 will not conflict.
>>
>> Charles
>
>
> Although I have the luxury of requiring modern runtime capable systems, some
> people do still have to target the old runtime...
>
> Also, FWIW the modern runtime only handles same-named instance variables
> that are privately declared; same-named variables declared in an @interface
> section will conflict even on the modern runtime.
>
> Oh, and there's a nifty warning that's thrown as soon as you try to declare
> a local variable of the same name as an instance variable.
>
>> On Jun 1, 2015, at 3:14 PM, Charles Srstka <cocoa...@charlessoft.com>
>> wrote:
>
>>
>> Non-underscored ivars vs. local variables, however, are not obvious at
>> all, especially if the method is large.
>
> In modern versions of Xcode at least, if I don't know exactly what I'm
> looking at, the answer is just a command-click away... :-)
> Also, the syntax highlighting does render (at least on my setup) in
> different colors for local variables and instance variables.
>
> --------------------------------------------------------------------------------------------------------------------------
>
>>> Steve - are you saying that C++ destructors aren't called if you use a
>>> goto?
>>>
>>> It was my understanding that the destructor is called if you go out of
>>> scope for any reason, even if it's a goto.
>>
>> Hmm, either I'm thinking of something else, or I just can't find the right
>> docs. I just learned to never ever use them, and my life as a developer is
>> just dandy. :)
>>
>> Steve via iPad
>
>
> I just did a test with this code:
>
> #import <Foundation/Foundation.h>
> #import "stdio.h"
>
> class testClass
> {
>       public:
>               testClass()
>               {
>                       puts("Constructor called.");
>               };
>       
>               ~testClass()
>               {
>                       puts("Destructor called.");
>               };
>       
>               void someFunction()
>               {
>                       puts("someFunction called.");
>               };
> };
>
> int main(int argc, const char * argv[])
> {
>       @autoreleasepool
>       {
>               puts("Starting...");
>               if(argc)
>               {
>                       testClass t;
>                       if(argc==1) goto done;
>                       
>                       t.someFunction();
>               };
>               
>       done:
>               puts("Done!\n");
>       };
>     return 0;
> };
>
> and got this output:
>
> Starting...
> Constructor called.
> Destructor called.
> Done!
>
> So.... it looks like clang at least is doing the right thing and calling the
> destructor when the variable goes out of scope.
>
>
>
>
> _______________________________________________
>
> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)
>
> Please do not post admin requests or moderator comments to the list.
> Contact the moderators at cocoa-dev-admins(at)lists.apple.com
>
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/cocoa-dev/mdcrawford%40gmail.com
>
> This email sent to mdcrawf...@gmail.com


-- 
Michael David Crawford, Consulting Software Engineer
mdcrawf...@gmail.com
http://www.warplife.com/mdc/

   Available for Software Development in the Portland, Oregon Metropolitan
Area.
_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to