scala的基础操作

目录

一、基础语法

二、数据类型

三、变量

四、运算符

五、IF。。ELSE。。

六、循环

七、方法与函数

八、字符串、数组、集合

九、类和对象

十、模式匹配

十一、文件IO


一、基础语法

  1. 对象、类、方法、字段(对象的属性)

  2. 脚本形式:scalac、scala

    1. object HelloWorld {
         /* 这是我的第一个 Scala 程序
          * 以下程序将输出'Hello World!' 
          */
         def main(args: Array[String]) {
            println("Hello, world!") // 输出 Hello World
         }
      }

       

  3. 区分大小写、类名首字母大写、方法名首字母小写、程序文件名同类名、程序入口:def main(args:Array[String])

  4. 注释同java

  5. 换行符,末尾可不加分号

  6. 定义包两种方式,建议和java一样

    1. //java
      package com.runoob
      class HelloWorld
      //c#
      package com.runoob {
        class HelloWorld 
      }

       

  7. 引用

    1. import java.awt.Color  // 引入Color
       
      import java.awt._  // 引入包内所有成员
       
      def handler(evt: event.ActionEvent) { // java.awt.event.ActionEvent
        ...  // 因为引入了java.awt,所以可以省去前面的部分
      }
      
      import java.awt.{Color, Font}  //选取器
       
      // 重命名成员
      import java.util.{HashMap => JavaHashMap}
       
      // 隐藏成员
      import java.util.{HashMap => _, _} // 引入了util包的所有成员,但是HashMap被隐藏了
      
      //默认情况下,Scala 总会引入 java.lang._ 、 scala._ 和 Predef._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。

       

 

二、数据类型

  1. 与JAVA相同(Int,Long,Float,Double,Char,String,Boolean,Unit)

    1. 列出的数据类型都是对象,也就是说scala没有java中的原生类型。在scala是可以对数字等基础类型调用方法的。

       

三、变量

  1. 变量var;常量val;变量类型声明:变量名之后等号之前

  2. 在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。

    所以,如果在没有指明数据类型的情况下声明变量或常量必须要给出其初始值,否则将会报错。

    1. var VariableName : DataType [=  Initial Value]
      
      或
      
      val VariableName : DataType [=  Initial Value]
      
      val xmax, ymax = 100  // xmax, ymax都声明为100
      val pa = (40,"Foo") //声明一个元组
      

       

四、运算符

  1. 算数运算符

  2. 关系运算符

  3. 逻辑运算符

  4. 位运算符

  5. 赋值运算符

五、IF。。ELSE。。

  1. if(布尔表达式)
    {
       // 如果布尔表达式为 true 则执行该语句块
    }
    
    //实例
    object Test {
       def main(args: Array[String]) {
          var x = 10;
    
          if( x < 20 ){
             println("x < 20");
          }
       }
    }
    
    //if...else
    if(布尔表达式){
       // 如果布尔表达式为 true 则执行该语句块
    }else{
       // 如果布尔表达式为 false 则执行该语句块
    }
    //if..else if..else
    if(布尔表达式 1){
       // 如果布尔表达式 1 为 true 则执行该语句块
    }else if(布尔表达式 2){
       // 如果布尔表达式 2 为 true 则执行该语句块
    }else if(布尔表达式 3){
       // 如果布尔表达式 3 为 true 则执行该语句块
    }else {
       // 如果以上条件都为 false 执行该语句块
    }
    //if..else嵌套
    if(布尔表达式 1){
       // 如果布尔表达式 1 为 true 则执行该语句块
       if(布尔表达式 2){
          // 如果布尔表达式 2 为 true 则执行该语句块
       }
    }

     

六、循环

  1. //while
    object Test {
       def main(args: Array[String]) {
          // 局部变量
          var a = 10;
    
          // while 循环执行
          while( a < 20 ){
             println( "Value of a: " + a );
             a = a + 1;
          }
       }
    }
    //do..while
    object Test {
       def main(args: Array[String]) {
          // 局部变量
          var a = 10;
    
          // do 循环
          do{
             println( "Value of a: " + a );
             a = a + 1;
          }while( a < 20 )
       }
    }
    //for
    for( var x <- Range ){
       statement(s);
    }
    //for循环过滤
    object Test {
       def main(args: Array[String]) {
          var a = 0;
          val numList = List(1,2,3,4,5,6,7,8,9,10);
    
          // for 循环
          for( a <- numList
               if a != 3; if a < 8 ){
             println( "Value of a: " + a );
          }
       }
    }
    //for使用yield
    var retVal = for{ var x <- List
         if condition1; if condition2...
    }yield x
    

     

  2. break语句

    1. // 导入以下包
      import scala.util.control._
      
      // 创建 Breaks 对象
      val loop = new Breaks;
      
      // 在 breakable 中循环
      loop.breakable{
          // 循环
          for(...){
             ....
             // 循环中断
             loop.break;
         }
      }

       

 

七、方法与函数

  1. 方法和函数的说明

    1. Scala 中的方法跟 Java 的类似,方法是组成类的一部分。

    2. Scala 中的函数则是一个完整的对象,Scala 中的函数其实就是继承了 Trait 的类的对象。

    3. Scala 中使用 val 语句可以定义函数,def 语句定义方法。

    4. Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量。换句话来说在类中定义的函数即是方法。

  2. 方法声明

    1. def functionName ([参数列表]) : [return type]

    2. 如果你不写等于号和方法主体,那么方法会被隐式声明为抽象(abstract),包含它的类型于是也是一个抽象类型。

  3. 方法定义

    1. def functionName ([参数列表]) : [return type] = {
         function body
         return [expr]
      }
      //example
      object add{
         def addInt( a:Int, b:Int ) : Int = {
            var sum:Int = 0
            sum = a + b
      
            return sum
         }
      }
      
      object Hello{
         def printMe( ) : Unit = {
            println("Hello, Scala!")
         }
      }

       

八、字符串、数组、集合

  1. 字符串用法跟java类似

  2. 数组(索引用小括号)

    1. var z:Array[String] = new Array[String](3)
      
      或
      
      var z = new Array[String](3)
      
      var z = Array("Runoob", "Baidu", "Google")
      
      //合并数组
      mport Array._
      
      object Test {
         def main(args: Array[String]) {
            var myList1 = Array(1.9, 2.9, 3.4, 3.5)
            var myList2 = Array(8.9, 7.9, 0.4, 1.5)
      
            var myList3 =  concat( myList1, myList2)
            
            // 输出所有数组元素
            for ( x <- myList3 ) {
               println( x )
            }
         }
      }
      //下表中为 Scala 语言中处理数组的重要方法,使用它前我们需要使用 import Array._ 引入包。

       

  3. 集合

    1. // 定义整型 List
      val x = List(1,2,3,4)
      
      // 定义 Set
      val x = Set(1,3,5,7)
      
      // 定义 Map
      val x = Map("one" -> 1, "two" -> 2, "three" -> 3)
      
      // 创建两个不同类型元素的元组
      val x = (10, "Runoob")
      
      // 定义 Option
      val x:Option[Int] = Some(5)

       

九、类和对象

  1. // 私有构造方法
    class Marker private(val color:String) {
    
      println("创建" + this)
      
      override def toString(): String = "颜色标记:"+ color   //重写一个非抽象方法需要overwrite,子类中重写超类的抽象方法时,你不需要使用override关键字。
      
    }
    
    // 伴生对象,与类共享名字,可以访问类的私有属性和方法
    object Marker{
      
        private val markers: Map[String, Marker] = Map(
          "red" -> new Marker("red"),
          "blue" -> new Marker("blue"),
          "green" -> new Marker("green")
        )
        
        def apply(color:String) = {
          if(markers.contains(color)) markers(color) else null
        }
      
        
        def getMarker(color:String) = { 
          if(markers.contains(color)) markers(color) else null
        }
        def main(args: Array[String]) { 
            println(Marker("red"))  
            // 单例函数调用,省略了.(点)符号  
            println(Marker getMarker "blue")  
        }
    }
    
    
    //继承
    import java.io._
    
    class Point(val xc: Int, val yc: Int) {
       var x: Int = xc
       var y: Int = yc
       def move(dx: Int, dy: Int) {
          x = x + dx
          y = y + dy
          println ("x 的坐标点 : " + x);
          println ("y 的坐标点 : " + y);
       }
    }
    
    class Location(override val xc: Int, override val yc: Int,
       val zc :Int) extends Point(xc, yc){
       var z: Int = zc
    
       def move(dx: Int, dy: Int, dz: Int) {
          x = x + dx
          y = y + dy
          z = z + dz
          println ("x 的坐标点 : " + x);
          println ("y 的坐标点 : " + y);
          println ("z 的坐标点 : " + z);
       }
    }
    
    object Test {
       def main(args: Array[String]) {
          val loc = new Location(10, 20, 15);
    
          // 移到一个新的位置
          loc.move(10, 10, 5);
       }
    }

     

十、模式匹配

  1. object Test {
       def main(args: Array[String]) {
           val alice = new Person("Alice", 25)
        val bob = new Person("Bob", 32)
           val charlie = new Person("Charlie", 32)
       //match相当于switch
        for (person <- List(alice, bob, charlie)) {
            person match {
                case Person("Alice", 25) => println("Hi Alice!")
                case Person("Bob", 32) => println("Hi Bob!")
                case Person(name, age) =>
                   println("Age: " + age + " year, name: " + name + "?")
             }
          }
       }
       // 样例类
       case class Person(name: String, age: Int)
    }

     

 

十一、文件IO

  1. //文件的写
    import java.io._
    
    object Test {
       def main(args: Array[String]) {
          val writer = new PrintWriter(new File("test.txt" ))
    
          writer.write("菜鸟教程")
          writer.close()
       }
    }
    //读取用户的写入
    import scala.io._
    object Test {
       def main(args: Array[String]) {
          print("请输入菜鸟教程官网 : " )
          val line = StdIn.readLine()
    
          println("谢谢,你输入的是: " + line)
       }
    }
    
    //从文件上读取内容
    import scala.io.Source
    
    object Test {
       def main(args: Array[String]) {
          println("文件内容为:" )
    
          Source.fromFile("test.txt" ).foreach{ 
             print 
          }
       }
    }

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值