ASP.NET网页设计Boo:概览CLI之上的新言语仓酷云
呵呵,那你就关注微软的招聘信息以及别人的招聘经验啊,还有也不一定去做技术的,你如果真的想去就多了解了解。(其实我的意思是说想到微软做技术是很不容易的。比来几年中,得益于Java和.NET平台优秀的可扩大性,在这两个平台上都呈现了一多量使人冲动的新言语。在Java范畴内,人们欣喜地看到了JRuby和Groovy这两门言语的呈现,它们均在语法、举措(Action)方面供应了很高水平的天真性。若公道利用的话,会年夜年夜进步开辟者的临盆效力。.NET平台上也的确呈现了很多制造性的新言语,微软公司官方撑持的IronPython和F#都让人们对CLI的天真性和可扩大性充斥了信念。在IronPython和F#遭到普遍存眷和撑持的同时,其他一些一样基于CLI的言语也在冷静地争夺着本人的保存空间。比方开源社区所推许的L#(一门CLI上运转的基于Lisp的言语)、IronRuby和Ruby.NET等两个Ruby的完成等。
良多这类立异都是将现有的言语移植到CLI平台上(比方,IronPython就是CLI上的Python言语,就像JRuby是JVM上的Ruby言语一样),但也呈现了一些全新的、具有本人共同语法的言语,固然这些全新的言语也不免遭到今朝方兴未艾的各类盛行言语的影响。boo就是个中之一。boo是CLI平台上的一种静态范例的言语,其良多特征都遭到了Python的影响,但却又不是Python的复杂移植。实践上,boo其实不在乎代码的缩进,也不强制我们利用self关头字。别的,boo从基本下去讲仍是一种静态范例言语,这也与Python的静态特征不尽不异。
借助于boo所内建的言语特征和复杂的语法布局,加上其静态特征,我们能够用该言语加倍高效地编写.NET使用程序,程序的实行效力乃至也能与C#八两半斤。别的,在boo中,我们还可使用任何CLI平台上的现存类库,boo代码一样可以简单地在其他CLI言语中被重用!
利用boo开辟十分复杂
RodrigoB.deOliveira已经对C#的良多过于严厉的编码划定规矩(比方范例的强迫转换)及其不克不及经由过程shell测试运转代码感应十分忧郁。因而boo言语应运而生,并很快开展成一个十分便利的.NET和Mono通用的平台,基于该平台,我们可以创立GUI原型、单位测试乃至游戏等各种程序。
进修boo的最复杂办法就是从boo的交互shell入手下手,boo的交互shell别名booish。在booish中,我们便可天真地恣意观察代码片段,进而了解boo的语律例则。
关于最多见的helloworld程序来说,boo的视野十分复杂——print加大将要输入的字符串便可。
>>>print"HelloScaryWorld!"HelloScaryWorld!必要申明的是,我们还能够将上述代码保留在代码文件中,然后利用booi命令实行该源文件。
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!我们还能够用booc命令将helloworld.boo剧本编译成为Windows可实行文件,行将boo代码编译成正当的CLI使用程序。
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!boo是一种静态范例的言语,每一个变量都有本人的范例。比方,我们能够创立一个值为“HelloWorld”的string范例变量:
>>>var="Helloworld""Helloworld">>>var.GetType()System.String注重到这里并没有显式地将var声明为string范例,但因为boo的静态特征并依据该变量被设置的值,var就主动地被设置成了string范例。
boo字符串
与Python相似,boo为字符串、汇合等范例增加了良多天真的内建(built-in)功效撑持,让我们举例申明。
boo撑持字符串改写(利用${}语法),还撑持Python作风的多行字符串。
>>>adj="scary""scary">>>print"Hello${adj}world"Helloscaryworld多行字符串十分易于利用,更不必忧虑字符本义等成绩。
firstname="Joe"lastname="Dirt"accountid="A499"amount="1.32"msg=""""""与Python和Ruby相似,正则表达式和汇合范例(比方list和map)的撑持内建到了boo言语自己中,并供应了语法上的快速利用体例。
正则表达式经由过程“/”界说,实在际的范例为System.Text.RegularExpressions.Regex。婚配则经由过程Perl作风的“=~”操纵符完成。比方,以下代码便可用来婚配邮政编码信息:
>>>regx=/^d{5}([-]d{4})?$/^d{5}([-]d{4})?$>>>if"22101-4444"=~regx:print"yes"boo的汇合范例
boo撑持三种内建的汇合范例:一般数组(长度流动,且只能包括某一断定范例的数据)、列表(长度可变,能包括分歧范例的数据)和哈希表(用来存储称号/值对)。
数组
数组用来保留一系列不异范例的对象,不克不及凌驾某个预定的长度。在boo中的创立语法以下:
>>>myarray=(1,2,4,5)(1,2,4,5)我们也不克不及在数组中增加分歧范例的数据。
>>>myarray.SetValue(6,3)>>>myarray(1,2,4,6)>>>myarray.SetValue("test",3)System.InvalidCastException:Objectcannotbestoredinanarrayofthistype.atSystem.Array.InternalSetValue(Objectvalue,Int32index1,Int32index2,Int32index3)atInput50Module.Main(String[]argv)列表
列表是一类长度不流动的、可被索引且可以包括多种分歧范例的数组。这是一种十分天真的范例,经由过程从Python中借来的方括号([])创立,属于Boo.Lang.List范例。
>>>mylist=>>>mylist.GetType()Boo.Lang.List>>>mylist.Add("test")能够看到,boo中的列表可以包括分歧范例的对象,还可以利用Add办法增加新元素。若想懂得列表今朝包括了甚么,我们可使用Contains办法,乃至还可以经由过程扣问逻辑成绩完成:
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!0哈希表
boo中的哈希表是一个保留称号/值对的容器。这些称号/值对都可为分歧的范例。
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!1哈希表经由过程称号/值对完成,因而,如果输出了称号,那末将失掉其值。鄙人面的代码中,我们输出了".NET",失掉了"boo"。
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!2我们还可使用ContainsKey或ContainsValue办法搜刮哈希表。
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!3
迭代
与Python和Ruby相似,boo也同意我们简单地对汇合范例举行迭代。不外boo不撑持Ruby或Groovy中罕见的块(block)和闭包(closure)。
列表的迭代
一般情形下,boo中的迭代是利用for语句完成的:
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!4哈希表的迭代
我们也能够在哈希表长进行迭代:
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!5必要注重的是,由于boo的哈希条目存贮在System.Collections.DictionaryEntry范例中,以是我们能够依据必要会见其Key和Value成员。
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!6
boo中的函数
boo同意我们在类界说以外创立函数,这一点十分相似于Python和Groovy。在boo中,函数是“一等国民”(即函数自己也是对象),利用def关头字创立。
比方,以下代码界说了一个值为"boo"的字符串。必要注重的是关于字符串范例,boo中没有Python那样内建的lower办法。但创立一个lower办法却相称的复杂:利用def关头字界说,并经由过程“as”语句指定参数范例便可。
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!7
boo中的IO
经由过程利用using关头字,boo让文件操纵变得十分复杂。我们基本不必忧虑文件处置中的一些罕见成绩,比方封闭文件等,由于using语句将主动为我们做好这些。
比方,读写某个当地文件将十分简单:
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!8经由过程利用函数,我们能够从头创立Groovy中getText作风的办法:
C:devprojectsacme>booisrchelloworld.booHelloscaryworld!9
与NAnt集成
经由过程boo义务,boo可以与NAnt编译文件协同事情。上面这个例子就演示了boo与NAnt协同事情可以完成的义务——在某个dll上使用FxCop,然后用boo将个中CriticalErrors的个数统计出来:
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!0
在boo中单位测试十分复杂
由于boo可以与其他CLI库配合利用,以是boo代码也可以简单地利用NUnit的属性。
比方,以下代码利用了用来测试数据库的NDbUnit,并用NUnit创立了一个复杂的测试用例。在该测试用例中,我们利用NDbUnit的API拔出一些数据,然后确认这些数据的确保留到了数据库中。
能够看到,与C#比拟,boo代码显得简便很多。由于boo其实不利用分号和年夜括号,且范例声明也少了良多。
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!1若你想以最快的速率开辟单位测试,那末boo将是一个明智的选择。由于Boo撑持属性(IronPython其实不撑持),因而与NUnit共同起来也没有任何成绩。
静态却不掉静态特征
固然我们其实不必要显式声明变量的范例,但boo却的切实其实确是一种静态范例的言语。boo在底层依据变量的值来主动决意变量的范例。比方,以下一段剧本创立了一个string范例,并实验挪用一个其实不存在的办法。
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!2实验编译该剧本,将失掉以下毛病:
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!3如果间接运转该剧本,也将失掉一样的毛病:
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!4只管云云,boo在范例方面仍供应了良多便当。经由过程利用duck范例,我们能够推延编译期范例反省。若某个变量的范例为duck,boo将实验用反射的体例挪用办法。比方,若我们将var声明为duck范例,那末将不会失掉编译期毛病。而如果间接运转这段剧本,将失掉一个分歧的毛病:
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!5借助于duck范例,boo可以以十分文雅的体例编写测试程序并把持InternetExplorer:
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!6注重到变量ie的范例为duck,如许便可加倍文雅地将实行动静传送给该实例,而其实不会招致任何毛病。
找到页面上的某个链接以后,我们能够点击该链接,然后准确考证随后页面中的内容。
C:devprojectsacmi>booc-out:bin/helloworld.exesrc/helloworld.booBooCompilerversion0.7.6.2237(CLRv1.1.4322.2032)C:devprojectsacmein>helloworld.exeHelloscaryworld!7
利用boo举行开辟将显得十分天然
得益于其宽松的语律例则,boo同意我们以加倍轻松快速的体例完成.NET平台上的义务。若你正在计划程序的原型,或是创立用户界面元素,那末boo将是个尽佳的选择。不但云云,利用boo创立的一切程序或组件都可以无缝地与其他.NET类库共同利用,不管这些组件是用C#、VB.NET仍是托管C++编写的。boo是一种.NET平台上十分友爱的言语,让我们可以不受束缚地疾速编写代码。还躲甚么呢——明天就来尝尝boo吧!
来自:http://www.infoq.com/cn/articles/boo-intro
其实net网页编程之所以在曾经独步天下,就是因为他的跨平台、安全性,这两方面,效率可不是net网页编程的强项,反而是他最短的一块挡板,虽然net总是用理论证明比.NET快。 Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。 这也就是最近几年来随着各种新的后台技术的诞生,CGI应用在Internet上越来越少的原因。CGI方式不适合大访问量的应用。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 由于CGI程序每响应一个客户就会打开一个新的进程,所以,当有多个用户同时进行CGI请求的时候,服务器就会打开多个进程,这样就加重了服务器的负担,使服务器的执行效率变得越来越低下。 代码的可重用性差:由于是面向结构的编程方式,并且混合html,所以可能页面原型修改一点,整个程序都需要修改,更别提代码重用了。 HTML:当然这是网页最基本的语言,每一个服务器语言都需要它的支持,要学习,这个肯定是开始,不说了. ASP.net1.1和2.0在程序上的语法也有很大不同,现在2.0属于新出来的,不知道半年后会不会有3.0(说笑一下)。Windows2003系统自动支持ASP和ASP.net环境,不用安装任何程序。Asp.net属于编译语言。ASP的最大不同(ASP属于解释语言)。 可以通过在现有ASP应用程序中逐渐添加ASP.NET功能,随时增强ASP应用程序的功能。ASP.NET是一个已编译的、基于.NET的环境,可以用任何与.NET兼容的语言(包括VisualBasic.NET、C#和JScript.NET.)创作应用程序。另外,任何ASP.NET应用程序都可以使用整个.NETFramework。开发人员可以方便地获得这些技术的优点,其中包括托管的公共语言运行库环境、类型安全、继承等等。 市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。 我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
页:
[1]