`
javamvp
  • 浏览: 38892 次
  • 性别: Icon_minigender_1
  • 来自: 江苏
社区版块
存档分类
最新评论

Scala初次接触

阅读更多

文章整合了一些内容,也是我自己看了过后的心得,不用作为纯技术文章来阅读,有兴趣可以大家一起探讨:silentbalanceyh@126.com,介绍性的东西不多讲,直接进入主题。我尽量靠近一个开发者的学习流程来写,这样可能比较有作用点,因为很多资料可能比较适合专家阅读,而我只是个初学者。

1.Scala语言的基本环境

  先提供一个本人的操作系统平台和环境,可能不同的平台安装不一样,免得出现环境冲突:

OS:Windows 7 Ultimate 64bit

JDK:jdk-6u15-windows-i586(32bit)

Scala语言下载地址:http://www.scala-lang.org/downloads/distrib/files/scala-2.7.5.final-installer.jar

Eclipse Scala语言插件的更新地址:http://www.scala-lang.org/scala-eclipse-plugin

  需要注意的是:

1.Scala语言可以和Java语言相互操作,scalac编译命令会将源文件编译成java的class文件,而且可以从scala里面调用所有java里面的类,所以Scala的安装需要java环境,而且java和scala能够进行相互调用操作。

2.Eclipse插件的系统要求:

1)JDK的环境推荐是version 1.6.0 update 14,最低要求是version 5

2)Eclipse版本要求,推荐是3.5,最低要求是3.4.2版本

  下载下来的安装包在Windows下边是.jar的文件,即在拥有JDK的环境里面可以直接通过双击的方式来执行,Eclipse的插件安装操作菜单如下:

Help -> Install New Software... -> Add...

然后录入名称和下载插件更新地址,直接下一步直到完成,Scala语言安装完结过后,就可以使用Scala提供的命令了,和java类似,有两个命令是常用的:scalac,scala;不一样的是,因为scala是函数对象混合式语言,所以在你单独输入scala命令的时候,如同python这种函数式语言一样,可以启动scala解释器,如果使用Linux Shell熟悉的人很容易理解,这里实际上就是shell方式书写scala表达式以及程序。单独录入scala命令的时候显示的图片如下:

scala启动画面

这样就启动了scala解释器。

2.Scala解释器的基本使用:

按照上边步骤启动Scala解释器过后,就可以使用一下Scala了。先看几个简单的例子:

scala> 3 + 4

录入上边代码过后【蓝色部分为手动录入】,屏幕上将会输出

res0:Int = 7

在上边这一行里面,包括了一下几个部分:

res0是系统自动分配的一个标识符

Int是这个表达式执行结果返回值的类型

=在这里不是赋值操作

7就是录入表达式子 3 + 4 的返回值

  这里Int取自于scala默认载入包里面的类Int,在Scala语言里面,包语义和java里面的包语义近似,而这里Scale的Int类型和Java里面的int类型是可以认为是等价的,因为scala语言本身是可以和java进行交互的,所以java里面的原始数据类型在scala里面都可以找到对应的类型,例如Scala里面的Float对应java语言里面的float原始类型。在没有任何说明的情况下,系统生成的标识符一般格式是resX的方式。而且如果不关闭解释器,这个变量会一直存在,如同Erlang的Shell里面的执行方式,比如紧接着刚刚的例子录入:

scala> res0 * 3

解释器将会输入以下:

res1:Int = 9

  解释器最终会等待一个完整的可执行的语句在录入的时候才会执行,而scala解释器和Python的解释器一样,也是支持多行输入的,比如在解释器里面录入:

scala> val multiLine =

| "MultiLine Hello."

在录入第一行过后,直接敲回车,会出现开始的|,表示可以继续录入,直到录入了完整的scala语句为止,屏幕会在执行的时候输出:

multiLine:java.lang.String = MultiLine Hello.

而且这里可以看出直接赋值的scala字符串和java里面的String类型的变量是几乎等价的,如果在录入过后,您觉得需要终止输入,只需要敲两次回车就可以中断

scala> val oops =

|

|

You typed two blank lines. Starting a new command.

scala>

解释器的推出直接输入下边的命令:

scala>:quit

或者

scala>:q

  这里插入一段:

  在scala语言里面,定义量的关键字常用的是valvar,这两者有个细微的区别,val定义的量是不可变量,若要进行再次赋值的时候会报错,而var量是可变量,可以进行改变,跟平时我们编程的方式有点相同。下图可以看出:

执行结果

  而在scala里面,未定义的变量是不能够使用的,比如从未定义过value3,录入value3的话会出现下边的输出:

未定义变量的输出

【这里我个人推测:scala解释器在解释整段脚本的时候,是使用的固定的内存分配,上边有一段val synthvar$2 = value3,所以我们在脚本中定义的每个变量实际上系统默认是用val方式来进行定义的,这一点和JVM类似,定义的都是一个变量的副本,当然这里使用的是原始变量定义方式,不牵涉到类和对象这种复杂的数据类型,所以仅仅是原始类型的分配方式。而分配过程本身实际上是在解释器里面定义的一个变量副本进行操作】

3.Scala中的函数:

  Scala中的函数定义方式如下:

scala> def max(x: Int, y: Int): Int = {...}

  所有的Scala函数都是以def关键字开始,其次跟随函数的名,然后在一个大小括号里面用“,”定义一个函数的参数列表,末尾跟着函数的返回值。上边这个函数的函数签名为:

  max:(Int,Int)Int

  仔细解析一下上边的函数的定义方式:

def是一个关键字,属于函数的定义的开始

max是函数名

xy是形参名

:Int是函数的返回值

{...}中的内容是函数体

  一般情况下,Scala解释器需要我们在编写代码的过程提供一个函数的返回值,如果这个函数是递归的,这种情况,我们必须显示声明函数的返回值类型,而有些类型是不需要提供返回值的。所以上边的函数可以写成:

scala> def max(x:Int,y:Int) = ...

  上边这种情况也可以不用提供函数的返回值,函数调用就和其他调用方式差不多,直接录入max(3,5)就可以直接调用了,不过Scale里面的无参数的函数还可以使用这种方式调用:

scala> def hello() = println("Hello World")

hello:()Unit

  这种情况下,定义了一个Scala函数,它的返回值是()Unit,函数名是:hello,对了这里忘了说,Scala语言在函数定义的时候,直接从解释器里面录入函数定义过后,解释器的输入为函数签名,即上边的hello:()Unit部分。若一个函数返回的是空,则在Scala语言里面就是返回()Unit,Scala语言的Unit类型和Java里面的函数void类型是等价的。因此,如果要调用一个不带任何参数的函数可以直接在解释器里面输入:

scala> hello()

或者一种不良好的风格:

scala> hello

  Scala里面的主函数入口:

  def main(args:Array[String])

4.简单的Hello World例子

  1)编写HelloWorld.scala文件,文件内容如下:

object HelloWorld{

def main(args:Array[String]){

println("Hello World")

}

}

  2)然后使用scalac命令进行编译,进入命令提示行:

scalac HelloWorld.scala

  3)再使用scala命令执行该文件:

scala HelloWorld

  在编译过后,会生成两个文件一个HelloWorld.class和HelloWorld$.class两个文件,这里其实还有一种执行方式就是:

java HelloWorld

  不过这种执行方式需要注意classpath,在Java里面,public class的名称和文件名必须是一样的,但是Scala没有这种要求,但是还是需要使用一种比较严格的规范来执行可能好点。

5.总结
  
初次接触Scala的时候遇到了不少的问题,这些问题等我找到原因了过后再添加进入本日志,大概猜到了问题来源,跟我的环境有关。若本文有不合适的地方,请来Email:
silentbalanceyh@126.com

分享到:
评论

相关推荐

    上手提示:使用新版IDEA+Maven+Scala编写Spark程序

    对于初次接触这个版本的开发者来说,熟悉其新特性是非常重要的一步。 - **新建Scala项目**:在IDEA 2017版中,创建Scala项目的步骤可能与直觉稍有不同。首先选择“新建Project”,然后选择“Scala”选项,接着再...

    scala&spark;

    【Scala与Spark简介】 Scala是一种多范式的编程语言,它结合了面向对象和函数式编程的概念,由瑞士联邦理工学院洛桑(EPFL...无论你是Java开发者还是初次接触编程,Scala都能提供一个高效、强大且富有创新的编程环境。

    Scala代码示例

    #### 第一部分:初次接触Scala 在“一个初识的例子”章节中,我们通过一系列简单的Scala代码示例,初步体验Scala的语法和基本概念。这些示例涵盖了变量声明、类型推断、函数定义以及基本的控制结构,如条件语句和...

    activator-minimal-scala-specs2-源码.rar

    《深入解析Activator Minimal Scala Specs2源码》 在编程世界中,Scala作为一种强大的多范式编程语言,因其丰富的表达...对于想要提升Scala测试技能或者初次接触Scala测试的开发者来说,这是一个不可多得的学习材料。

    scala-examples:函数式编程的代码示例

    Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。这个"scala-examples"项目提供了一系列的代码示例,旨在...对于想要提升Scala技能或者初次接触函数式编程的开发者来说,这是一个宝贵的资源。

    ostinato:在服务器(Scala)和浏览器(ScalaJS)上运行的象棋库

    《ostinato:跨越服务器与...无论你是经验丰富的Scala开发者还是初次接触这个领域,Ostinato都能帮助你快速构建出富有挑战性和趣味性的象棋应用,让你的用户在服务器和浏览器间自由切换,享受无处不在的棋局乐趣。

    scala-1.2

    总的来说,"scala-1.2"压缩包是一个宝贵的资源,无论是对初次接触Scala的初学者,还是对已经熟悉该语言并希望深入研究的开发者来说,都能从中受益。通过学习和实践,你可以掌握一种强大的工具,它能够帮助你构建高效...

    Farseek:适用于Minecraft Mod的Scala API

    《Farseek:Minecraft Mod开发的Scala API详解》 在Minecraft的广阔世界中,模组(Mod)是让游戏体验无限...无论你是经验丰富的Minecraft Mod开发者,还是初次接触这个领域的新人,Farseek都是一个值得尝试的选择。

    intellij开发Spark配置说明

    然而,对于初次接触Spark及其集成开发环境(IDE)的开发者来说,正确地配置开发环境可能会遇到一些挑战。本文旨在为初学者提供一个详尽的指南,帮助其在IntelliJ IDEA上顺利搭建Spark开发环境。 #### 二、常见问题...

    sbt学习资料

    SBT,全称为Scala Build Tool,是用于Scala项目构建的工具,由Haskell语言编写,设计目的是为了简化Java和Scala应用程序的构建过程。...无论是初次接触还是进阶提升,掌握SBT都是Scala开发者不可或缺的技能之一。

    sbt-0.13.16.tgz

    【标题】"sbt-0.13.16.tgz"是一个压缩包,其中包含了Scala构建工具Sbt(Scala Build Tool)的0.13....对于初次接触Sbt的开发者,理解其核心概念和工作流程是关键,同时熟悉命令行操作和依赖管理将极大地提高开发效率。

    wss-agent-api-client-2.0.0.zip

    对于初次接触qiitascala的开发者,建议从示例代码和已有的测试用例入手,快速熟悉其使用方式。 总的来说,qiitascala是一个优秀的开源项目,它为Scala开发者提供了一种高效、简洁的方式来与Qiita API交互。通过深入...

    spark-gradle-template:使用gradle在IDE中使用Apache Spark

    Apache Spark 是一个强大的分布式计算框架,它以高效、易用和通用性著称。Spark 提供了多种编程接口,包括 Scala、Java、...对于初次接触 Spark 或者希望改进现有构建流程的开发者来说,这是一个非常有价值的资源。

    spaghetti-core-2.0-rc7.zip

    《斯帕奇奥核心2.0 RC7:深入解析JSON差异与补丁库》 在IT行业中,数据的处理和比较是一项重要的任务,特别是在版本...无论你是初次接触还是资深开发者,掌握diffson都将极大地提升你在处理JSON数据时的效率和质量。

    gatling 3.1.2

    这简化了测试场景的创建,特别是对于初次接触性能测试的用户。 8. **扩展性**: 由于其基于Scala,Gatling可以通过编写自定义的检查、馈送和协议来扩展其功能,以满足特定测试需求。 9. **版本3.1.2的改进**: ...

    type-classes-from-the-ground-up:幻灯片以Typeclass进行演讲,以CSV作为运行示例

    这种结合视觉和听觉的学习方式有助于加深对复杂概念的理解,特别是对于那些初次接触Typeclass的开发者来说。 【标签】"scala"表明这个主题与Scala编程语言紧密相关。Scala是一种多范式语言,融合了面向对象和函数式...

    ideaIU-2020.3.4.dmg试用包

    IntelliJ IDEA是一款由JetBrains公司开发的著名集成开发环境(IDE),专为Java开发者设计,同时也支持其他多种编程语言...如果你是初次接触IntelliJ IDEA,建议先了解其基本操作和设置,以便更好地利用这个强大的工具。

    iTunes Music Library Export-开源

    5. README.txt:通常包含项目的基本介绍、安装和使用指南,是初次接触项目时的重要参考文档。 总的来说,iTunes Music Library Export是一个强大的工具,通过开源的方式,不仅解决了iTunes音乐库数据迁移的问题,也...

    camel-manual-1.5.0.pdf

    对于初次接触Apache Camel的开发者来说,官方文档提供了详细的入门指南,帮助快速上手。首先,安装和配置好所需的环境,然后按照官方文档中的示例进行实践操作,熟悉Apache Camel的基本用法。此外,还可以参考相关的...

Global site tag (gtag.js) - Google Analytics