Python是一种不但成熟而且功能也十分强大的面向对象程序设计语言。它的功能性现在已经可以与Java相媲美了。尽管Python有着这样或者那样的优点,但是它仍然面对着这样的一种现实:真正了解Python的人给予了它很高的评价,但是实际上真正了解它的人并不多。在本篇文章里,我将会向您介绍一系列的Python编程资源,这样您就可以对这种编程语言有更多的了解,并且能够逐步的开始使用这个优秀的编程语言了。

开始的第一个步骤

如果您是刚刚开始了解Python编程语言,你现在就需要一套Python编程软件,这样能够让你更好的掌握它。正式的Python软件中包括了程序指令行,图形化的用户界面,范例程序代码以及一整套的相关文件。还有另外一个版本的Python软件,它的正式名称是ActivePython。这个叫做ActivePython的版本是由ActiveState公司提供的。ActiveState是生产Python软件工具以及相关软件的一家公司。但是,这两种不同的版本区别何在呢?

ActivePython版本对于Windows,Linux, 以及Solaris操作系统的二进制形式是可以直接使用的。但是常规的Python软件虽然比ActivePython支持的操作系统要稍微多一些,但是却只能够作为这些操作系统的源代码来进行下载。ActivePython版本比常规的Python软件增加了一些内容,并且附带有更大的标准资源库。如果对于Python软件来说您仅仅还处于入门阶段的话,我推荐您应该跳过对ActivePython的学习。

当你安装了Python软件之后,你会希望掌握它的编程方法,除非你只是喜欢单纯的在你的桌面上增加一个很少使用的可爱快捷方式而已。在国际互联网上已经有了不少关于Python编程语言的使用指南,请看下面的这些内容:

  • 正式的Python文件中包含了范围很大的使用指南,并且对您来说,可能是首选的应该浏览的网址。
  • Python即时通是一个“Python编程语言的最快的速成班”,这个网址让学习者通过在一些页面上对一些程序代码范例进行结构,输入,输出,分类以及变量的控制来熟悉这种编程语言。
  • 投身于Python编程语言的世界是一个综合性的Python软件使用指南。它是以电子书的形式来与大家见面的。这款电子书是为了那些有经验的使用Perl, Java,或者 Visual Basic编程语言的软件设计人员转向使用Python而编写的,所以它是很有针对性的。
  • Python编程语言的全方位接触是一篇在UnixWorld上登出的时间已经比较久的有关Python编程语言的文章。这篇文章向读者们讲述了如何使用Python编程语言来完成一些比较简单的小任务,比如说编制一个善意的电子邮件玩笑软件来让你的朋友们吓一跳或者大吃一惊。
有关Python编程语言总的说明以及资源

如果您已经开始接触Python编程语言并且已经有了一定的使用Python进行程序设计的经验之后,您可能会在这个过程中产生一些问题,或者您会希望得到有关Python编程语言更多的相关资料。为了满足您这方面的需要,我会向您提供一些网络上的资源作为您的文献资料库。下面列出的这些条都是其中比较好的一些网络资源:

  • Parnassus山的拱顶是一个巨大的Python程序代码库,其中包含了成千上万可以使用的Python程序模块。这些程序模块中有程序设计,图形化处理方法以及国际互联网程序设计数据库。在这个站点上还有一些已经完成的应用软件,并且可以作为程序源代码让您下载下来。
  • Python号星际旅行船是Digital Creations公司制作的一个有关Python编程语言的免费网络社区。其中包含了总的数据信息资料库,并且还有成员或者“其星际旅行船宇航员”目录,在这里能够和一些Python编程高手进行交流。
  • O’Reily网络的网络站点ONLamp.com中拥有关于Python程序开发的部分,在这个部分中,学习者能够找到有关的一些新闻,论坛,问题解答留言板以及许多相关的文章。
  • Faqts.com中有一个Python程序设计知识数据库,其中包含了可以随意查询的有关Python程序设计的问题以及解决方法。这些资料都是使用过Python语言的程序设计人员提供的。
  • Python-URL!是Dr.Dobb周刊的电子邮件摘要,其中包含了与Python程序设计语言相关的新闻,公告,以及国际互联网新闻组活动。
  • 有不少针对Python编程语言的电子邮件讨论列表。如果您不能在国际互联网上找到您所需要的答案,您可以通过这种方法从远方获取正确的解决方法。
一些植入Python软件的有用资源

Python编程语言拥有极好的扩充性,并且是一种很好的脚本语言。Python作为编程语言能够非常好的植入大量的应用软件。这是近来有关Python编程语言活动的中心内容,我们能够从theKompany中的VeePee了解到更多的信息。VeePee是一种使用图形用户界面的脚本环境,这是被设计用来植入Linux GNOME或者 KDE应用软件,并且能够对这两种应用软件提供脚本支持。我要一再提示您的是,ActiveState对于在.NET中使用Python编程语言拥有经过实验室检验的具体经验。这样就允许Python编程语言能够继承并且访问在.NET框架中的对象,并且为其它的.NET编程语言提供了一种脚本支持。

IDE(集成开发环境)以及编辑器

就像大家知道的那样,我是一个沉迷于IDE的人:当我编制程序的时候,如果有code completion,弹出式对话框,菜单以及工具条,这样我才会感觉舒服一些。我清除的知道在这个世界上还有许许多多像我一样的人。很幸运的一点是,对我们这些人来说,虽然我们沉迷于此,但是这个世界上有数量繁多的非常优秀的Python软件的IDE能够供我们使用,虽然其中的相当大一部分并不是免费的:

  • PythonWorks软件作品是一个具有商业品质的IDE。它具有一个Tkinter的图形化用户界面,程序代码仓库,程序调试器,“聪明的”编辑器以及在线帮助功能。并且它是同时支持windows,Linux,以及Solaris这三种操作系统的。其零售价格为395美元。其中还包括免费的评估服务。
  • Wing IDE是一个用户化的IDE,它能够支持宏,code completion,多面手程序调试器以及源文件管理工具。Wing对于Linux 以及Windows操作系统的零售价格大约为100美元,但是对于使用公开化源程序来说是免费提供的。现在,免费版本已经可以从多种渠道获得了。
  • PythonWin是一个免费的只能在Windows操作系统中使用的图形化用户界面创建工具。这个工具向程序设计人员提供了一个界面资料库,这个资料库只是针对微软公司的系列产品的。
  • 从我们在ActiveState公司中的朋友(你能证明他们百分之一百的热爱Python语言么?),我们能够获得免费的,经过实验室验证的插件IDE程序。这些程序都是为Visual Studio.NET特别设计的,并且已经被命名为Visual Python。请不要把Visual Python和theKompany的VeePee软件混为一谈,它们是两个完全不同的产品。

在本文中提到的这些资源能够帮助你正式的开始使用Python语言进行程序设计的工作,并且还能够帮助你找到获取这些资源的途径。你只要记住的一点是:没有人喜欢Spanish Inquisitionn(西班牙宗教法庭,在1480-1834年之间存在的天主教法庭,以残酷迫害异端著称)。你不会真的期望只是通过一篇文章就能够获取所有有关Python编程语言的知识吧?这种愿望是非常不切合实际的。

posted @ 2006-03-02 20:22 killvin| 编辑 收藏

PHP5的面向对象特性增强了很多,包括功能上和性能上。但是如果用一门面向对象语言来说,PHP还差很远,简单的举个例子,Java和Python都可以通过import来导入类,但是PHP只能用include这种原始的办法,因而没有办法区分命名空间,做大项目还是不行的。 此外PHP的致命缺陷是它只是Web Server的一个module存在的,没有App Server来进行复杂业务的管理。因此没有办法承担大型项目的开发和运行。像国内的eachnet原来是用PHP的,交易量和复杂度上升以后,后台全部用BEA的Tuexdo来做,PHP只是调用。(不过也有人认为,没有App Server也是一种优势,就是部署简单) Python和PHP的本质区别就在于Python有Zope这样的App Server,因此Python应该划入Java/C#的阵营,而和PHP要划清界限了。

posted @ 2006-03-02 20:20 killvin| 编辑 收藏

接触 Python 是两年前的事了。那时因为要写个程式来分析数值资料,开始的时候打算用自己最熟的 PHP,试了几下,很不顺手。后来转用了 Perl,开始的时候都挺顺利的。直至有一天整理程式,想把写好的几个东西整理成一个工具箱给自己用,试了半天就放弃了:根本是精神虐待。反省后觉得自己学 Perl 只会走捷径,打算上网找些基本的学习文件从头努力,但竟然找到了 Python 的网页。就这样开始了学 Python,而且是欲罢不能。现在我要写什么,基本上都是先考虑用 Python,一来实在好用,二来用 Python 写的程式总会有重用的机会,所以手头的工具越来越多,用起来就更得心应手了。

如果你以前只会用 Shell Script 或是 DOS Batch File 而想学些其他的东西,Python 会是你的首选,如果你己经会 Perl 或是 Tcl 或是别的什么,那 Python 会令你改变对 scripting language 的想法。

为什么要学 Python?

答:好玩。就是这样简单。无论是学 Python 还是用 Python,都是一件赏心乐事。当你写 shell scripts 写得鬼哭神号时,当你改 perl scripts 改得头昏脑涨时,有没有想过写 script 其实是很好玩的一件事。你可能从来不相信当你写一套严肃而功能强大的程式,你可以用一个如此好玩的程式语言来开发。更难令你相信的是,就算在程式开发的后期,甚至是几个月以后当你再次想修改它的时候,你依然都会觉得是一件好玩的事。

Python 能做什么?

答:倒不如问,Python 不能做什么? Python 已经差不多把一个 scripting language 作为整合工具 (gluing tool) 的强大功能完全发挥了出来,任何程式,只要有个给 Python 用的接口,Python 就可以把它据为己用,和其他的程式一块使用。而且

    · Python 有发展 XML 的大型函式库,并开始有大型系统的构建初型。 · 用 Python 写的 Zope,可以用来架设整个网站 · Python 语言自己是用 C 来写的,但现已有用纯 Java 写的 Python 语言实现,近期更有用微软 .NET 方式实现的 Python 翻译器,由此证明了 Python 语言定义的高度完整。 · Python 已移植到许多的操作平台上,包括 Linux、Windows、HP、Solaris、Irix、AIX、BeOS、甚至是 Cray。几乎和 Perl 一样多。 ·由于 Python 本身是 object oriented,所以很容易和 C++,Java 等整合,尤其在 Visual 当道的 Windows 系统。这点要比 Perl 好许多。

和其他语言的比较

一般的说法的这样的:

  • Shell script 太旧了,无论如何不能用来写程式。
  • Perl 擅长做服务器的管理,因为它的字串处理功能特别强大,同时有全面的编程接口和操作系统相连。自己用没问题,就是不懂人家在写什么。
  • PHP 擅长于网页,因为它可以嵌入在 HTML 文件中并支援各类资料库。但一离开网页就左支右绌。
  • Python 特别适合一般的需求,因为它语法简明,容易维护,有很多模组可用,而且容易做出图形介面。但它并不是 object oriented 并不纯,速度也较 Perl 慢一些。
  • Tcl/Tk 基本变数形态只有文字串,每次算术都是从文字变数字再变文字,鸣,没什么好提的了吧。
  • Java 太伟大了,我可不想每次开始写程式时都幻想要完成一个跨企业的解决方案,引入几十个标头档,写完了才明白原来我只需它读一个用户指定的文件,画两条直线就行了。唉,落差太大。
  • Ruby 太新了,要正式应用是将来的事。

但事实上我个人的感受最深的是它比较好玩的说法。虽然像是不认真,但一种可以让人寓编程于娱乐的程式语言,正是程式语言的设计终极嘛。

Python 的作者是数学家,而 Perl 的作者则是个天才程式员。因此这两种语言的风格回异:Python 语法铺排的很整洁,相同功能的程式由不同人写出来的样子都很像,这些一致的、前后呼应的程式对于系统的拓展和整合十分重要。因此阅读 Python 的程式感觉上很畅顺。Perl 的语法则很浓缩,而且经常会有些意想不到的巧思,可惜这些每每体现在字里行间的妙着对整个程式的可读性带来负面影响。因而一个短小的 Perl 程式往往令人爱不释手,但当它越来越长时总会变成程式员的永痛。

至于PHP,因它的发展历史一直是围绕着 web page,所以做网页设计是十分方便的,但是写一般的工作则平平无奇。比如说控制执行绪,处理进程间的讯息传送以致做图形用户介面等都久奉,这是因为从 WEB 的角度,这些并不重要:图形介面,HTML 就己经是了,而程式的执行和互相合作则是 Web Server 要考虑的事。

我推荐 Python 是因为我觉得它比较适合用作一般性程式编写和系统整合,尤其是在科学和教育领域中。我并不是说大家没本事学好 Perl,只是很多时候我们并不需要用到 Perl 的精妙之处,更多的时候用一个清楚直接的描述要比用一个智力题级的招数更有好处。除了语法的设计较为整洁外,Python 还有很好的对电脑图形的支援,也有十分快的数学阵列模组。

而它最方便的地方是很容易的把其他的程式整合在一起,譬如说你有个几年前写的 C 程式,只要修改很小的一部份就可以编译成 Python 可用的模组。事实上已经有自动帮你做这些修改的程式了,人们也己为许多各种好用的函式库做出了 Python binding,如 OpenGL、GTK、QT、GD、甚至于解方程组的、找频谱的都有。

而在使用了一段时间后,我开始体会下面的说法:

    ‘Python 是设计出来的,而 PHP 和 Perl 是累积而来的。’

虽然它们各自都有类似的功能,但在使用时会发现 Python 的写法总是较为一致,这是因为 Python 从一开始便考虑了它整个的架构。相反,像 Perl 或 PHP 则有很多功能都是后来慢慢加上去的,所以到后期 Perl 的发展越来越难,以致 Perl 6 几乎要从头设计。而 PHP 则现在才开始头痛于构思新的函数名称 (所有的 PHP 函数都是全域定义的,所以每加一个函数都有可能和已经定义了的名字重复)。为了解决问题,它们各自都开始注意加强 class, object 的支援。但很明显的是,在程式成熟后再加这些基本功能会令整个语言的框架变得头重脚轻,无论是写起来还是用起来都有些不稳的感觉。

然而 Python 在一开始的时候就把这些考虑了进去:Python 根本就是以物件导向作为设计的基础。因此在加了许许多多的功能和模组后,它的风采仍旧,清新依然。

好话说了不少,光说不练可是不行。参考程式示范区的实际例子,看看 Python 到底是怎样一回事。

posted @ 2006-03-02 20:17 killvin| 编辑 收藏

javascript的调试相当繁琐,alert不能有效地起到调试作用,原因在于:
1, alert只能在开发期使用,不能在产品交付中继续alert debug info
2, 就算在开发期,频繁的alert会导致调试效率低下。
一个简单的log就会有很大帮助。下面就是我在现实生活中使用的javascript log方法。
把它包含在一个全局import的js里面,以后代码就可以采用log()的方式来进行了。

当然,若谁有时间改造为log4j那样的可以按照分类打开或关闭log,再分上info,error什么的log级别就更好了。不过下面的简单方法就够我用拉。

common.js

function log(v)
{
     var s = "<li><font color=blue>"+new Date()+"</font> "+v+"</li>";
     logPanel_log.innerHTML+=s;
}

window.onhelp = function()
{
     logPanel.style.display=logPanel.style.display=='none'?"block":"none";
     return false;
}

document.write(
 "<div id=logPanel style='display:none;text-align:right'>"+
    "<button onclick=\"logPanel_log.innerHTML='';\">clear</button>&nbsp;"+
    "<button onclick=\"logPanel_log.innerHTML+='<hr>';\">HR</button>"+
    "<div id='logPanel_log'></div></div>");

它覆盖了默认的IE 按F1键显示IE help的行为,现在按下F1就能够显示log信息了。

摘自 redsaga满江红 http://www.blogcn.com/User6/caoxg/blog/5705836.html

posted @ 2006-03-02 20:15 killvin| 编辑 收藏

JavaScript說分明 

http://taiwan.cnet.com/enterprise/technology/0,2000062852,20103386,00.htm
朱仲傑撰  2005/12/28

 

最近因為AJAX受到Google等網路服務業者的愛用而聲名大噪。也讓這個其實存在很久的程式語言再度成為討論話題。


JavaScript可以說是全世界使用最普遍的一個語言。雖然就統計資料(註)上來看,用JavaScript為主的專案數量只排在第九名,但我相信就應用的層面來看,絕對遠超過Java與.Net。JavaScript也是最讓人混淆的一個語言,即便是專業的網頁工程師,也不見得每位都能正確的了解它。網頁工程師對它又愛又恨,使用者最能體驗到它所帶來的好處,但常常也是被它搞的昏頭轉向。到底它是個什麼樣神奇的語言呢?

JavaScript的前世今生

提到JavaScript,大家第一個聯想到的就是Java,但一切的誤解也就從這開始。要說它跟Java完全沒關係嘛,也不盡然。JavaScript原來的名稱叫LiveScript,是Netscape(網景)為了它的LiveWare平台所發展出來的一套語言。後來之所以改名叫JavaScript,主要是因為當年Netscape與Sun合作,共同開發網頁上的腳本語言,而剛好Sun正在開發Java語言,初期而且也是以網頁上的應用Java Applet為主,所以LiveScript也就改名為JavaScript。第一個擁有執行JavaScript的瀏覽器Netscape 2.0,發表日期也跟Java一樣,同樣都是1995年,所以算起來今年也是JavaScript的十歲生日。

JavaScript的版本非常多種,最原始的是由Netscape一路發展過來的,後來NetScape把它交給ECMA製定為標準(ECMA-262),而ECMA所製定出來的稱之為ECMAScript;最喜歡自己也搞一套的微軟,也有自訂的Jscript。理論上,有了標準大家就應該要遵守,不過到目前看來,實際上並非如此。各家瀏覽器相容的程度不一,造成現在混亂的局面,同一個網頁用不同的瀏覽器瀏覽有時結果不盡相同。

JavaScript沒有你想像中的簡單

JavaScript是屬於prototype-based的一種語言,而prototype-based又是物件導向程式設計語言(Object-Oriented Programming Language)的一個分枝,所以嚴格說起來,JavaScript也是一種物件導向程式設計語言。光看到「物件導向」這四個字,我想很多人頭皮都已經開始發麻了,不過JavaScript之所以不簡單並不是因為這一點,而是因為它的結構鬆散和型態鬆散(loose typing)所導致。

你若寫過Java程式的話或許就知道,Java程式必需要Java虛擬機器(JVM)上執行,在執行Java程式之前,它必需是被編譯過的;在編譯的過程中,Java會檢查許許多多的條件,例如最基本的語法、變數的宣告等等。

JavaScript一樣得依存在一個容器(Container)中才能執行,我們常見到的容器就是瀏覽器(Web Browser),跟Java不同的是,JavaScript的程式不需要事先編譯,它是屬於直譯式的語言,你可以把它想像成看到一行程式碼就執行一行。因為少了編譯時期的檢查,JavaScript就比Java「自由」許多,你可以在網頁上隨意的位置上安插JavaScript程式、可以隨意的建立新的變數來使用;你不用分清楚什麼是數值,什麼是字串、什麼又是物件,通通可以加加(+)在一起,這就會造成相當不嚴謹的開發過程。

自由是必需要付出代價的,前面提到相容性的混亂,在這又有語法結構上的混亂,這下子可以說是亂上加亂了。網頁工程師之所以對JavaScript又愛又恨,愛是因為透過適當的JavaScript,可以在網頁上創造出許許多多特殊的效果,讓使用者在瀏覽這個網頁時,能有更多的互動。恨是因為市場上極少有以JavaScript為主的整合開發工具(IDE),因為剛剛所說的混亂,造成JavaScript程式很難開發和除錯。

JavaScript之所以普及,是因為寫JavaScript程式的使用者,不見得是寫Java、C/C++、VB等受過基本程式設計訓練的程式設計師,往往網頁的美工人員才是使用JavaScript的大宗。他們不會也沒時間去學習完整的JavaScript,而是有需要時才在網頁上東加一些、西加一點,這些加上去的JavaScript可能是網頁編輯器所提供的元件、或是網路上分享出來的程式片段。JavaScript一點都不簡單,只是大家都很偷懶,用最簡單的方式來使用它罷了。

AJAX應用為JavaScript注入強心劑

JavaScript十年來沒有特別受歡迎,因為WWW盛行以來它和HTML一樣已變成網頁裡最基本的元素,直到AJAX的出現,讓JavaScript大大的受到眾人的注視。AJAX的全名是 Asynchronous JavaScript and XML,JavaScript就是其中之一的主角,AJAX並不是一項新的技術,而是將一些舊有的技術結合起來做一種巧妙的應用,賦予網頁的一股新動力。

AJAX這個名詞最早是出現在Adaptive Path網站上,一篇由 Jesse James Garrett於2005年2月18號所寫的文章中所提出的(http://www.adaptivepath.com/publications/essays/archives/000385.php)。AJAX是客戶端(瀏覽器)的技術,簡單的說,就是用JavaScript與後端伺服器做資料的溝通,資料採用XML的格式,JavaScript動態地從後端拿到XML格式的資料,重新整理、重組後再顯示到網頁上。AJAX基本上是無關Java或.Net的,甚至PHP也可以跟AJAX結合在一起使用。網路上、雜誌裡介紹AJAX的文章相當的多,在這我就不贅述。在這要提醒大家注意的是,因為AJAX,JavaScript又開始大量的應用在網頁裡,前面所提及的混亂又被突顯了出來。混亂不一定只是負面的,所謂時勢造英雄,我們期待有人能出來一統江湖。

JavaScript的其它應用

JavaScript只能夠運用在網頁上嗎?其實蘋果電腦(Apple)除了硬體上的創意外,在作業系統上的表現一直以來也是使用者的最愛。在新的Mac OS X 10.4裡,有個新的功能叫-Dashboard,它可以讓你執行一些小程式,例如月曆、天氣預報、地圖查找等。這些小程式稱為Widget,而撰寫Widget的主要語言就是JavaScript,當然還可以配合HTML、CSS甚至Java Applet。隨著Mac OS X的使用者日益成長,撰寫Widget已成為一個新興的軟體業。Dashboard其實不是第一個實踐這個概念的程式,早在Mac OS X 10.2時,就有一個叫Konfabulator的軟體做出這樣的平台,在當時大受歡迎。後來Apple在Mac OS X 10.4內建一樣功能的Dashboard時,還飽受外界的批評和指責,認為Apple是抄襲Konfabulator的。隨著Mac OS X直接支援Wedget,Konfabulator漸漸的淡出Mac的舞台。不過Yahoo看上了它,把它給買了下來,而在不久前重新推出Windows/Mac版的Yahoo!Webget,這下Windows的使用者也能享受Widget所帶來的便利和好處。

下一步

世界上有所謂的Java工程師、C/C++工程師、VB工程師等?,好像沒有JavaScript工程師這樣的頭銜,我個人覺得他應該是被需要的。JavaScript其實並不好學,教育訓練是個商機,開發除錯平台也是一個商機。這年頭流行認證,它也是可以著墨的,例如辦理類似SCJP、MCSE這樣的認證考式(事實上是有JavaScript Certification,不過沒像其它認證這麼有公信和正式就是了)。唯有專門的訓練課程及認證才能真正落實JavaScript的標準化,這樣寫出來的JavaScript程式才不會相容性不足,造成用某種瀏覽器才能觀看的特定網頁的情況。

而另一種是像無障礙網頁這種的認證,若你的網頁通過JavaScript相容性審合,那麼在網頁上就可以放上一個標章,証明你的網頁是相容於各種瀏覽器的。以上這些如果能由國際大廠來推動,成功的機會才會比較大,好奇的是,這麼多年來,怎麼沒人想幹這件事?!也許是吃力不討好吧。

註: TIOBE Programming Community Index for December 2005 http://www.tiobe.com/tpci.htm 相關連結:

ECMA-262
http://www.ecma-international.org/publications/standards/Ecma-262.htm

Spidermonkey
http://www.mozilla.org/js/spidermonkey/

Rhino
http://www.mozilla.org/rhino/

Dashboard
http://www.apple.com/macosx/features/dashboard/

Yahoo!Wedgets
http://widgets.yahoo.com/

posted @ 2006-03-02 20:09 killvin| 编辑 收藏

Buffalo介绍

Web正随着Amowa/Ajax的引入开发开始变得有趣!

Buffalo是Amowa思想实现的关键组件。Buffalo中定义了Web远程调用的传输基础,并且将远程调用对象完整的序列化到了本地,成为可以被JavaScript编程触及的对象。Buffalo中的重要组件 - BuffaloBinding,提供了将JavaScript对象绑定到HTML元素的能力。这种绑定将是无侵入的,只需要在HTML元素中加入若干个不影响排版的属性,即可将数据与界面绑定。

Buffalo1.1之前的版本重要的功能主要集中于远程调用与Java对象/JavaScript对象之间的双向序列化,这个特性已经被众多的应用久经考验,被认为是健壮的。它大大减少了在Java对象与JavaScript对象之间需要考虑的细节,开发者可以更用心地进行业务设计和界面设计。1.2版本的推出,引入了新的众多的特性,包括:新的重新改写的Spring集成;与流行javascript库prototype的集成;支持浏览器前进后退按钮,等等。Buffalo努力使Web2.0的概念在这个小小的轻量级的框架中得到体现,让你的应用具备更丰富的表现。

 

问题

可是在使用Buffalo传输对象的过程中我发现Buffalo并不能够很好的传递用户自定义的对象,不光如此在与作者的讨论过程中我还发现很多的人对于Javascript程序的规范根本不屑一顾,似乎选择了Javascript本身就是选择了"自由编程",可是真的如此吗?

其实Javascript是一个比较纯粹的OO语言,并不想一些报道中所说的那样,对于封装、继承、多态Javascript同样可以完成,既然它是OO的语言,就理所应当的按照某种规范来编写代码,正如JavaScript說分明 中说得那样,编写Javascript不是一件简单的事情,关键是很多人乱用了这个语言,从而导致给很多的朋友以为写Javascript就是很没有水准的事情(偶以前也是如此),但我最近发现用Javascript这样的动态语言没有一个很好的语言规范,你开发出来的应用只能够停留在小型系统之上,而对于比较大型的应用开发,这样写出来得代买根本无法复用!

再来说说Buffalo传输对象的问题,以下是我自定义的Node对象

function Node(_id , _type)
{

 //log("create node object!!!");
 //============================== property =================================//
    //=========================================================================//
 var id = _id;
 var type = _type; //<- type的出现在OO世界里本身就是背叛
 var brush = null //节点的物理表现句柄
 
 var rList = new Array();//左节点列表
 var lList = new Array();//右节点列表
 
 var rLine = new Array();//节点的左线列表
 var lLine = new Array();//节点的右线列表

 var x = 0;//节点的x坐标
 var y = 0;//节点的y坐标

 var m = false; //标识节点是否可移动
 var r = false; //标识节点是否能够建立联系

 var name = ""; //节点的名称

 //================================ method =================================//
    //=========================================================================//

 this.getType = function()
 {
  return type;
 }
 this.setType = function(_t)
 {
  type = _t;
 }
 this.setName = function(_n)
 {
  name = _n;
 }
 this.getName = function()
 {
  return name;
 }
 this.setId = function(_i)
 {
  id = _i;
 }
 this.getId = function()
 {
  return id;
 }
}

然而在使用Buffalo的时候Node对象根本就无法传递,而导致这个问题的原因竟然是我没有"自由的编写Javascript"!其实问题就出在doStructXML 方法上,作者在这里有意的"避开"了这个问题,所以在传递Node的时候对于其私有的方法Buffalo是根本就不考虑的,FAINT!

原先

 doStructXML : function(data){
  var boClass = data[Buffalo.BOCLASS];
  var boType = boClass ? boClass : "java.util.HashMap";
  var xml = "<map>\n";
  xml += "<type>" +boType+ "</type>\n";

  for (var i in data){
   if (data[i] != boType) {
    if (typeof(data[i]) == "function") continue; /* the function shouldn't transfered. */
    xml += this.getParamXML(this.dataTypeOf(i),i)+"\n";
    xml += this.getParamXML(this.dataTypeOf(data[i]),data[i]) + "\n";
   }
  }
  xml += "</map>\n";
  return xml;
 },

修改后

 doStructXML : function(data){
  var boClass = data[Buffalo.BOCLASS];
  var boType = boClass ? boClass : "java.util.HashMap";
  var xml = "<map>\n";
  xml += "<type>" +boType+ "</type>\n";

  for (var i in data){
   if (data[i] != boType) {
    if (typeof(data[i]) == "function")
    {
     /*判断方法名称*/
     if(i.substring(0,3) == 'get')
     {
      var _name = i.substring(3,i.length).toLowerCase();
      var _value = data[i]();
      //alert("functin name[" + this.dataTypeOf(_name) + "]=" + _name
      // + " | value[" + this.dataTypeOf(_value) + "]=" + _value);

      xml += this.getParamXML(this.dataTypeOf(_name),_name)+"\n";
      xml += this.getParamXML(this.dataTypeOf(_value),_value) + "\n";
     }
     continue; /* the function shouldn't transfered. */

    }
    
    xml += this.getParamXML(this.dataTypeOf(i),i)+"\n";
    xml += this.getParamXML(this.dataTypeOf(data[i]),data[i]) + "\n";
   }
  }
  xml += "</map>\n";
  return xml;
 }

 

总结

1。Javascript的编写是否应该遵守一定的规范,其实属于程序员自身休养的问题,但我还是觉得复用JAVA的编码规范不是坏事情!

2。时刻记住Buffalo是建立在burlap协议的基础上的,我们应该把注意力放在burlap上而不仅仅只是Buffalo!

posted @ 2006-03-02 19:46 killvin| 编辑 收藏

不知道已经被欺骗了多少次了,自己依然还是很留恋CSDN的Blog空间,是不是自己太虚荣了?无论如何都不想再次的被忽悠!

posted @ 2006-03-02 19:24 killvin| 编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5