Chinaunix

标题: Perl 的代码是难猜懂,而不是难读懂 [打印本页]

作者: MMMIX    时间: 2012-03-14 18:38
标题: Perl 的代码是难猜懂,而不是难读懂
Perl 的语法之所以为人诟病,恐怕很大一部分原因是由于 Perl 的代码很难猜懂,而不是很难读懂。

你如果对 Perl 的语法不是充分的了解,往往就很难读/猜懂对其熟练的人所写的代码,而在另外一些语言中,例如 Python,即使你不怎么懂 Python,看着它的代码也基本能猜出它在做什么,对 Perl 来说这基本就是不可能的。但是,当你对 Perl 足够了解后,就会发现 Perl 代码不论是书写还是阅读,其实都挺简单的,而渐渐的,你会喜欢上它表达的简洁。

个人的一些浅见,不知大家以为然否?
作者: iakuf    时间: 2012-03-14 18:52
有见地
作者: 兰花仙子    时间: 2012-03-14 20:31
MMMIX 发表于 2012-03-14 18:38
Perl 的语法之所以为人诟病,恐怕很大一部分原因是由于 Perl 的代码很难猜懂,而不是很难读懂。

你如果对 ...


好好写还是容易看懂的,跟python差不多。
作者: MMMIX    时间: 2012-03-14 21:30
兰花仙子 发表于 2012-03-14 20:31
好好写还是容易看懂的,跟python差不多。


Perl 當然能寫得像 Python,把 Perl 當作 Python 一樣用就是了。

其實我想比較的是,一份按 Perl 的標準寫得很好的 Perl 代碼,和一份實現同樣功能的按 Python 的標準寫得很好的 Python 代碼,對於一個熟悉過程式程序語言的程序員,或是對 Perl 和 Python 都略有所知的人,哪一個版本的代碼更容易猜懂。

同時,對於兩個(或一個)分別對 Perl 和 Python 十分熟悉的程序員,用各自熟悉的語言實現一個功能,哪個代碼更簡洁,bug 更少,更易交接和後續維護。

另外,也可以比較下 Perl 和 Python 的學習成本。
作者: wait_rabbit    时间: 2012-03-14 22:43

本来是打算学习python的,不过现在公司项目要求学习perl,只好先把后者搞定再说。

坐等高手上场。
作者: qdice007    时间: 2012-03-14 23:16
Perl不是教学语言,失去了易懂和优雅,
换来的是简洁和高效,还有书写程序的快捷.
不管代码是否难懂,
配上好的注释和详细完备的文档,
才是交接与维护的关键.
作者: Perlvim    时间: 2012-03-15 07:09
Perl 给予程序员更大的空间来写代码,代码可以写的很晦涩,也可以写的很清晰,可以写的很简洁,也可以写的很规范,反正解释器能看懂。我喜欢整齐,明确的写法,因为代码过段时间自己还是要看的。
作者: MMMIX    时间: 2012-03-15 10:33
qdice007 发表于 2012-03-14 23:16
Perl不是教学语言,失去了易懂和优雅,
换来的是简洁和高效,还有书写程序的快捷.
不管代码是否难懂,

失去了优雅?你怎么定义优雅?

BTW,你还是不自觉的把“易懂”等同于“易猜”了。
作者: MMMIX    时间: 2012-03-15 10:36
Perlvim 发表于 2012-03-15 07:09
Perl 给予程序员更大的空间来写代码,代码可以写的很晦涩,也可以写的很清晰,可以写的很简洁,也可以写的很规范


什么语言不能把代码写的很晦涩?但是,清晰 != 易猜。同时,你把“简洁”和“规范”对立起来了。规范的代码就不能很简洁?
作者: yybmsrs    时间: 2012-03-15 11:24
个人认为难猜是因为省略了很多中间步骤
作者: Perlvim    时间: 2012-03-15 12:18
易懂和易读是一个相对的概念。不同的人对同样的代码的认识是不同的。

还是秉承PerlTidy的概念,给个配置项,喜欢什么风格,就把项目整成什么风格。点一下鼠标而已。
作者: MMMIX    时间: 2012-03-15 15:15
本帖最后由 MMMIX 于 2012-03-15 15:22 编辑
yybmsrs 发表于 2012-03-15 11:24
个人认为难猜是因为省略了很多中间步骤


没错。Perl 要成为的是一门易用的语言,而不是一门易学的语言。面对 Perl 相对陡峭的学习曲线和比较沉重的学习成本,许多人只学了个半吊子,然后就开始肆意批评/调侃 Perl,更有一些人甚至根本就不懂 Perl,或只懂些皮毛,然后也就开始批评/调侃 Perl 代码如何的难懂。
作者: MMMIX    时间: 2012-03-15 15:18
Perlvim 发表于 2012-03-15 12:18
易懂和易读是一个相对的概念。不同的人对同样的代码的认识是不同的。


许多人是把“就我在这个方面的知识/技能水平而言,这些代码很难懂“,直接无意识的转换成了”(对所有人来说)这些代码很难懂“。
作者: py    时间: 2012-03-15 20:29
MMMIX 发表于 2012-03-14 18:38
你如果对 Perl 的语法不是充分的了解,往往就很难读/猜懂对其熟练的人所写的代码


即使充分了解了语法,一样存在对更充分了解的人写出的代码看不懂的时候

看看CPAN上那些牛人写的模块,有很多看不懂的地方,而且那些个变态用的符号和语法还不知道去哪查去。但是随着经验的积累和不断的领悟,最终总能理解的。我个人挺享受这个过程的。
作者: MMMIX    时间: 2012-03-15 21:12
py 发表于 2012-03-15 20:29
而且那些个变态用的符号和语法还不知道去哪查去。


Perl 的文檔挺全的呀,再說模块中也不太可能用太過不確定的東西,還有查不到的?
作者: MMMIX    时间: 2012-03-15 21:15
py 发表于 2012-03-15 20:29
即使充分了解了语法,一样存在对更充分了解的人写出的代码看不懂的时候


這個偶爾出現也正常,Perl 的語法實在太豐富了。
作者: gaoyang636    时间: 2012-03-15 21:36
回复 6# qdice007


    其实我觉得还是shell / shell script 简洁高效…… 比如: less xxx| cut -f2|sort|uniq > out.txt 好爽啊~ @.@
作者: flw    时间: 2012-03-15 22:22
gaoyang636 发表于 2012-03-15 21:36
回复 6# qdice007
你这行命令问题实在是太多了。
作者: wojiaohesen    时间: 2012-03-16 19:38
python怎么写都能看懂,???

这纯粹是扯淡, 看看python的函数修饰符吧.
作者: ttcn_cu    时间: 2012-03-16 23:13
又见月经贴
作者: MMMIX    时间: 2012-03-17 11:42
wojiaohesen 发表于 2012-03-16 19:38
python怎么写都能看懂,???

这纯粹是扯淡, 看看python的函数修饰符吧.


其實「Perl 代碼晦澀」,「Python 代碼易懂」之類的,都是心理學中所謂的「刻板印象」。對某種事物或人群的這種印象,在對其非常了解的人看來,固然是頗多謬誤,但許多對其不甚了了的人就是這麼個印象。其它像是「程序員都是沈默寡言的」、「從事計算機行業的都會修電腦」、「山東人都是豪爽的」,等等,都是刻板印象的例子。
作者: fyyizu    时间: 2012-03-17 14:46
回复 6# qdice007 注释和文档 真的太重要了


   
作者: gaoyang636    时间: 2012-03-17 18:23
回复 18# flw


    咋了?
作者: ailesforever    时间: 2012-03-19 21:46
一般都比较避开晦涩的写法,比较能让其他人接受
作者: MMMIX    时间: 2012-03-19 21:53
本帖最后由 MMMIX 于 2012-03-19 21:54 编辑
ailesforever 发表于 2012-03-19 21:46
一般都比较避开晦涩的写法,比较能让其他人接受


故意寫的晦澀和故意寫的簡單,都不可取。前者像是炫耀,後者像是一個成人卻像小孩子一樣說話。
作者: ailesforever    时间: 2012-03-19 21:55
嗯,同意回复 25# MMMIX


   
作者: jason680    时间: 2012-03-20 09:27
回复 25# MMMIX

就个人理解而言.....
这就是编程中最"人性化"的语言....

因为本来就有人会炫耀,
也有人行为像小孩子....
   
作者: MMMIX    时间: 2012-03-20 13:33
jason680 发表于 2012-03-20 09:27
就个人理解而言.....
这就是编程中最"人性化"的语言....

因为本来就有人会炫耀,
也有人行为像小孩子....


Perl 的语法丰富而灵活,初衷是为了好用,但对这个特点的滥用就成了炫耀(自己的语法知识)了。
作者: ttcn_cu    时间: 2012-03-20 14:33
本帖最后由 ttcn_cu 于 2012-03-20 14:35 编辑

Perl语言的精神是:
简单的事情用Perl很容易实现,复杂的事情可以用Perl实现
仔细揣摩这句话,就能看出来Perl的设计思路

一件很简单的事情,本来就很简单,Perl肯定能有很多种办法做到(包括你能想到的和你想不到的),大牛可以随便写写,这叫*不拘小节*,*寻求最优解*,反正事情很简单,大不了你再重写一个你看得惯的代码,何必斤斤计较代码细节

一件复杂的事情,Perl能实现,说明Perl能够实现很多诸如设计模式,OO框架,函数式编程。这些复杂的东西,只有少数几个方式能解决,Perl语言没有鼓励你自己用很简单的方式去解决,最好按照约定成俗的办法去做。

和Python相比,Python没有第一种方法的灵活,换来了大多数人对第二种事情的一致的态度。
所以用python的人少了这种无谓的争论,可以更好的投入到团队项目的开发,对项目管理更加有利。




作者: walleeee    时间: 2012-04-19 23:58
给你一千种活法,也给了你一千种死法。给你一种活法,也给了你一种死法。
作者: flw    时间: 2012-04-20 07:54
其实 Perl 代码还是很好猜懂的。
至少 => 要比逗号好猜一些。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2