Objective-c的语法很特别。传递一个消息(如调用个方法),你需要用方括号把接收消息的对象以及消息括起来。消息由参数名和值组成,因此不能像 list.Insert("test", 0)这样写,而是这样 [mutableArray insertObject:@"test" atIndex:0]。 当调用方法时给每个参数取个名字可以使代码非常清晰,但是不可避免的增加了代码量。总的来说这是件好事。另一方面,我认为让方括号在目标对象之前开着,而不是在目标对象之后(像Java, C#, C++)是个错误。这使你更难确定你在一个表达式的位置,并且使一个简单的序列变成了深层嵌套。扩展一个表达式是个反复的事情,因为你必须回到行首添加 [。 当前输入 ] 时XCode会尝试猜测 [ 的相对位置,但是它老是搞错以致变得更糟。 幸运地是,Objective-c有些语法糖可以让你在一般情况下摆脱嵌套。点记法 可以让你重写简单的getter表达式,如[a value] 重写为 a.value。setter, 数组索引,字典查找也有类似的语法糖。他们确实为减少冗长的代码创造了奇迹。 Objective-c 也有容器了,这个是关于这门语言我真的很喜欢的第一件事。你想要个字典?只需要输入@{key:val,key2:val2,...}, 没有自动包装,因此你不得不在每一处添加@符号,像@{@"a":@1,@"b":@2,...}, 但是相比于人们过去不得不做的(大量地NSNumber numberWithInt:,以null结束的NSArray arrayWithObjectsfor:值,another key值,最后不幸中的万幸NSDictionary dictionaryWithObjects:forKeys:)这只是很小的代价。我没有预料到Object-C会有匿名函数的功能,但是它确实有(它们叫做块)。块语法因为缺乏推理类型语法,所以你不得不写^(int x){return x*x;}用来替代 x=>x*x,但是确实足够简明可以被使用。 另外一个对于Object-C语法来说的必要点就是前缀使用“+”和“-”用于区分静态方法和实例方法(错误的...信息)。你将会很快的习惯它,虽然它的这些差别看起来有些滑稽。
|