4.    Scala基础

4.1.   声明变量

package cn.itcast.scala
object VariableDemo {
  def main(args: Array[String]) {
    //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
   
val i = 1
    //使用var定义的变量是可变得,在Scala中鼓励使用val
   
var s = "hello"
   
//Scala编译器会自动推断变量的类型,必要的时候可以指定类型
    //变量名在前,类型在后
   
val str: String = "itcast"
 
}
}

4.2.   常用类型

Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float、Double类型和1个Boolean类型。

4.3.   条件表达式

Scala的条件表达式比较简洁,定义变量时加上if else判断条件。例如:

package cn.itcast.scala

object ConditionDemo {
  def main(args: Array[String]) {
    val x = 1
    //判断x的值,将结果赋给y
   
val y = if (x > 0) 1 else -1
    //打印y的值
    println
(y)     //支持混合类型表达式
   
val z = if (x > 1) 1 else "error"
   
//打印z的值
    println
(z)     //如果缺失else,相当于if (x > 2) 1 else ()
   
val m = if (x > 2) 1
    println(m)     //在scala中每个表达式都有值,scala中有个Unit类,用作不返回任何结果的方法的结果类型,相当于Java中的void,Unit只有一个实例值,写成()。
   
val n = if (x > 2) 1 else ()
    println(n)     //if和else if
   
val k = if (x < 0) 0
    else if (x >= 1) 1 else -1
    println(k)
  }
}
 

4.4.   块表达式

定义变量时用 {} 包含一系列表达式,其中块的最后一个表达式的值就是块的值。

package cn.itcast.scala

object BlockExpressionDemo {
  def main(args: Array[String]) {
    val a = 10
val b = 20
    //在scala中{}中包含一系列表达式,块中最后一个表达式的值就是块的值
    //下面就是一个块表达式
   
val result = {
val c=b-a
val d=b-c
d   //块中最后一个表达式的值
}
 //result的值就是块表达式的结果
  println
(result)
}
}
 

4.5.   循环

在scala中有for循环和while循环,用for循环比较多

for循环语法结构:for (i <- 表达式/数组/集合)
while循环语法结构:while (返回值类型是boolean)
 
package cn.itcast.scala
object ForDemo {
  def main(args: Array[String]) {
    //for(i <- 表达式),表达式1 to 10返回一个Range(区间)
    //每次循环将区间中的一个值赋给i
   
for (i <- 1 to 10)
      println(i)     //for(i <- 数组)
   
val arr = Array("a", "b", "c")
    for (i <- arr)
      println(i)     //高级for循环
    //每个生成器都可以带一个条件,注意:if前面没有分号
   
for(i <- 1 to 3; j <- 1 to 3 if i != j)
      print((10 * i + j) + " ")
    println()     //for推导式:如果for循环的循环体以yield开始,则该循环会构建出一个集合
    //每次迭代生成集合中的一个值
   
val v = for (i <- 1 to 10) yield i * 10
    println(v)   } }
 

4.6.   调用方法和函数

Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有一点特别的:这些操作符实际上是方法。例如:

a + b

是如下方法调用的简写:

a.+(b)

a 方法 b可以写成 a.方法(b)

4.7.  定义方法和函数

1.7.1.    定义方法

方法的返回值类型可以不写,编译器可以自动推断出来,但是对于递归函数,必须指定返回类型

1.7.2.    定义函数

1.7.3.    方法和函数的区别

在函数式编程语言中,函数是“头等公民”,它可以像任何其他数据类型一样被传递和操作,函数是一个对象,继承自FuctionN。

函数对象有apply、curried、toString、tupled这些方法。而方法不具有这些特性。

如果想把方法转换成一个函数,可以用方法名跟上下划线的方式。

 

案例:首先定义一个方法,再定义一个函数,然后将函数传递到方法里面

package cn.itcast.scala

object MethodAndFunctionDemo {
  //定义一个方法
  //方法m2参数要求是一个函数,函数的参数必须是两个Int类型
  //返回值类型也是Int类型
 
def m1(f: (Int, Int) => Int) : Int = {
    f(2, 6)
  }   //定义一个函数f1,参数是两个Int类型,返回值是一个Int类型
 
val f1 = (x: Int, y: Int) => x + y
  //再定义一个函数f2
 
val f2 = (m: Int, n: Int) => m * n   //main方法
 
def main(args: Array[String]) {     //调用m1方法,并传入f1函数
   
val r1 = m1(f1)
    println(r1)     //调用m1方法,并传入f2函数
   
val r2 = m1(f2)
    println(r2)
  }
}
 

1.7.4.    将方法转换成函数(神奇的下划线)

将方法转换成函数,只需要在方法的后面加上一个下划线

第1节 Scala基础语法:5、6、7、8、基础-申明变量和常用类型,表达式,循环,定义方法和函数的更多相关文章

  1. Python语言基础-语法特点、保留字与标识符、变量、基本数据类型、运算符、基本输入输出、Python2.X与Python3.X区别

    Python语言基础 1.Python语法特点 注释: 单行注释:# #注释单行注释分为两种情况,例:第一种#用于计算bim数值bim=weight/(height*height)第二种:bim=we ...

  2. Python环境安装与基础语法(1)——计算机基础知识

    Python安装 pip #包管理工具 pip install #安装包 pip list #查看包 IPython #增强的python shell,自动补全,自动缩进,支持shell,增加了很多函 ...

  3. Scala学习(一)——基础语法

    Scala语言是一种面向对象语言,结合了命令式(imperative)和函数式(functional)编程风格,其设计理念是创造一种更好地支持组件的语言. 特性 多范式(Multi-Paradigm) ...

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

    强烈推荐参考该课程:http://www.runoob.com/scala/scala-tutorial.html 1.   Scala概述 1.1.  什么是Scala Scala是一种多范式的编程 ...

  5. Razor基础语法

    原文:Razor基础语法 一.介绍      Razor是ASP.NET MVC视图引擎的代号,支持.cshtml和.vbhtml两种模板文件,符号@标记服务端代码的开始,比以前asp.net的< ...

  6. Gradle Groovy 基础语法 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  7. JSP学习(一)JSP基础语法

    JSP基础语法 1.JSP模版元素 JSP页面中的HTML内容称之为JSP模版元素. JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观. <%@ page language=&quo ...

  8. JavaSE入门学习6:Java基础语法之运算符和语句(上)

    继续接着上篇:JavaSE入门学习5:Java基础语法(一)来看Java的基础语法. 五运算符 运算符是一种"功能"符号,用以通知Java进行相关的运算.比方.我们须要将变量age ...

  9. 2.InfluxDB-InfluxQL基础语法教程--目录

    本文翻译自官网,官方文档地址:(https://docs.influxdata.com/influxdb/v1.7/query_language/data_exploration/) InfluxQL ...

随机推荐

  1. 方便的 IcoMoon 图标字体

    官网地址:https://icomoon.io/app/#/select 已发现的方便之处: 1.官网已提供大量常用图标字体: 2.可通过 svg 将其转换为 图标字体: 3.不仅可转换,还可自定义编 ...

  2. Vue-cli 多页相关配置记录

    Vue-cli 多页相关配置记录 搭建一个顺手的MPA项目脚手架,其实根据项目的不同目录结构和打包配置都可以进行灵活的调整.这次的项目可能是包含各种客户端和管理后台在一起的综合项目所以需要将样式和脚本 ...

  3. N个数求和(PTA)

    这题多输出了一个空格,卡了半天... leetcode刷多了,后遗症 这题可以用scanf("%lld/%lld"),直接读入,不过我用了stoll,也就是stoi,string ...

  4. [踩坑记录] runtime error: load of null pointer of type 'const int' (leetcode)

    leetcode上面做题遇到的错误 原因: 在调用函数时,如果返回值如果是一个常量则没问题.如果返回值若为指针则可能会出现该错误,假如返回的指针地址指向函数内的局部变量,在函数退出时,该变量的存储空间 ...

  5. Jmeter_请求原件之参数化CSV

    1.用途:注册10个账户 2.用CSV 制造数据相对比TEXT更方便 3.创建CSV 文件,注册账户和密码如下 4.Jmeter设置如下 因为是注册10个账户,要运行10次 5.线程组->添加- ...

  6. B站上线互动视频背后,是一场谁都输不起的未来之战

    毋庸置疑的是,视频网站的竞争已愈发激烈.而它们的竞争体现在多个维度,比如买视频会员赠送购物网站会员.依靠各自的社交体系不断尝试打破圈层瓶颈等.当然,最直接的竞争还是体现在内容层面.购买独家版权.制作原 ...

  7. SpringCloud全家桶学习之一阶段总结(一)

    一.概述 前几篇小博客记录了我学习SpringCloud组件的过程,并与工作中所用的Dubbo框架做了一点比较,基本组件:Eureka.Ribbon.Hystrix.Feign.Zuul.Config ...

  8. jquery-1.10.2_d88366fd.js和jquery-3.1.0.min.js 在用touch事件时候, event.changedTouches[0]报错的问题。

    1.animation动画:(注意如果这个动画是一开始就执行的,在pc端就要用px,在手机端用rem,如果在pc端展示页面,但用的是rem为单位,这时候动画一开始就执行,因为根字体大小还没准备好,动画 ...

  9. php概率

    /*  * 经典的概率算法,  * $proArr是一个预先设置的数组,  * 假设数组为:array(100,200,300,400),  * 开始是从1,1000 这个概率范围内筛选第一个数是否在 ...

  10. 「NOI2001」食物链

    传送门 Luogu 解题思路 带权并查集我不会啊 考虑种类并查集(扩展域并查集的一种). 开三倍空间,一倍维护本身,二倍维护猎物,三倍维护天敌,然后用并查集搞一搞就好了. 细节注意事项 咕咕咕 参考代 ...