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. 前端开发CSS清除浮动的方法有哪些?

    在前端开发过程中,非IE浏览器下,当容器的高度自动,并且容器内容中有浮动元素(float为left或right),此时如果容器的高度不能自适应内容的高度,从而使得内容溢出破坏整体布局,这种现象叫做浮动 ...

  2. Python中的bool类型

    Python 布尔类型 bool python 中布尔值使用常量True 和 False来表示:注意大小写 比较运算符< > == 等返回的类型就是bool类型:布尔类型通常在 if 和 ...

  3. 吴裕雄 python 人工智能——基于Mask_RCNN目标检测(3)

    import os import sys import random import math import re import time import numpy as np import cv2 i ...

  4. TensorFlow使用RNN实现手写数字识别

    学习,笔记,有时间会加注释以及函数之间的逻辑关系. # https://www.cnblogs.com/felixwang2/p/9190664.html # https://www.cnblogs. ...

  5. 将.NET Core Web Api发布到Linux(CentOS 7 64)

    将.NET Core(2.1) Web Api发布到Linux(CentOS 7 64) 近来在学习linux相关的一些东西,然后正巧想试一下把core的应用程序发布到Linux,毕竟跨平台.尝试一下 ...

  6. mysql练习(增删改查)char、int使用

    (4)char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节:而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode ...

  7. 「BZOJ4548」小奇的糖果

    传送门 memset0好评 解题思路 比较恶心的一道数据结构题 看一眼题面,马上想到离散化. 然后将一维排序,另一维用树状数组或者线段树维护. 然后就没思路了 发现一个性质: 不包含所有的颜色,当然要 ...

  8. linux克隆多台虚拟机后网络无法识别更无法连接上网的解决方法

    本人近期学习LINUX,想克隆多台CENTOS来练习在LINUX下安装软件,配置环境.因为对系统不是很熟悉,就想保持一个纯净版本,如果系统玩坏了就删除再重新克隆一个继续配置,以节省时间.后来发现,克隆 ...

  9. 27 JavaScript的引入&注释&弹窗&变量常量&数据类型及转换&内存&垃圾回收

    JS的引入: 1 内部引入 绑定元素事件如onclick="" 绑定锚点如href="JavaScript:void(0)" script标签引入,注意:如果标 ...

  10. Java 1.8 红黑树

    红黑树 R-B Tree R-B Tree,全称 Red-Black Tree 又称为 红黑树,它是一种特殊的二叉查找树,红黑树的每个节点都有存储位表示节点的颜色,可以是红Red 或者 黑Black ...