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. vue实现数据遍历、多个倒计时列表

    移动端效果图: 1.HTML显示代码: <template> <div class="activeList"> <div class="li ...

  2. 后端——框架——容器框架——spring_core——《官网》阅读笔记——初篇

    1.知识体系 spring-core的知识点大概分为以下几个部分 IOC容器 Bean的配置,XML方式和注解方式 Bean的管理,bean的生命周期,bean的作用域等等 与Bean相关联的接口和对 ...

  3. LA 3708 墓地雕塑(模拟)

    题目链接:https://vjudge.net/problem/UVALive-3708 这道题的思路也是比较难想. 首先根据上一题(Uva 11300)可知,要想让移动距离最短,那么至少要使一个雕塑 ...

  4. python requests.request 和session.request区别究竟在哪里

    import requests hd={"X-auth":"eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJzeXN0ZW0iLCJBUEkiOiIvdW ...

  5. 解决:hudson.plugins.git.GitException: Could not init

    解决:

  6. css 属性值 calc (目前只了解部分)

    移动端页面,有如下图的需求: 实现效果: 实现 css 代码: .list {/*父级*/ border: 1px solid #E9EAEA; border-radius: 2px; backgro ...

  7. Vue入门学习总结一:Vue定义

    Vue的功能是为视图提供响应的数据绑定及视图组件,Vue是数据驱动式的,不直接修改DOM而是直接操作数据实现对界面进行修改. 首先我们需要在script中定义一个Vue实例,定义方法如下: var v ...

  8. 让一个div层于窗口中间位置

    这几天写的前端代码比较多,为了体验更好,有时会让div弹层位于窗口中间,在百度找到这样一个答案: <style type="text/css"> #box{ posti ...

  9. C:变量的声明与定义

    声明变量不需要建立存储空间,如:extern int a; 定义变量需要建立存储空间,如:int b; #include <stdio.h> int main() { //extern 关 ...

  10. 吴裕雄--天生自然TensorFlow2教程:损失函数及其梯度

    import tensorflow as tf x = tf.random.normal([2, 4]) w = tf.random.normal([4, 3]) b = tf.zeros([3]) ...