hadoop 大数据

第一步:下载和安装Scala在命令行模式下输入Scalacmd 写道C:\DocumentsandSettings\19002850>scala WelcometoScalaversion2.7.5.final(JavaHotSpot(TM)ClientVM,Java1.6.0_13) . Typeinexpressionstohavethemevaluated. Type:helpformoreinformation. scala> 如果你看到scala提示符,那么恭喜你,说明Scala安装成功了。第二步:学习使用Scala解释器(interpreter)Scala也算是解释性语言,所以你可以直接与解释器交互。cmd 写道scala>1+3res0:Int=4scala> 直接输入 1 + 3 ,返回res0: Int = 4res0表示变量名, Int表示类型, 4是值。Scala的类型定义在冒号后面,和java放在前面不同,和UML类图的属性定义方式一样。Scala是强类型语言,必须要定义类型,但Scala编译器足够聪明,他能够根据你的值帮你定义变量的类型。这里res0是个变量名,所以你可以接下来再使用。cmd 写道scala>res0*3res1:Int=12scala> 解释器又给了一个变量res1。Scala的所有变量都是对象,所有操作都是方法。所以*也是方法,你可以这样调用:cmd 写道scala>res0.*(res1) res2:Int=48scala> 这个和java很不同,java的int不是对象。是不是有点绕进去了,那么来个hello world宣告第二步结束。cmd 写道HelloWorld! scala> 这个println是个方法,因为Scala有预定义导入一些类,所以可以直接使用。因为Scala更新很快,每个版本的Scala的解释器可能都有一些不同,所以如果返回的变量名或有其他有一点不一样,请不要太奇怪。第三步: 定义变量写程序最入门就是定义变量和方法,前面的变量由Scala解释器自动定义了,这一步自己定义变量。Scala有两种类型的变量,val 和var 。 val 变量的值只能初始化一次,再次赋值就发生错误,var就和java的变量相同,可以随时修改。val 是函数式编程的风格,变量一旦赋值就不要再做修改,从程序上将有很多好处,但有时候做起来会比较绕。cmd 写道msg:java.lang.String=HelloWorld! :5:error:reassignmenttoval ^ scala> Scala是强类型语言,每个变量都需要类型。但如果你赋给变量的有足够明细的类型提示,那么编译器会帮你把类型加上去。把刚才的msg打印出来cmd 写道scala>println(msg) HelloWorld! scala> 再来看看var ,比较好理解。cmd 写道greeting:String=HelloWorld! scala>println(greeting) HelloWorld! greeting:String=HelloWorld! scala>println(greeting) HelloWorld! scala> 记住,Scala有两种变量标识,和java不一样。第四步: 定义一些方法以前程序就是变量和方法组成吧,所以变量和方法是最基础的东西。我们定义一个取最大值的方法maxcmd 写道scala>defmax(x:Int,y:Int):Int=if(x<y)yelsex max:(Int,Int)Int 定义变量用val和var,定义方法用def 。这个max方法有方法参数,返回值类型,方法体。麻雀虽小,五脏俱全了。Scala的变量表示是变量名: 类型 ,这一点和java甚至其他语言都很不同,和UML风格比较接近。调用方法很简单:cmd 写道scala>max(3,8) res9:Int=8Scala中方法也是一个类型,或者说是一个值,成为First Class。所以可以把max看成是个变量名,(Int,Int)Int是它的类型。他可以作为参数传递,也可以赋值给其他变量。cmd 写道scala>valm=max_ m:(Int,Int)=>Int= 将max赋值给m, 请注意max后面带的下划线,不要忘记写了。调用mcmd 写道scala>m(1,3) res11:Int=3scala> 在初学的时候就讲这个好像有点急进了,不太容易理解,不过没关系,先了解一下总比看到后莫名其妙好。第五步:运行脚本Scala是一个动态性很强的语言,所以它也像Ruby那样,能够写脚本运行。新建一个hello.scala的文本文件:打开命令行,并到达hello.scala所在的目录:D:\&;scalahello.scala Hello,world,fromascript! D:\&; 可以看到很简单,就运行了这个脚本。第六步: 循环用while, 判断用ifScala中使用while和java差不多。写个把输入的参数字符逐个打印出来的小脚本,printargs.scalawhile(i<args.length){ println(args(i)) }这段脚本会把传入的参数逐个打印出来。while循环体外定义一个可变的变量i,在循环体内每次加一,直到传入的参数全部打印完毕。cmdD:\&;scalaprintargs.scalaScalaisfun Scala is fun D:\&; 注意,Scala中不能用i++或++i第七步:用foreach和for进行迭代上面介绍了用while做循环,用过ruby或者喜欢java5新特性的人可能会说,hey,做个循环怎么这么丑?ruby,java5有foreach,Scala当然也有!接着上面的需求,用foreach实现把传入的参数打印出来。建个文本文件,叫pa.scala,里面写上args.foreach(arg=>println(arg))运行pa.scala你会看到cmdD:\&;scalapa.scalaScalaiseasy Scala is easy D:\&; arg是迭代变量,不需要手工赋值,编译器会把传递给它。同时编译器会认出arg的类型,所以这里不需要定义类型。但我觉得如果类型不是一目了然的情况下,最好是定义一下类型,可以使阅读代码的人很轻松。把arg定义上类型pa.scalaargs.foreach((arg:String)=>println(arg))注意当给变量定义类型的时候,必须要加括号!这里传给foreach的实际上就是一个匿名方法!匿名方法的定义是这样的:方法参数 => 方法体我们这个传入的匿名方法就是: (arg: String) => println(arg)很懒的程序员会发现,,这里arg好像没什么必要,唯一参数传给唯一的方法体。在java这样的想法可能是空幻想,但Scala帮你实现了!我们可以省略成:pa.scalaargs.foreach(println)就这么少!Scala还有一个for迭代,可以做更多的事情,但这里只介绍一下它的简单用法。在ruby中实现上面的打印参数:#Remember,thisisRuby,notScalaputsarg end用Scala的for来实现for(arg<-args) println(arg)感觉怎么样?这里左箭头<-可以读成in。在Scala,如果一句话是一行,可以省略分号;如果多个语句放在一行,用分号隔开。第八步: 数组数组是定义数据类型很重要很基础的容器。在Scala里如何使用数组呢?这次我们的参数由程序定义,并把他们打印出来。建个文本文件,叫paramswithvalues.scala) ) print(greetStrings(i)) 这里出现了很多Scala的新式武器!1. 定义数组类型Scala代码val已经介绍过了,表示greetStrings不能再被赋值。这里Array[String]表示类型,可以读成字符串的数组,它是一个类型,也就是类,所以可以用new去实例化。括号3表示数组容量是32. 数组元素赋值Scala代码虽然greetStrings是不可更改的,但数字元素可以。Scala用小括号代替java的中括号,可能很多java工程师会说:呵,发明新轮子。其实Scala是被冤枉的。Scala里所以东西都是对象,数组也不例外。数组赋值其实也是一个方法完成的。上面的代码会被编译器转换成两个参数的方法:Scala代码当然你也直接这样写上面的赋值:Scala代码) ) 3. 数组元素读取在for循环体里面有Scala代码print(greetStrings(i))为什么Scala不用中括号呢?是因为Scala有一套通用规则,会把小括号转换成apply。所以编译器会得到这样的代码:Scala代码print(greetStrings.apply(i))很魔术?其实只要知道Scala的一些通用规则,很多符号就变得非常简单易懂了。如果不使用符号,我们的代码同样可以完成:Scala代码) ) ) ) )) print(greetStrings.apply(i))这里for循环用了0 to 2,很容易理解,就是从0到2,默认步进1.当方法参数只有一个的时候,可以不写括号和点,所以第一循环是这样写就够了:Scala代码to是0的一个方法,Scala代码))

世界上那些最容易的事情中,拖延时间最不费力。

hadoop 大数据

相关文章:

你感兴趣的文章:

标签云: