zoukankan      html  css  js  c++  java
  • Scala 基础语法(一)

    Scala基础

    1、声明变量

    package cn.gec.scala


    object VariableDemo {

      def main(args: Array[String]) {
        //使用val定义的变量值是不可变的,相当于java里用final修饰的变量
       
    val i = 1

        //使用var定义的变量是可变得,在Scala中鼓励使用val
       
    var s = "hello"
       
    //Scala编译器会自动推断变量的类型,必要的时候可以指定类型
        //变量名在前,类型在后
       
    val str: String = "gec"
     
    }

    }
     

    2、常用类型

    Scala和Java一样,有7种数值类型Byte、Char、Short、Int、Long、Float和Double(无包装类型)和一个Boolean类型

    3、条件表达式

    Scala的的条件表达式比较简洁,例如:

    package cn.gec.scala

    /**
      * Created by ZX on 2015/11/7.
      */
    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
       
    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、块表达式

    package cn.gec.scala

    /**
      * Created by ZX on 2015/11/7.
      */
    object BlockExpressionDemo {

      def main(args: Array[String]) {
        val x = 0
        //在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值
        //下面就是一个块表达式
       
    val result = {

          if (x < 0){
            -1
          } else if(x >= 1) {
            1
          } else {
            "error"
         
    }

        }
        //result的值就是块表达式的结果
       
    println(result)

      }
    }
     

    5、循环

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

    for循环语法结构:for (i <- 表达式/数组/集合)
    package cn.gec.scala

    /**
      * Created by ZX on 2015/11/7.
      */
    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)

      }

    }
     

    6、调用方法和函数

    Scala中的+ - * / %等操作符的作用与Java一样,位操作符 & | ^ >> <<也一样。只是有

    一点特别的:这些操作符实际上是方法。例如:

    a + b

    是如下方法调用的简写:

    a.+(b)

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

    7、定义方法和函数

    7.1、定义方法

     

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

    7.2、定义函数

     

    7.3、方法和函数的区别

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

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

     

    package cn.gec.scala

    /**
      * Created by ZX on 2015/11/11.
      */
    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)
      }
    }
     

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

     

  • 相关阅读:
    Flask快速入门(14) — 请求上下文2
    Flask快速入门(13) — 请求上下文1
    24 python异常机制
    11 python socket网络编程
    21 python调用外部系统命令
    10 python从键盘获取输入、刷新缓冲区
    18 python文件、目录操作
    17 python内置特殊方法
    15 python之ORM sqlalchemy模块使用
    14 python类的继承
  • 原文地址:https://www.cnblogs.com/Transkai/p/10922899.html
Copyright © 2011-2022 走看看