一、变量

  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学习 -- 基础语法相关推荐

  1. Scala的基础语法(超详细版)

    Scala的基础语法 文章目录 Scala的基础语法 1.声明值和变量 2.数据类型 3.算术和操作符重载 4.控制结构语句 4.1条件分支语句 4.2循环语句 5.方法与函数 5.1方法 5.2 函 ...

  2. 【Java】从头开始学习-基础语法

    目录 一.语言概述 (一)整体语言概述 (二)Java语言概述 1. 基础常识 2. 计算机语言的发展迭代史 3. Java语言应用的领域: 4. Java语言的特点 (三)开发环境搭建 1. JDK ...

  3. Markdown语法学习-基础语法

    前言 本人是一名普通二本的在读大一学生,准备在机械.编程.嵌入式开发等这一些方面深耕.现在也在准备经营属于自己的博客.因为是新手小白,没有什么基础,所以在前期会发一些比较基础的内容,在网上都是可以随便 ...

  4. 老王的JAVA基础课:第4课 以hello world学习基础语法

    前言 为了这节课的学习,我们花了3篇的内容来介绍计算机基础和JAVA环境安装,现在我们来真正开始编写JAVA第一行代码! java初体验 我们以最古老的方式来体验一把java从编写到执行的过程. 在D ...

  5. Java学习基础语法

    Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java 变量类型 Java 修饰符 Java 运算符 Java 循环结构 Java 分支结构 Java Num ...

  6. tcl脚本学习-基础语法

    本文参考公众号 数字IC与硬件设计的两居室 文章目录 tcl介绍 语法学习 tcl介绍 复杂文本处理 Tcl可以把文本中的每一行变为一个列表,最简单的列表就是包含由任意个空格.制表符.换行符分隔开的任 ...

  7. VBA 开发学习--基础语法

    MsgBox "开始学习VBA" '提示框Dim str As String '声明str变量是string类型 Let str = "一起来看流星雨" '给变 ...

  8. mysql学习(基础语法)

    sql分类 DDL(data definition language)数据库定义语言 创建表视图的时候用到的一些sql,比如说:CREATE.ALTER.DROP等.DDL主要是用在定义或修改数据库. ...

  9. python学习基础语法_Python学习笔记之基本语法

    函数导入的三种方式from math import sqrt   #import the sqrt function only e.g. sqrt(25) from math import *     ...

最新文章

  1. CloudHub概述
  2. 阿里云数据库专家白宸:Redis带你尽享丝滑!(图灵访谈)
  3. Kali Linux 2017中Scapy运行bug解决
  4. java 反编译 手游_Java反编译器(DJ Java Decompiler)
  5. flex java 开发环境搭建_Ubuntu Linux下Flex 4开发环境的搭建
  6. Linux权限和进程管理、网络配置、任务调度(四)
  7. 百度Create2021:百度地图日均位置服务请求次数突破1300亿
  8. Boost:是否支持sse2指令的测试程序
  9. PHP 设计模式之迭代器模式
  10. 【渝粤教育】广东开放大学 系统工程 形成性考核 (25)
  11. python-三层神经网络的分类回归问题
  12. apache commons collections CollectionUtils工具类简单使用
  13. ccf会议等级划分_Python计算山东新高考选考科目卷面原始成绩为等级成绩
  14. 明解C语言 初级篇1~8章
  15. -3dB带宽定义和理解
  16. 树莓派+L9110S电机模块
  17. 裁员潮下,你需要这 10 大神器
  18. 6-2 车的不同行为 (10 分)
  19. 服务器更换主板后无法启动网络
  20. 纠正你读错的电脑英文词汇--(2)

热门文章

  1. mysql 书签查找_my-bookmark
  2. 设置图片格式为php,php 将bmp图片转为jpg等其他任意格式的图片
  3. php long2ip,php ip2long和long2ip函数实现
  4. 字节跳动技术整理:mysql性能优化方案
  5. 今年最新整理的《高频Java面试题集合》,聪明人已经收藏了!
  6. Oracle-SQL语法基础【以一个完整项目为例】
  7. Android移动开发之【Android实战项目】在Service中弹出Dialog对话框,即全局性对话框
  8. 稀疏矩阵的三元组表与十字链表存储
  9. 查看python安装路径
  10. Unable to instantiate Action,