4 ms·
Objective-C is already a dynamic language. Its ability to drop to low-level C at will makes it too flexible and powerful to abandon for something slow and cumbe
by bonch 15y ago
Objective-C is already a dynamic language. Its ability to drop to low-level C at will makes it too flexible and powerful to abandon for something slow and cumbersome like Javascript.
- richcollins 15y agoWhich is more cumbersome? //Objective-C #import <Foundation/Foundation.h> @interface Order : NSObject { NSString *id; Customer *customer; NSDate *timestamp; NSString *productId; } @property (nonatomic, retain) NSString *id; @property (nonatomic, retain) Customer *customer; @property (nonatomic, retain) NSDate *timestamp; @property (nonatomic, retain) NSString *productId; @end #import "Order.h" @implementation Article @synthesize id; @synthesize customer; @synthesize timestamp; @synthesize productId; - (void)dealloc { [self setId:nil]; [self setCustomer:nil]; [self setTimestamp:nil]; [self setProductId:nil]; [super dealloc]; } //Javascript Order = Proto.clone().newSlots("id", "customer", "timestamp", "productId");
- bonch 15y agoObjective-C is always going to win the contest for Smalltalk-esque verbosity, but I would hardly consider the code you wrote to be cumbersome. In the modern Objective-C runtime using garbage collection, you can write this: // Order.h #import <Foundation/Foundation.h> @interface Order : NSObject @property (copy) NSString *id; @property (retain) Customer *customer; @property (copy) NSDate *timestamp; @property (copy) NSString *productId; @end // Order.m #import "Order.h" @implementation Article @synthesize id; @synthesize customer; @synthesize timestamp; @synthesize productId; @end Apple engineers have confirmed that they're working on making @synthesize the default behavior for properties, so eventually you won't have to write that either. A real-world app would be using Core Data for its model objects, negating the need to write this class at all while adding automatic faulting, data integrity, and undo/redo: Order *order = [NSEntityDescription insertNewObjectForEntityForName:@"Order" inManagedObjectContext:self.managedObjectContext];
- richcollins 15y agoThank you for further solidifying my point.
- Derbasti 15y agoI fully agree. I used to be a big fan of Objective-C and saw no need for a more expressive language. Then I started coding in PyQt (a Python, Qt bridge). Now I know: Objective-C is not a high level language, even though it has some high level aspects. Also, coding in a high level language can improve productivity by a huge margin, even if you are coding against a low level framework. On the desktop, this is a more than worthwhile tradeoff. Mobile devices still benefit from the performance advantage of Objective-C as opposed to, say, MacRuby.
- richcollins 15y agoVerbosity also promotes to poor design decisions. I often skip creating additional classes that would result in better factored code because it's too much work.
- Derbasti 15y ago"Because it's too much work" tends to be a bad excuse, though.
- richcollins 15y agoIf creating a new class took an hour would it be a bad excuse? How about a day? Getting rid of "Too much work" is the point of software.