Scala学习 -- 基础语法
一、变量
1、三种变量修饰符
val 定义 immutable variable(不修改 常量)
var 定义 immutable variable(可修改 变量)
lazy val (惰性赋值的常量):不直接算出结果,在系统第一次调用 lazy val 的时候计算结果
scala> val d = 12 d: Int = 12scala> val e = 20 e: Int = 20scala> lazy val f = d * e f: Int = <lazy>scala> f*12 res41: Int = 2880scala> f res42: Int = 240
* 可以不显示指定变量的类型,因为Scala会自动进行类别指导
scala> val y:Int = 20 y: Int = 20scala> val x = "asd" x: String = asd
2、函数与代码块
代码块(Block)
代码块用于组织多个表达式,代码块自身也是个表达式,求得的值是最后一个表达式的值。
代码块有两种写法:
1、表达式都写在一行,表达式之间分号分割
{exp1; exp2}
2、表达式分行,表达式末尾不需要分毫
{exp1exp2 }
函数
def functionName(param: paramType):returnType = {// function body: expressions }
示例代码如下:
object Hello {def helloDemo(name: String) = {s"Hello,${ name }"}def add(x:Int, y:Int): Int = {x+y}def main(arg: Array[String]) = {println(helloDemo("Yu Hang"))println(s"X + Y Result is ${add(12,34)}")} }
3、if、for表达式
在Scala里面,if和for并不是语句,而是一个表达式。 语句是可以单独执行的、能够产生实际效果的代码;而表达式则是包含在语句中,根据某种条件计算出一个值或得出某种结果,然后由语句去判断和处理的代码。
(1)if表达式
if(logical_exp) valA else valB
scala> if(true) 1 else 2 res44: Int = 1scala> if(false) 3 else 4 res45: Int = 4scala> val a = 1 a: Int = 1scala> if(a == 1) a res46: AnyVal = 1scala> if(a!= 1) a res47: AnyVal = ()scala> if(a!=1) "not one" else a res48: Any = 1scala> if(a!=1) "not one" res49: Any = ()
if(a!=1) a 的时候返回值是(), 因为“a!=1”是false,且 if 表达式没有 else,所以返回值为 空,Scala里面空是 Unit,所以if表达式的返回值就是Unit的文字量,就是一个空括号
(2)for comprehension
println("正常的for遍历:") for( s <- l) { // generatorprintln(s) } println("\n带有 filter 的for遍历:") for( s <- l // generatorif(s.length>4) // filter ) {println(s) } println("\n带有 filter 的for遍历:") val result_for = for{s <- l // generators1 = s.toUpperCase() // variable bindingif(s1 != "") } yield (s1) // generator new collection for( item <- result_for ) println(item)
for 循环中的 yield 会把当前的元素记下来,保存在集合中,循环结束后将返回该集合。Scala 中 for 循环是有返回值的。如果被循环的是 Map,返回的就是 Map,被循环的是 List,返回的就是 List,以此类推。
4、try与match表达式
(1)try表达式
try {} catch {} finally {}
示例代码:
try {Integer.parseInt("dog") } catch {case _ => 0 } finally {println("always be printed") }
case _ => 0, "_"是通配符,无论try中是什么异常都会被catch到,并返回0。finally 是try{} catch{}之后执行的,无论表达式是否异常,都会执行finally。
(2)match与switch较为相似
exp match {case p1 => val1case p2 => val2...case _ => valn }
其中的 "case _" 就相当于switch中的 default。
val code = 3val result_match = code match {case 1 => println("one")case 2 => println("two")case 3 => println("three")case _ => println("other") }
5、求值策略
Scala中有两种求值策略(Evaluation Strategy)
1、 Call By Value - 对传入参数先进行求值,只一次求值
2、Call By Name - 函数实参每次在函数体内被调用到时都会进行求值
Scala 通常使用的时 Call By Value
如果函数形参类型以 “=>” 开头,则会使用 Call By Name
def foo( asd: Int) // Call By Value def foo( asd: => Int) // Call By Name
举个例子:下面定义了test1、test2. test1是Call By Value; text2是Call By Name.
def text1(x: Int, y: Int): Int = x*xdef text2(x: => Int, y: => Int): Int = x*x
例 1 :
test1(3+4, 8) test1(7, 8) //test1 是Call By Value,首先会先算出参数 7*7 49test2(3+4, 8) (3+4)*(3+4) // test2是 Call By Name, 直接把3+4传入test2,表达式替换x变量 7*(3+4) 7*7 49
例 2 :
test1(7, 2*4)test1(7, 8) //test1 是Call By Value,首先会先算出参数 2*4,再对x、y进行赋值 7*7 49test2(7, 2*4) // test2是 Call By Name, 直接把2*4传入test2,表达式替换y变量 7*7 // 2*4 没用到,所以一直不需要进行计算 49
转载于:https://www.cnblogs.com/Lyh1997/p/11185229.html
Scala学习 -- 基础语法相关推荐
- Scala的基础语法(超详细版)
Scala的基础语法 文章目录 Scala的基础语法 1.声明值和变量 2.数据类型 3.算术和操作符重载 4.控制结构语句 4.1条件分支语句 4.2循环语句 5.方法与函数 5.1方法 5.2 函 ...
- 【Java】从头开始学习-基础语法
目录 一.语言概述 (一)整体语言概述 (二)Java语言概述 1. 基础常识 2. 计算机语言的发展迭代史 3. Java语言应用的领域: 4. Java语言的特点 (三)开发环境搭建 1. JDK ...
- Markdown语法学习-基础语法
前言 本人是一名普通二本的在读大一学生,准备在机械.编程.嵌入式开发等这一些方面深耕.现在也在准备经营属于自己的博客.因为是新手小白,没有什么基础,所以在前期会发一些比较基础的内容,在网上都是可以随便 ...
- 老王的JAVA基础课:第4课 以hello world学习基础语法
前言 为了这节课的学习,我们花了3篇的内容来介绍计算机基础和JAVA环境安装,现在我们来真正开始编写JAVA第一行代码! java初体验 我们以最古老的方式来体验一把java从编写到执行的过程. 在D ...
- Java学习基础语法
Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java 变量类型 Java 修饰符 Java 运算符 Java 循环结构 Java 分支结构 Java Num ...
- tcl脚本学习-基础语法
本文参考公众号 数字IC与硬件设计的两居室 文章目录 tcl介绍 语法学习 tcl介绍 复杂文本处理 Tcl可以把文本中的每一行变为一个列表,最简单的列表就是包含由任意个空格.制表符.换行符分隔开的任 ...
- VBA 开发学习--基础语法
MsgBox "开始学习VBA" '提示框Dim str As String '声明str变量是string类型 Let str = "一起来看流星雨" '给变 ...
- mysql学习(基础语法)
sql分类 DDL(data definition language)数据库定义语言 创建表视图的时候用到的一些sql,比如说:CREATE.ALTER.DROP等.DDL主要是用在定义或修改数据库. ...
- python学习基础语法_Python学习笔记之基本语法
函数导入的三种方式from math import sqrt #import the sqrt function only e.g. sqrt(25) from math import * ...
最新文章
- CloudHub概述
- 阿里云数据库专家白宸:Redis带你尽享丝滑!(图灵访谈)
- Kali Linux 2017中Scapy运行bug解决
- java 反编译 手游_Java反编译器(DJ Java Decompiler)
- flex java 开发环境搭建_Ubuntu Linux下Flex 4开发环境的搭建
- Linux权限和进程管理、网络配置、任务调度(四)
- 百度Create2021:百度地图日均位置服务请求次数突破1300亿
- Boost:是否支持sse2指令的测试程序
- PHP 设计模式之迭代器模式
- 【渝粤教育】广东开放大学 系统工程 形成性考核 (25)
- python-三层神经网络的分类回归问题
- apache commons collections CollectionUtils工具类简单使用
- ccf会议等级划分_Python计算山东新高考选考科目卷面原始成绩为等级成绩
- 明解C语言 初级篇1~8章
- -3dB带宽定义和理解
- 树莓派+L9110S电机模块
- 裁员潮下,你需要这 10 大神器
- 6-2 车的不同行为 (10 分)
- 服务器更换主板后无法启动网络
- 纠正你读错的电脑英文词汇--(2)
热门文章
- mysql 书签查找_my-bookmark
- 设置图片格式为php,php 将bmp图片转为jpg等其他任意格式的图片
- php long2ip,php ip2long和long2ip函数实现
- 字节跳动技术整理:mysql性能优化方案
- 今年最新整理的《高频Java面试题集合》,聪明人已经收藏了!
- Oracle-SQL语法基础【以一个完整项目为例】
- Android移动开发之【Android实战项目】在Service中弹出Dialog对话框,即全局性对话框
- 稀疏矩阵的三元组表与十字链表存储
- 查看python安装路径
- Unable to instantiate Action,