这几天把1段逻辑从服务端搬到客户端,基本上就是把js翻译成oc。直接对照,明显感到oc太烂了(仅针对语言本身,iOS利用框架还凑合)
比以下面这行JS代码:
var monthtag = bill_year + "-" + bill_month;
写成OC以后,非常晦涩。固然用NSMutableString能有个append方法,但是恶心程度也差不多:
NSString *monthTag = [NSString stringWithFormat:@"%@-%@", [NSString stringWithFormat:@"%d", billYear], [NSString stringWithFormat:@"%d", billMonth]];
再比以下面这行:
data[tag].total += bill.amount;
更加不忍直视:
NSMutableDictionary *content = [data objectForKey:tag];
float total = [[content objectForKey:@"total"] floatValue];
float amount = [[bill objectForKey:@"amount"] floatValue];
total += amount;
[content setObject:[NSNumber numberWithInt:total] forKey:@"total"];
简单想一想,OC难用主要有几个缘由:
1、强类型,而且隐式的类型转换不发达,需要程序员自己处理
2、各种API设计不方便。Array还差能人意,处理Dictionary时,10分痛苦。其实每次处理NSString,NSDate,NSCalendar时,编程体验也很差
3、不支持闭包(除block),所以如果想拆分函数,要末就传参,要末就定义变量暂存;而js的scope chain就非常方便
包括iOS框架,我感觉都还有1些非常差的设计,比如:在iOS8之前,UIAlertViewDelegate需要根据tag来辨别多个AlertView,还要通过index来辨别按钮点击。到了iOS8,有了UIAlertController才好了1点
说实话我感觉如果不是有苹果罩着,OC应当早就退出历史舞台了。可能苹果自己也意想到这个问题,swift也许有所改良