3 ms·
I'm finding Objective-C to be a powerful addition to C and refreshingly simple compared to C++. What are you comparing it to, and what should I be missing?
by xsmasher 16y ago
I'm finding Objective-C to be a powerful addition to C and refreshingly simple compared to C++. What are you comparing it to, and what should I be missing?
- chrisa 16y agoI mostly program in ruby, but have been working with objective-c more lately, so I can try to summarize what my thinking with a few examples: - Why do I have to begin every string with @? I know the technical reason why, and the difference between having it and not having it, but I don’t want to type it all the time. - Every time I type CGRectZero as an argument, I think "the method should just assume I want a CGRectZero, and if not, then I’ll tell it otherwise" - It's distracting to my thought process to surround everything with []. That could just be a result of not spending enough time in the language - Typing the name of every argument becomes tiresome after a while. Auto-complete does help some. - I don’t see it in this example, but I often see cases which alloc an object, set another object to that object (usually doing some data massaging in the process), and then release the first object. In ruby, it would be a single (short) line. I think (hope) that as I get better with the language, many of those annoyances fade away. Looking at it now, I think I could summarize it all with: The default of objective-c is to be verbose, and the default for ruby is to be terse. edit: the "alloc, set, release" paradigm can be found in part 2, step 1.
- probablycorey 16y agoYou are right, compared to C++ and C ObjC has advantages. But compared to other langues it has major drawbacks. Here are some reasons I don't like Objective-C (these mostly apply to iPhone dev only) - Header Files: These are archaic and require you to repeat code unnecessarily. Don't require humans to do something that computers are better at. - No Automatic Garbage Collection: On the ObjC 2.0 we have this, but not on the iPhone. Unless you are making a high performance game, there is no reason the phone can't handle Automatic GC. - No NSDictionary/NSArray literals: [[NSDictionary alloc] initWithObjectsAndKeys:@"value", @"key", @"value2", @"key2", nil]; // Enough said - No regex: You kind of get regex's in 3.2, but they are very limited. Regex literals are much more powerful - Xcode: You are pretty much required to use Xcode and I don't like Xcode. Even if you use the "xcodebuild" command-line script, you still have to create the project through Xcode. - Closures: I guess we will be able to use these soon, but it is going to take awhile for all the API's to get updated to accommodate them. - No dynamic variables: It's handy to be able to shove data into objects sometimes. It's a hack, but as long as you treat it as such you can save a lot of needless code. (You can do this via the ObjC runtime, but it's messy) - No namespacing: ObjC handles namespaces by prefixing class names. Blah, that is so 1978. - Unit Testing: ObjC has the poorest excuse for unit testing out of any language I've ever used.
- wrs 16y agoIt's not technically a language thing, but I can't get used to the unbelievable verbosity of the method names. (And for calibration purposes: I used to do a lot of Common Lisp.) In a language inspired by Smalltalk, they turned "at:" into "objectAtIndex:"?