• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: ObjC Question - labeled arguments
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ObjC Question - labeled arguments


  • Subject: Re: ObjC Question - labeled arguments
  • From: Bill Bumgarner <email@hidden>
  • Date: Thu, 22 May 2008 00:23:11 -0700

On May 21, 2008, at 11:20 PM, Johnny Lundy wrote:
You're correct - there is no first argument per se: it is part of the method selector, together they are called a "keyword."

http://developer.apple.com/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_3.html

A message with a single argument affixes a colon to the selector name and puts the argument right after the colon. This construct is called a keyword ; a keyword ends with a colon, and an argument follows the colon. Thus we could diagram a message expression with a single argument (and assignment) as the following:

****If a message has multiple arguments, the selector has multiple keywords. A selector name includes all keywords****, including colons, but does not include anything else, such as return type or parameter types. A message expression with multiple keywords (plus assignment) could be diagrammed as follows:

I should clarify my previous statement slightly in light of this particular conceptual document.


I said:

Objective-C does not have named arguments. Nor does it have keyword arguments.

Quite specifically, Objective-C has no notion of the arguments arriving at the call site with any kind of labels applied to them. That is, the sub-parts of the method name -- of the selector -- are not optional, nor can the order be varied.


"Named arguments" and "keyword arguments" often carry the implication that the arguments to a method can vary at runtime; can have default values, can be in a different order, can possibly have additional named arguments, etc... This implication would further seem to be supported by the at-runtime method dispatch resolution featured within Objective-C.

Yet, this is exactly *not* how Objective-C works. For all intents and purposes, an Objective-C method declaration is simply a C function that prepends two additional arguments; self and _cmd.

That is, this....

- (BOOL) doSomethingNeat:(NeatMode) aMode toThisThing: (Thing *) aThing;

.... is equivalent to this function...

BOOL doSomethingNeatFunc(id self, SEL _cmd, NeatMode aMode, Thing *aThing);

... as far as the compiler type resolver is concerned. The order, type and number of arguments is absolutely fixed (var-args being the one exception; same rules apply as C).

This is quite distinctly different than the named or keyword arguments available in a language like Python:

def func(a, b, NeatMode=SuperNeat, Thing=DefaultThing):
	pass

Where Thing (and NeatMode) might be omitted or might have different values when called.

b.bum


_______________________________________________

Cocoa-dev mailing list (email@hidden)

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:
This email sent to email@hidden


References: 
 >ObjC Question - labeled arguments (From: Johnny Lundy <email@hidden>)

  • Prev by Date: NSConnection does not close ports
  • Next by Date: Re: creating a resource fork and writing raw bytes to it
  • Previous by thread: ObjC Question - labeled arguments
  • Next by thread: Re: ObjC Question - labeled arguments
  • Index(es):
    • Date
    • Thread