`
chenjingbo
  • 浏览: 456067 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

scala学习1- 一些概念

 
阅读更多

下载和安装

linux简单一些,可以直接 yum install scala就好了 ,windows的话,可以到下载的链接 http://www.scala-lang.org/download/  我下载的是scala-2.11.6 。对应是一个 msi文件(速度有点小慢啊)。下载完以后直接安装,安装完成以后,对应的bin目录会自动添加到path路径下。 然后就可以直接在命令行进入 REPL了

 

REPL 写道

 

C:\Users\zhenghui>scala
Welcome to Scala version 2.11.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_1
1).
Type in expressions to have them evaluated.
Type :help for more information.

scala>

 

在REPL上写表达式

直接看对应的输入输出,比java有意思一些。基本能说明问题了

 

写道

 

scala> 8 * 5
res0: Int = 40

scala> res0* 0.5
res1: Double = 20.0

scala> "str"+res1
res2: String = str20.0

scala> res2.to
toCharArray toLowerCase toString toUpperCase

scala> res2.toUpperCase
res3: String = STR20.0

 REPL就是一个简单的scala的解释器,当然他的真实动作是输入的内容会被快速编译成字节码,然后通过字节码在jvm虚拟机上运行。这是一个 read-evalution-print-loop的过程,简称 REPL。

 

声明值和变量

scala中变量声明可以有两种方式,一种是 val 关键词,这个有点类似java中的 final ,表示常量,声明完了以后就不能再修改,还有一种是变量,通过var 来修饰,具体看下面的例子

 

写道

 

scala> val a = 1 + 2 * 10
a: Int = 21

scala> a = a * 10
<console>:8: error: reassignment to val
a = a * 10
^

scala> var b = 1 + 2 * 10
b: Int = 21

scala> b = b * 10
b: Int = 210

 在scala中,尽量使用 val,这样对jvm的效率优化有好处。

另外,可以看出来,scala似乎不太关心变量的类型。或者说,scala变量的类型是解释器自己推断的。当然,你也可以自己指定对应的类型,当然,你要慢慢习惯这种类型放变量之后的方式。。。

 

写道

 

scala> val str : String = "my name is bill"
str: String = my name is bill

 

基本类型 

sacla中的基本类型和java是一样的,也是8个,但是scala没有包装类型,或者说两者之间的转换已经自动帮我们做掉了。比如

写道
scala> 121212.toString
res6: String = 121212

scala> 1.to(10)
res7: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8,
9, 10)

 

 

操作符

操作符里有下面几个需要注意

1 在scala中, a.方法(b)  可以简写成 a 方法 b 。比如

写道
scala> 1.to(10)
res4: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8,
9, 10)

scala> 1 to 10
res5: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8,
9, 10)

2 scala中,没有 ++ 运算符。。如果需要++ ,那么只能通过 num = num +1来实现

 

写道
scala> var num = 10
num: Int = 10

scala> num = num++
<console>:8: error: value ++ is not a member of Int
num = num++
^

scala> num = num + 1
num: Int = 11

 3 不在参数的方法,可以省略对应的().

写道
scala> "abbccddedf".length
res11: Int = 10

scala> "abbccddedf".length()
res12: Int = 10

 apply方法

scala可以支持函数的()重载,这个在java当中是没有的,所以比较稀奇。他的实现原理是,自动调用对应类的apply方法,比如 “helloworld”(4) 表示的是 获取“helloworld”这个字符串的第4个字符(以0为第一个),实际上是调用了 "helloworld".apply(4) 

scala> "helloworld"(4)
res13: Char = o

scala> "helloworld".apply(4)
res14: Char = o

 

 条件表达式

scala中的条件表达式和java一样。不过在scala中,条件表达式是有值的,这个值就是if或者else后面的那个值。

scala> val x = 1
x: Int = 1

scala> if(x>0) 1 else 0
res1: Int = 1

scala> val y = if(x>0) 1 else 0
y: Int = 1

 

循环

while语句和java一样

 

 

scala> var count = 5;
count: Int = 5

scala> while(count >= 0){ println(count);count=count-1}
5
4
3
2
1
0

 注意while循环中有多个语句的时候,记得用分号括起来,否则scala会只执行 println语句。

 

for循环与java不太一样,不过有点类似java的增强型的for循环,但是也不是完全一样。

 

scala> for(i <- 1 to 5) println(i)
1
2
3
4
5
scala> for(i <- 1 until 5) println(i)
1
2
3
4

 to 和until 的区别,已经很明显了。

 

函数

scala中的函数类似java中的静态方法。

scala> def abs(num :Double) = if(num > 0) num else -num
abs: (num: Double)Double

scala> abs(0)
res5: Double = -0.0

scala> abs(10)
res6: Double = 10.0

 过程

如果方法没有返回值,那么就叫这个是过程。之前的hello world程序中的main方法就是过程,其实没有返回值也可以认为返回值是Unit,但是非常不建议这样写。具体如下

scala> def bar(name : String) {println("hello,"+name)}
bar: (name: String)Unit

scala> bar("bill")
hello,bill

scala> def _bar(name : String):Unit = {println("hello,"+name)}
_bar: (name: String)Unit

scala> _bar("bill")
hello,bill

第二种方式非常不建议写 

 

方法的默认参数

在java中并没有这个功能。很有趣啊。具体的例子如下

scala> def foo(str :String,left : String = "[",right:String = "]") = left + str
+ right
foo: (str: String, left: String, right: String)String

scala> foo("bar")
res0: String = [bar]

scala> foo("bar","<")
res1: String = <bar]

scala> foo("bar","<",">")
res2: String = <bar>

scala> foo("bar",right=">")
res3: String = [bar>

 基本上可以把这个功能说明清楚了。

 

可变参数

可变参数在java中也有,在java中,可变参数是在类型上加点点来实现的,在scala中是加星号。

scala> def sum(num :Int*)= {var count =0;for(i <- num) count += i; count}
sum: (num: Int*)Int

scala> sum(1,2,3,4,5)
res6: Int = 15

 

 

 

 

分享到:
评论

相关推荐

    基于Scala的spark-study学习项目设计源码

    本项目是基于Scala的spark-study学习项目设计源码,包含27个文件,...项目旨在为学习Spark提供一个实践平台,通过Scala编程语言和Spark框架,实现数据处理、机器学习等功能,帮助开发者掌握Spark的核心概念和编程技巧。

    Spark 编程基础(Scala 版)-机房上机实验指南

    本书从Spark的基本概念开始,逐步深入到Scala在Spark中的应用,以及如何利用Spark进行大规模数据处理。全书内容涵盖了以下几个主要部分: Spark简介:介绍Spark的起源、核心概念、架构以及与其他大数据处理框架(如...

    Scala函数式编程

    《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。 从OOP到FP,思路的转化 ...

    program in scala 2ed

    头几章将告诉你一些基础知识,你已经可以开始使用Scala的足够简单的任务。 全书的组织,使每一个新的概念上的概念,来建立之前 - 一系列步骤,有望帮助您掌握Scala语言以及有关节目,体现了Scala的重要思想。

    scalatest-handson-introduction

    但是,最后,我们意识到每个人都在说:Scala学习曲线有点困难,不是因为语法,而是因为它使用的范式:功能曲线。 在阅读了很多内容并在论坛上询问答案(并使用它进行几年编程)后,您对该语言已经有点习惯了。 但是...

    scala-sampler

    Scala 学习 资源/概念 SBT: : Scala:Dean Wampler/Alex Payne,Scala 编程,第 2 版,O'Reilly,2014 笔记 集成开发环境 Scala IDE 4.0 RC1 在 ScalaTest 使用 Scala IDE 4.0 RC1 确保安装了 ScalaTest ...

    Scala函数式编程.pdf

    函数式编程(FP)是一种...《Scala函数式编程》是针对希望学习FP并将它应用于日常编码中的程序员而写的,内容包括:函数式编程的概念;函数式编程相关的各种“为什么”和“怎么做”;如何编写多核程序;练习和检测。

    scala-exercises:学习Scala的简单方法

    通过简单的代码示例学习概念。 解决方案:每个练习都是必须成功通过的单元测试-通过填写空白来完成练习。 实时验证您的答案后,即可收到即时反馈。 分享:成功完成所有练习后,系统将认为类别完整。 在进入下一个...

    LearningSpark:学习使用Spark的Scala示例

    该项目包含Scala代码片段,用于说明各种Apache Spark概念。 它旨在通过提供一个不涉及Unix,集群配置,从源代码构建或安装Hadoop超级简单的入口,帮助您开始学习Apache Spark(作为Scala程序员)。 在使用了这些...

    Functional-Programming-Using-Scala:使用 Scala 的函数式编程原则示例。 这些示例有助于理解和学习这些概念

    函数式编程使用 Scala

    Scala in Depth

    本书由Scala之父作序推荐,深入探讨了Scala里几个较为复杂的领域,包括类型系统的高阶内容、隐式转换、特质的组合技巧、集合、Actor、函数式编程的范畴论等,而且不是干巴巴地讲述语言和库的概念。本书示例丰富,是...

    scala-launchpad:Scala Launchpad代码和教程

    一旦熟悉了Scala中的一些高级概念,您就会发现进入Haskell的旅程变得容易得多。 ###在正确的操作系统上进行设置带着运行sbt和计算机,准备好参加研讨会。 对于Sbt,我建议使用 。 下载shell脚本并检查是否可以...

    scala从入门到精通技术教学视频

    1,知识体系完备,从小白到大神各阶段读者均能学有所获。 2,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,每一块知识点, 都有配套案例, 学习不再迷茫。 课程简介 ...

    cbt:CBT-用Scala编写的有趣,快速,直观,结构化,静态检查的版本

    易于学习和掌握,闪电般快速,并由繁荣的爱好者和贡献者社区提供支持。 有关演讲,开发路线图,使用cbt的项目等,请参见Wiki。 什么是CBT? CBT是一种构建工具,意味着它可以帮助协调项目的编译,代码和文档生成,...

    testscalaanormplay2.txt

    对于学习 Scala 的 Java™ 开发人员来说,对象是一个比较自然、简单的入口点。在 本系列 前几期文章中,我介绍了 Scala 中一些面向对象的编程方法,这些方法实际上与 Java 编程的区别不是很大。我还向您展示了 Scala...

    讲座:学习Scala中的函数式编程

    该讲习班首先介绍了和函数式编程,然后继续介绍了更高级的概念,例如类型类和如何处理副作用。 由于所有讲座幻灯片均基于您必须使用箭头键进行导航。 而且您必须在两个维度上进行导航。 各章按列组织,幻灯片按行...

    Spark-Core学习知识笔记整理

    Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark...

    akka-money-transfer:使用Akka + Scala + Kafka + Microservices的React性银行帐户(P2P转移)

    通过模拟一个银行帐户,用户可以通过P2P交易转移资金,学习并付诸实践,例如参与者模型,CQRS和异步微服务等一些概念。 架构和技术细节 实验技术 阿卡 Scala 卡夫卡 服务沟通 主要目的是每个微服务交换的所有写...

    学习:用于深度学习,机器学习,强化学习,Spark,统计,算法,Scala,Python的演练笔记本

    学习 涵盖我所学或教过的概念的笔记本集合 ...

Global site tag (gtag.js) - Google Analytics