c语言自学难吗音难学吗?

为什么说Objective-C很难学? - 文章 - 伯乐在线
& 为什么说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(面向对象编程)语言来对比说明。
目前来看还OK。也许他们之前知道lisp吧,所以不难理解这句语法。
到这句,人们普遍觉得比较难接受,情况也变得不那么乐观了。
这句可以直接让人们崩溃了。
那些冒号是啥?太吓人了!随后冒出一堆问题:方法是怎么调用的?是通过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)
所以,虽然语言变得越来越庞大,但是开发编写代码的复杂度反而降低了。
Objective-C是动态运行的,可能单单从其与C的渊源这个角度来看这个特性并不那么直观。由于不需要直接编写汇编码,C语言自身是一门变化较低的语言,鉴于Objective-C是C的超集,我们很容易将Objective-C的稳定性趋向于C,但现实际上,Objective-C是动态运行的且灵活性相当高的语言。Objective-C支持函数柯里化(function currying),支持反射机制,可以在运行时动态地为类添加或移除方法。
除非你之前有接触过类似Objectivec-C这些特性的编程语言,比如说Ruby或Lisp,否则一时间很难适应Objective-C。但是无需担忧!有些东西,外表看起来神秘可怕其实本质没那么复杂。
使用Objective-C构建apps完全离不开Cocoa/Cocoa Touch框架。就好像用Ruby开发web应用离不开Rails一样。
经过经年累月的发展,Cocoa已经变得非常的厚重。不过如前文所说,苹果最近正在逐渐的为常规iOS开发所依赖的Cocoa Touch框架进行减肥,以降低它的复杂度。即便如此,哪怕要开发的app极其简单,也还是有许多东西要学,像苹果的官方文档还有已暴露的各种头文件都是很好的学习资源。就拿UIView中的contentStretch属性为例,头文件的定义和说明如下:
@property(nonatomic) CGRect contentStretch __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
// animatable. default is unit rectangle {{0,0} {1,1}}
这到底是什么意思呢?按照我的理解,这个属性是用来描述可伸缩区域的大小。但是怎么实现的呢?这个区域是指一个矩形吗?也许你永远都不会和这个属性打交道,但是假如在开发过程中的某个时点和场景下使用这个属性能够轻松解决你的问题,那个时候你会知道它的存在并能正确的使用它吗?
Cocoa/Cocoa-Touch是庞大的框架。要真正的驾驭它就只能靠熟能生巧了。但这个熟悉它的过程常常使很多新的学习者退缩。
一直以来,苹果都在不停的推动着围绕Objective-C语言开发体系的进步,像Objective-C runtime,Cocoa/Cocoa Touch框架以及针对Objective-C的编译器等一系列更高层面设计的交叉重叠使得Objective-C不仅仅是一个语言这么简单。
所以当学习Objective-C的时候,不能孤立的去学习这门语言、某些框架、它的运行机制或编译器,而是要把他们融会贯通。比如说现在Objective-C集成的ARC(Automatic Reference Counting)机制就涉及到了语义(不需要显示调用dealloc了)层面、编译器层面(显而易见)、以及对Cocoa/Cocoa Touch框架的命名约定等内容。
上文所提到的围绕Objective-C的一些列紧密关联的设计算是其独有的特点。其他的语言或多或少都会依赖于别的的语言或平台来运行,比如基于.net运行的Iron Python,不是Java但是却依赖JVM的Clojure,甚至Ruby和Rails其实都有各自相对独立的实体和工程。唯一一个比较知名的受Cocoa/Cocoa Touch和Objective-C runtime支撑运行的Mac Ruby,后来也被苹果停掉后了后续支持。
Objective-C和相关的框架、runtime以及编译器等等这个体系对其他开发者社区而言是又几乎是封闭的。
从目前掌握的信息来看,过去的四年来苹果一直在尝试降低Objective-C语言的复杂度。淘汰手动内存管理以及C标准头文件,引入更符合当下编程语言潮流的ARC机制,还有通过.语法来访问属性的getter/setter方法等等都是为了降低Objective-C的学习成本。但是即便如此,Objective-C仍然是具备一定学习门槛的开发语言,它的热度完全那些基于Objective-C编写的热门iOS应用带起来的。
关于作者:
可能感兴趣的话题
关于伯乐在线博客
在这个信息爆炸的时代,人们已然被大量、快速并且简短的信息所包围。然而,我们相信:过多“快餐”式的阅读只会令人“虚胖”,缺乏实质的内涵。伯乐在线内容团队正试图以我们微薄的力量,把优秀的原创文章和译文分享给读者,为“快餐”添加一些“营养”元素。
新浪微博:
推荐微信号
(加好友请注明来意)
– 好的话题、有启发的回复、值得信赖的圈子
– 分享和发现有价值的内容与观点
– 为IT单身男女服务的征婚传播平台
– 优秀的工具资源导航
– 翻译传播优秀的外文文章
– 国内外的精选文章
– UI,网页,交互和用户体验
– 专注iOS技术分享
– 专注Android技术分享
– JavaScript, HTML5, CSS
– 专注Java技术分享
– 专注Python技术分享
& 2017 伯乐在线  学c语言真的很难吗?人们对于未知的事物都有一种畏惧的心理,在没有接触过C语言的时候总是认为他很难,等自己真正接触过后才知道原来很容易。  很多人都认为C语言的发展前景不错,但是都一点畏惧,怕学习不懂,都觉得学习C语言非常难,如果是没有基础的情况学习时会更加吃力。那么C语言到底是不是真的学习比较难呢?  其实C语言是所有编程语言中比较难的编程语言,因为C语言属于底层语言,可以用来做硬件接口开发,逻辑性也还比较强,另外涉及到比较深的算法,对学习者有一定数学基础要求。所以在学习时确实比其他编程语言相对来说难一些。如果你有一定编程基础,数学底子比较扎实,学习C语言相关来说比较容易。  我建议高中生以及低学历的同学最好不要学习C语言,因为低学历学历能稍微差一些,在加上自学能力没有高学历人群强,而且低学历本身就基础差,不适合学习C语言,非常你对C语言编程兴趣非常浓,能做到除了吃饭睡觉你的生活中就是C语言了,我建议你可以学习C语言,否则你最好不要碰它。
楼主发言:1次 发图:0张 | 更多
请遵守言论规则,不得违反国家法律法规回复(Ctrl+Enter)有没有一个学习C语言的好方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
有没有一个学习C语言的好方法
上传于|0|0|文档简介
&&学习c语言的方法
怎样学好C语言
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢}

我要回帖

更多关于 c语言难不难学 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信