各位对objc的语法怎么看?

2013-09-15 22:09:16 +08:00
 frogs
写c和python程序好多年,觉得自己对语言的语法洁癖越来越厉害了。
觉得ojbc的语法真是啰嗦,写个程序屏幕上满满的字。。真觉得苹果公司该出obj3.0了。
9538 次点击
所在节点    程序员
57 条回复
angelface
2013-09-16 12:58:57 +08:00
@timothyye [tab]
[tab]
[tab]
[tab]
[tab]
[tab]
[100行后] [...]
frogs
2013-09-16 12:59:22 +08:00
@alexrezit
@so898
写了这么多年c,重来没用到过需要比较两个字符串地址的时候。
当然我这个只是举个例子而已,类似这种的冗余语法还有很多。
meta
2013-09-16 13:07:57 +08:00
@timothyye 如果这样的话,
js就是:func()()()()()()()()()
java就是:a.b.c.d.e.f.g
perl就是:$_*&^$#%&()$
alexrezit
2013-09-16 13:14:46 +08:00
@frogs
没写过 C, 难道 C 不需要 strcmp? stringA 和 stringB 本来就是两个 pointer, pointer 用 == 只能比较地址.
ultragtx
2013-09-16 13:59:44 +08:00
我一直想知道喷objc-c语法的到底写过obj-c多长时间,以及是不是用Xcode写
davepkxxx
2013-09-16 14:32:07 +08:00
@meta lisp (a (b (c (d (e (f (g (h (i (j (k (l (m (n (o (p (q (r (s (t (u (v (w (x (y (z 1) 2) 3) 4) 5) 6) 7) 8) 9) 10) 11 ) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21) 22) 23) 24) 25) 26)
vincenttone
2013-09-16 14:32:33 +08:00
我用过几个语言,多数是类似c语法的,用ObjC的时候确实感觉有些奇怪,但如果深入的用一段时间,我觉得还挺好的。ObjC相对来讲算是比较易读的了,比如你定义一个方法名:
- (BOOL) checkWithUserName: (NSString *) username
andPassword: (NSString *) password;
这样的方法名定义不是挺好的吗? 很明显的英文。
如果用Python呢?
def checkByUserNameAndPassword(self, uname, pwd):
# xxxx
但是我为什么要写self呢?很多人说self是为了语义清晰,但是我就是不喜欢,因为我用python的时间不够长,理解不了太深刻的Python的东西,我就喜欢用起来简单。甚至有些人会吐槽python的缩进语法机制。

我想说其实有时候一个东西好的地方可能恰恰是它的缺点。

写Ruby的时候听说Ruby很耗资源,就四处说,但是ruby在语法上的便利是非常棒的。
说PHP现在的状态是一团糟(其实我也这么认为),但是有什么关系呢,PHP本来就是为了更容易让用户学习和使用来设计的。
js的语法,很多人觉得糟透了,但是他的动态特性反而也是这么表现出来的。
lisp大家也都知道,括号,但是括号对于lisp来很重要。
学Erlang时发现变量变不了,会吐槽我擦为什么变不了还叫变量啊!但是Erlang的变量为并行化做了不少事情。
很多人觉得c太简单,觉得c++太复杂,但这也是他们的强大的地方。

但是变量名太长如果没有XCode输入会吐血,这个我认同。
tab
2013-09-16 14:42:40 +08:00
只有刚上手的时候觉得getter和setter的声明很诡异,习惯以后就还好了。
无疑OC是语法非常简练,易学易上手。现在做游戏开发写C++感觉很多地方都复杂混乱,没有统一的标准。就拿String来说,很多类库会自己定义,搞得我晕头转向。
另外我觉得OC和iOS SDK以及XCode已经到水乳交融、不可分割的地步了,毫无疑问这是一套非常成熟用起来非常舒服的组合(或者叫有机整体)。很多人不习惯是由于没有阅读官方文档或者不习惯不够了解iOS的API,甚至都没真正做过开发,如果只是看了表面语法就来喷的童鞋还是真正体会一段时间再说吧,相信会让你看到不一样的地方。
refresh
2013-09-16 15:51:53 +08:00
刚写还好,写多就习惯了,还挺好的,是有点冗长,特别是参数过多的时候
frogs
2013-09-16 18:24:53 +08:00
@ultragtx
你的这个问题让我想起一句话。”吐着吐着就习惯了“
开个玩笑,不要介意。
offspring
2013-09-16 19:47:18 +08:00
@timothyye 没人让你嵌套这么多层
Linxing
2013-09-17 17:55:43 +08:00
刚刚开始写确实不习惯,久了之后就会觉得很多时候都没必要写注释了
hengxin196
2013-09-17 20:04:06 +08:00
@timothyye 建议不要超过三层
觉得oc 可读性很好呀 不需要注释
everedit
2013-09-17 20:26:28 +08:00
不喜欢objc
wupher
2013-09-17 21:04:12 +08:00
不明白一门语言的美,很难真正掌握它,使用好它。
leafduo
2013-09-17 21:53:05 +08:00
感觉在黑的都是没怎么写过 OC 的……

我自己认为 OC 的可读性是相当好的,就位置参数一点就完杀大部分语言。Java 的不自由跟 OC 的 verbosity 完全是两回事,OC 写出来虽然很长,但是跟 plain English 很像,基本不需要解释,可读性好。

关于 -isEqualToString:,这个是因为不支持运算符重载吧,我觉得都好。
Ricepig
2013-09-17 23:24:37 +08:00
从某些特制来说蛮像c# vs和.net framework组合的。

有了强力ide以后,变量名函数名的易读性是第一位的,长度倒是无关紧要了。但是用着编辑器写程序的开发者就会觉得不够简洁了。

括号的问题也是同样,强力ide支持下勉强能收放自如。可读性倒是问题不大,但是在修改的时候还是有点儿麻烦。

需要吐槽的就是sdk里类的各种前缀,NS什么的,能用个namespace什么的吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/82559

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX