zoukankan      html  css  js  c++  java
  • 【Scala】01 基础了解

    Features 特性

    1、基于JVM,完全兼容Java

    2、同样具有跨平台,可移植,垃圾回收

    3、比Java更加的面向对象【完全面向对象】

    4、函数式编程

    5、面向大数据处理,对集合容器框架有一定的增强

    6、是Spark的底层

    History 发展历史

    Pizza & Scala

    JDK1.5 的泛型、增强FOR、自动类型转换

    JDK8.0 类型推断、Lambda表达式

    Download 下载

    官网下载地址:

    https://www.scala-lang.org/download/

    现在是分了3和2两种大版本,我看的教程都是讲2的

    所以这里找到是2版本:

    点进去之后拉到最下面才是安装包的下载地址(总是放在一些你看不到的位置):

    Installation 安装

    MSI安装版直接无脑下一步就行, 我这里下的是解压版,还需要自己手动配置环境变量

    然后在Path变量里面追加一个:

    %SCALA_HOME%in

    保存关闭之后,在Win + R打开cmd,输入命令scala。

    如果开启了SHELL模式,这样就行了

    C:UsersAdministrator>scala
    Welcome to Scala 2.13.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_291).
    Type in expressions for evaluation. Or try :help.
    
    scala>

    With IntelliJ IDEA 与IDEA的配置:

    首先IDEA需要安装支持Scala的一个插件工具

    搜索插件市场可以直接找到,下载安装

    然后在创建项目的时候,对项目名称右键添加框架,选择Scala框架:

    首次安装需要让IDEA知道SDK在哪,SDK就是我们下载的Scala包,这里要提供给IDEA路径位置

    如果没有,IDEA也提供下载来实现

    Scala独有的程序单元:

    编写一个Hello.scala(选择Object创建)

    object Hello {
      def main(args : Array[String]) : Unit = {
        println("Hello Scala")
      }
    }

    Scala支持原生Java语法

    object Hello {
      def main(args : Array[String]) : Unit = {
        println("Hello Scala")
        System.out.println("Hello Scala By Origin Java Syntax")
      }
    }

    笔记:

    /**
     * 关键字 object 声明一个单例对象 通过一个HelloScala的派生类创建的实例
     * main 从外部可以直接调用的方法
     * def 方法名称(参数名称: 参数类型):返回类型 = {方法体}
     *
     */
    object HelloScala {
      def main(args: Array[String]): Unit = {
        println("hello scala")
      }
    }

    反引号修饰变量名:

        /**
         * 或者是使用反引号处理
         * 这样定义允许声明任意字符
         */
        val `hero-name` = "asdas"
        // 调用的时候也需要加上反引号
        println(`hero-name`)

    操作符声明:

        /**
         * 可以支持以操作符的变量声明
         * 但是操作符不可以和数字字符结合声明
         */
        val -+%#@ = "asadas"

    支持模版语法和格式化组合处理:

        /**
         * 支持模版语法和格式化输出同时结合使用
         */
        val π = 3.14
        print(f"the π is ${π}%2.4f")

    打印结果:

    the π is 3.1400

    Syntax Of Scala Scala语法

    声明变量

    Java语法:

    int val = 100;

    Scala语法:

    var val:Int = 100

    变量和常量:

    Java:

    int a = 100; // 变量
    final int b = 200; // 常量

    Scala:

    var a:Int = 120 \ 变量
    val b:Int = 130 \ 常量

    注意是【var】和【val】

    自动类型推导:

    类似JavaScript,声明只需要知道常量变量和字面值是什么即可

    var num = 100

    常量和引用问题:

    object Hello {
      def main(args : Array[String]) : Unit = {
        val p = new P
        // p = null // × 常量p不能改变引用
        p.name = "others value" // √ p指向的对象的其他属性允许改变
      }
    }
    
    class P {
      var name : String = "none"
    }

    多行字符串的处理:

    object Hello {
      def main(args : Array[String]) : Unit = {
        var sql =
          """
            | SELECT
            |   A.columnName1,
            |   A.columnName2,
            |   B.columnName3
            | FROM
            |   tableName1 A
            |   JOIN tableName2 ON A.columnName1 = B.columnName2
            |     AND associateCondition1
            |     AND associateCondition1
            | WHERE
            |   1 = 1
            |   AND condition 1
            |   AND condition 2
            |""".stripMargin
      }
    }

    支持模板语法:

    注意前面要加一个s

    object Hello {
      def main(args : Array[String]) : Unit = {
    
        val name = "小明"
        val age = 29
    
        var sql = 
          s"""
            | SELECT
            |   A.columnName1,
            |   A.columnName2,
            |   B.columnName3
            | FROM
            |   tableName1 A
            |   JOIN tableName2 ON A.columnName1 = B.columnName2
            |     AND associateCondition1
            |     AND associateCondition1
            | WHERE
            |   1 = 1
            |   AND condition 1
            |   AND condition 2
            |   AND name = "$name"
            |   AND age = "$age"
            |""".stripMargin
      }
    }

    数据类型:

    Scala脱离C的影子,完全由对象支配

    scala.Any 等同于 java.lang.Object,是所有数据类型的基类

    子类划分为AnyVal(任意字面值)和 AnyRef(任意引用)

    特殊类型:

    Unit:

    表示无值,和其他语言中 void 等同。用作不返回任何结果的方法的结果
    类型。Unit 只有一个实例值,写成()。
     
    print(Unit)
    编写打印Unit,语法层面编译器不会报错,但是构建的时候报错
    `Unit` companion object is not allowed in source; instead, use `()` for the unit value
        print(Unit)

    按照提示的意思,更换成空括号就能打印这个空实例了

    print(())

    Null:

    null , Null 类型只有一个实例值 null

    Nothing:

    Nothing 类型在 Scala 的类层级最低端;它是任何其他类型的子类型。
    当一个函数,我们确定没有正常的返回值,可以用 Nothing 来指定返回类
    型,这样有一个好处,就是我们可以把返回的值(异常)赋给其它的函数
    或者变量(兼容性)

    2、一些不同

    public 修饰符 scala中没有public关键字,如果不声明访问权限,那么就是公共的

    static 修饰符 scala中没有静态语法,所以不存在static关键字

    void 类型,Java中表示空,没有返回值,在scala中改用Unit来表示

    方法声明需要在方法前缀def

    方法的实现赋值给方法声明,所以需要等号连接

    Scala是Full Complete OOP,全面向对象语言,没有静态语法

    如果要调用静态语法,使用【半对象单例】来调用

    读写文件操作

        // 读取操作
        // 调用scala.io.Source类的fromFile方法 ,入参文件路径
        val bufferedSource = Source.fromFile("C:/Users/Administrator/Desktop/SqlTemplate.sql")
        // 逐行遍历打印内容
        bufferedSource.foreach(print)
    
        // 写入文件操作
        val writer = new PrintWriter(new File("C:/Users/Administrator/Desktop/ScalaWriteTest.sql"));
        writer.write("testing for scala write files")
        writer.close()

    数据类型强转:

    val aaa : Int = 2.5.toInt

    三元运算操作:

    val res = if(a) "res1" else "res2" 

    范围遍历:

        // 范围遍历
        for(i <- 1 to 100) {
          println(1)
        }
  • 相关阅读:
    Android如何实现超级棒的沉浸式体验
    这次聊聊Promise对象
    svn add文件名包含@符号的解决方案
    证明3|n(n+1)(2n+1)
    Xcode迁移工程常见问题
    Multiple build commands for output file
    python中descriptor的应用
    xcode快捷键
    Cycript
    令assignment操作符返回一个reference to *this
  • 原文地址:https://www.cnblogs.com/mindzone/p/14968338.html
Copyright © 2011-2022 走看看