再见西城 发表于 2015-1-18 11:18:02

了解下JAVA的面向Java开辟职员的Scala指南 - 构建盘算器,第3部分

其实你不用Struts,spring这些工具,直接用jsp,servlet能够很方便地写出来,而且,可以根据个人的水平、爱好,有很多方案。而struts,spring这些工具的出来。
接待勇于探究的读者回到我们的系列文章中!本月持续探究Scala的言语和库撑持,我们将改革一下盘算器DSL并终极“完成它”。DSL自己有点复杂—一个复杂的盘算器,今朝为止只撑持4个基础数学运算符。但要记着,我们的方针是创立一些可扩大的、天真的对象,而且今后能够轻松加强它们以撑持新的功效。
持续前次的会商……
申明一下,今朝我们的DSL有点庞杂。我们有一个笼统语法树(AbstractSyntaxTree),它由大批case类构成……
清单1.后端(AST)
packagecom.tedneward.calcdsl
{
 //...
 privateabstractclassExpr
 private caseclassVariable(name:String)extendsExpr
 private caseclassNumber(value:Double)extendsExpr
 private caseclassUnaryOp(operator:String,arg:Expr)extendsExpr
 private caseclassBinaryOp(operator:String,left:Expr,right:Expr)
 extendsExpr
}
……对此我们能够供应相似注释器的举动,它能最年夜限制地简化数学表达式……
清单2.后端(注释器)
packagecom.tedneward.calcdsl
{
 //...
 objectCalc
 {
  defsimplify(e:Expr):Expr={
   //firstsimplifythesubexpressions
   valsimpSubs=ematch{
    //Askeachsidetosimplify
    caseBinaryOp(op,left,right)=>BinaryOp(op,simplify(left),simplify(right))
    //Asktheoperandtosimplify
    caseUnaryOp(op,operand)=>UnaryOp(op,simplify(operand))
    //Anythingelsedoesnthavecomplexity(nooperandstosimplify)
    case_=>e
   }
   //nowsimplifyatthetop,assumingthecomponentsarealreadysimplified
   defsimplifyTop(x:Expr)=xmatch{
    //Doublenegationreturnstheoriginalvalue
    caseUnaryOp("-",UnaryOp("-",x))=>x

    //Positivereturnstheoriginalvalue
    caseUnaryOp("+",x)=>x

    //Multiplyingxby1returnstheoriginalvalue
    caseBinaryOp("*",x,Number(1))=>x

    //Multiplying1byxreturnstheoriginalvalue
    caseBinaryOp("*",Number(1),x)=>x

    //Multiplyingxby0returnszero
    caseBinaryOp("*",x,Number(0))=>Number(0)

    //Multiplying0byxreturnszero
    caseBinaryOp("*",Number(0),x)=>Number(0)

    //Dividingxby1returnstheoriginalvalue
    caseBinaryOp("/",x,Number(1))=>x

    //Dividingxbyxreturns1
    caseBinaryOp("/",x1,x2)ifx1==x2=>Number(1)

    //Addingxto0returnstheoriginalvalue
    caseBinaryOp("+",x,Number(0))=>x

    //Adding0toxreturnstheoriginalvalue
    caseBinaryOp("+",Number(0),x)=>x

    //Anythingelsecannot(yet)besimplified
    casee=>e
   }
   simplifyTop(simpSubs)
  }

  defevaluate(e:Expr):Double=
  {
   simplify(e)match{
    caseNumber(x)=>x
    caseUnaryOp("-",x)=>-(evaluate(x))
    caseBinaryOp("+",x1,x2)=>(evaluate(x1)+evaluate(x2))
    caseBinaryOp("-",x1,x2)=>(evaluate(x1)-evaluate(x2))
    caseBinaryOp("*",x1,x2)=>(evaluate(x1)*evaluate(x2))
    caseBinaryOp("/",x1,x2)=>(evaluate(x1)/evaluate(x2))
   }
  }
 }
}
<p>
IDE是好。java中的IDE更是百花齐放,你用jbuilder能说jbuilder赶不上vs吗?用eclipse,net网页编程beans也很舒服啊。我就不明白“稍微差一些”那一些是从哪里差来的。

变相怪杰 发表于 2015-1-19 16:11:22

是一种为 Internet发展的计算机语言

分手快乐 发表于 2015-1-22 11:40:27

你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。

谁可相欹 发表于 2015-1-24 15:31:19

还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。

精灵巫婆 发表于 2015-2-1 19:51:06

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

金色的骷髅 发表于 2015-2-7 14:39:55

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

柔情似水 发表于 2015-2-22 08:17:41

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

冷月葬花魂 发表于 2015-2-22 20:19:51

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

若相依 发表于 2015-3-6 16:45:34

科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。

愤怒的大鸟 发表于 2015-3-13 04:11:44

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

因胸联盟 发表于 2015-3-20 12:34:53

是一种使网页(Web Page)产生生动活泼画面的语言
页: [1]
查看完整版本: 了解下JAVA的面向Java开辟职员的Scala指南 - 构建盘算器,第3部分