设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

为什么说Objective-C很难学?

2014-7-14 18:13| 发布者: joejoe0332| 查看: 4577| 评论: 0|原作者: sunset|来自: 伯乐在线

摘要: 作为一个网络上的活跃分子,使用Objective-C的开发者,我收到了许多围绕Objective-C的提问。这些问题在人们学习Objective-C或者尝试开发app的时候会不断跳出来,而且其中的某些问题可能笼统如“Objective-C看起来太 ...

  作为一个网络上的活跃分子,使用Objective-C的开发者,我收到了许多围绕Objective-C的提问。这些问题在人们学习Objective-C或者尝试开发app的时候会不断跳出来,而且其中的某些问题可能笼统如“Objective-C看起来太难了”也会细致若“那个‘-’是干嘛用的啊?”。我要说的是这些其实都是好问题,那么接下来我就和大家探讨一下:相对于Ruby或Java,为什么某些程序员对转投iOS或者OS X开发会心存畏惧。


语法

先说说编程语言是什么。所谓编程语言就是一种人可以读得懂的程序代码。一门编程语言通常包含一系列内容:语法(语句书写和声明的规则)和语义(以达成某些任务为目标,把语句和声明有效的结合起来)。

大部分(通常情况下)编程语言在方法调用上都是类似C语言的风格,访问类成员采用.语法。(也就是C中的structs)。虽然这些语言一般都有各自己定义类的方式(Java和C#或C++还是不大相同的),但是追究到语言的诸多细节还都是很相似的。每当人们开始接触一门新的编程语言的时候,如果它的语法看起来很似曾相识,会让学习者觉得很舒服。像大多数人都是有C语法背景的,所以要学习一门类C语法的语言的话,第一观感会很亲切。

单从语法角度来看,Objective-C可谓**别具一格**。它的语法太特别了,碍于它语法的另类,很多人没有耐心去深究它的语义,而它的语义恰恰与C++,Java等语言没什么区别。

像Python和Ruby这些所谓”古怪”的语言都更容易上手,仅仅是因为它们可以通过.语法来进行方法调用和访问类成员。而且人们通常能够迅速习惯用缩进来代替花括号。

当我向别人介绍Objective-C的时候,一般情况下,我会拿它和某个OOP(面向对象编程)语言来对比说明。

why objective-c is hard to learn 1


  目前来看还OK。也许他们之前知道lisp吧,所以不难理解这句语法。


why objective-c is hard to learn 2


  到这句,人们普遍觉得比较难接受,情况也变得不那么乐观了。


why objective-c is hard to learn 3


  这句可以直接让人们崩溃了。


  那些冒号是啥?太吓人了!随后冒出一堆问题:方法是怎么调用的?是通过performAction还是什么别的方式?方法怎么重载?


  要知道,我们没有在讨论方法,我们说的是消息(messages)(我也不会去讨论他们之间的区别)和selectors,好比上文所呈现的performAction:withTwoParameters。但是,大家已经懒得去了解了。


  Objective-C是C的超集,它其实是一门很cool的编程语言,但是由于其自身的某些特点,相较于其他现代编程语言,人们会觉得Objective-C很古老。作为C的超集,Objectivec-C在C的基础上扩展了一系列非常规的特性,这恰恰增加了Objective-C的复杂度。


  Objective-C是一门大型语言。下此定义的出发点是:它的语法十分繁复。实际上,苹果已经在加大对Objective-C瘦身的力度,比如说,虽然速度缓慢但是终究还是完成了头文件去标准C风格的过渡。而且,苹果还为Objective-C做了不少改进,增加了许多新特性,使得Objective-C的代码更加简练,比如:

  • Synthesizing properties
  • 通过.语法访问getters/setters
  • 垃圾回收(Garbage Collection)
  • Blocks(闭包closures)
  • ARC(Automatic Reference Counting)
  • 弱引用(Weak references)


  所以,虽然语言变得越来越庞大,但是开发编写代码的复杂度反而降低了。



酷毙

雷人
1

鲜花

鸡蛋

漂亮

刚表态过的朋友 (1 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部