Scala练习笔记

JAVA中,举例你S是一个字符串,那么s(i)就是该字符串的第i个字符(s.charAt(i)).Scala中使用apply的方法

JAVA与C++的?:操作符 等同于Scala的

if ( x > 0)  1 else -1

x>0 ? 1: -1 //JAVA或C++

在Scala中,每个表达式都有一个类型,如下:

if ( x > 0) "positive" else -1

其中一个分支是java.lang.String 而另一个分支是Int,他们的公共超类型是Any

使用如下会报错:

if(x > 0) 1 else if( x == 0) 0 else -1

改为

if(x > 0){ 1 }else if (x== 0) 0 else -1

高级for 循环  可以使用变量<- 表达式 的形式提供多个生成器,用分号将其隔开

如果for循环的循环体以yield开始,则循环会构造出一个结合,每次迭代生成集合中的一值:

每个生成器都自带一个守卫,以if开头的Boolean表达式

可以任意多的定义,引入可以在循环中使用变量

定义函数:Scala一般不需要声明返回值类型,会自己推断,但使用递归的时候 必须指定返回类型:

默认参数和带名参数(什么鬼,Java的思想被颠覆)

过程,Scala对于不返回值的函数有特殊的表示语法,如果函数体包含在花括号中但没有前面的=号,那么返回类型就是Unit

或def box(s : String) : Unit = { ...} 显示声明Unit返回类型

数组:

声明一个空的数组缓冲,用+=在尾端添加元素,用()而不是用{} 移除用trimEnd

也可在任意位置插入或移除元素 其中remove方法第二个参数为要删除多少个

遍历数组 使用的是until ,它属于RichInt类的方法,返回所有小于(但不包括)上限的数字。

常用算法

使用sum方法,元素类型必须是数值类型,要么是整型,要么是浮点型或者integer,decimal

sorted方法将数组或数组缓冲排序并返回经过排序的数组或数组缓冲

val b = ArrayBuffer(1, 7, 2, 9)
val bSorted = b.sorted(_ < _)

如果要显示数组或数组缓冲的内容,可以用mkString方法,它允许你指定元素之间的分隔符。toString返回的值就无意义了

使用List 使用:: 把一个新元素组合到已有List的最前端,然后返回结果List

使用元组Tuple:

与列表一样,元组也是不可变的,但与列表不同,元组可以包含不同类型的元素。而列表应该是List[Int]或List[String]的样子,元组可以同时拥有Int和String。元组很有用,比方说,如果你需要在方法里返回多个对象。Java里你将经常创建一个JavaBean样子的类去装多个返回值,Scala里你可以简单地返回一个元组。而且这么做的确简单:实例化一个装有一些对象的新元组,只要把这些对象放在括号里,并用逗号分隔即可。一旦你已经实例化了一个元组,你可以用点号,下划线和一个基于1的元素索引访问它.

使用Set和Map

创建,初始化和使用可变集合

Map是Scala里另一种有用的集合类。和集一样,Scala采用了类继承机制提供了可变的和不可变的两种版本的Map,,Map的类继承机制看上去和Set的很像。scala.collection包里面有一个基础Map特质和两个子特质Map:可变的Map在scala.collection.mutable里,不可变的在scala.collection.immutable里。

函数式风格:

import scala.collection.mutable.Map

更函数式的方式应该是定义对需打印的arg进行格式化的方法,但是仅返回格式化之后的字串

时间: 2024-10-10 05:09:53

Scala练习笔记的相关文章

Scala学习笔记及与Java不同之处总结-从Java开发者角度

Scala与Java具有很多相似之处,但又有很多不同.这里主要从一个Java开发者的角度,总结在使用Scala的过程中所面临的一些思维转变. 这里仅仅是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.以下列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码演示样例及具体阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接. 语句能够不用";"结束.且推荐不适用";". 变量声明时以var或va

原创:Scala学习笔记(不断更新)

Scala是一种函数式语言和面向对象语言结合的新语言,本笔记中就零散记下学习scala的一些心得,主要侧重函数式编程方面. 1. 以递归为核心控制结构. 实现循环处理的方式有三种:goto,for/while,递归,其中用goto实现循环已经在现代语言中被放弃,而for/while形式的结构化编程成为主流,而递归作为另一种方案,则长期只流行在函数式编程的小圈子中. 递归被主流编程界所担心的主要是过深的调用栈,甚至以前的课堂上我们还亲自尝试过将递归改写为循环,但是现代函数式编程语言中,通过尾递归(

Scala学习笔记及与Java不同之处总结-从Java开发人员角度

Scala与Java具有许多相似之处,但又有许多不同.这里主要从一个Java开发人员的角度,总结在使用Scala的过程中所面临的一些思维转变.这里只是总结了部分两种语言在开发过程中的不同,以后会陆续更新一些切换后在开发过程中值得注意的地方.下面列举了部分,但令人印象深刻的Scala语言的不同之处,具体的代码示例及详细阐述见下文. ? Scala中可直接调用Java代码,与Java无缝连接: 语句可以不用";"结束,且推荐不适用";": 变量声明时以var或val开头

Scala学习笔记(二)

笔记的整理主要针对Scala对比Java的新特性:   1.if表达式 if表达式是有结果返回的. val a= if (5>2) "你好" else 1 a的值为if表达式返回值为 "你好"   2.while表达式 while表达式是没有返回值的(返回值为 Unit),在scala中避免使用,通常都需要与var结合使用   3.for表达式 枚举集合遍历 val a = Array(1,2,3,4,5,6) for (i <- a) println(

Scala学习笔记一之基础语法,条件控制,循环控制,函数,数组,集合

前言:Scala的安装教程:http://www.cnblogs.com/biehongli/p/8065679.html 1:Scala之基础语法学习笔记: 1:声明val变量:可以使用val来声明变量,用来存放表达式的计算结果,但是常量声明后是无法改变它的值的,建议使用val来声明常量: 声明var变量:如果要声明可以改变的引用,可以使用var变量,声明的常量的值可以改变. 3:指定类型:无论声明val变量还是声明var变量.都可以手动指定其类型,如果不指定,scala会自动根据值,进行类型

Scala学习笔记(一)编程基础

强烈推荐参考该课程:http://www.runoob.com/scala/scala-tutorial.html 1.   Scala概述 1.1.  什么是Scala Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性.Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序. 1.2.  为什么要学Scala 1.优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验. 2.速度快:Scala

Scala学习笔记——内建控制结构

Scala的内建控制结构包括:if.while.for.try.match和函数调用 1.if表达式 //常见的写法 var filename = "name" if (!args.isEmpty) filename = args(0) //比较简洁的写法 var filename1 = if (!args.isEmpty) args(0) else "name" //更简洁的写法,不要有中间变量 println(if(!args.isEmpty) args(0)

scala学习笔记2

一.算术和操作符重载 a + b 是如下方法的简写: a.+(b) 在scala中你可以使用任何符号来为方法命名.比如BigInt类就定义了一个/%的方法,该方法返回一个对偶,对偶的内容是除法操作得到的商和余数. 通常来说,你可以用 a 方法 b 作为以下代码的简写 a.方法(b) 这里的方法是一个带有两个参数的方法(一个隐式的和一个显示的).例如1.to(10)可以简写成1 to 10 scala语言并没有提供++和--操作符,我们需要使用+=1和-=1 scala认为Int类是不可变的. 对

Scala学习笔记-环境搭建以及简单语法

关于环境的搭建,去官网下载JDK8和Scala的IDE就可以了,Scala的IDE是基于Eclipse的. 下面直接上代码: 这是项目目录: A是scala写的: package first import scala.collection.mutable.ListBuffer object A { def main(args: Array[String]) { print("Hello,Scala");//学习程序设计的第一句 println("---");//pr

scala学习笔记(7):函数

(1) 基本定义 scala> def max(x: Int, y: Int): Int = { if (x > y) x else y } 跟着是括号里带有冒号分隔的参数列表. 每个函数参数后面必须带前缀冒号的类型标注,因为Scala编译器(还有解释器,但之后我 们将只说编译器)没办法推断函数参数类型. 在max参数列表的括号之后你会看到另一个“: Int”类型标注.这个东 西定义了max函数的结果类型:result type.6跟在函数结果类型之后的是一个等号和一对 包含了函数体的大括号.