Scala笔记(1)

最近已经把Java最基本的语法学会,实际上,学过python后还是很好理解Java语言。因为Scala和Java有一定联系,Scala编程基于Java,所以接下来可以先了解一下Scala。


笔记

学习网站:Scala教程|易百教程

作者:初生不惑

https://www.yiibai.com/scala/scala_overview.html#article-start


Scala是一种现代化的多范式编程语言,旨在以简洁,优雅和类型安全的方式表达常见的编程模式。

文章目录

  • 1 Scala概述
  • 2 Scala基础语法
    • 2.1 基本语法和编码约定
    • 2.2 Scala关键字
  • 3 Scala数据类型
  • 4 Scala变量
    • 4.1 变量声明
    • 4.2 可变数据类型
    • 4.3 可变类型推断
    • 4.4 多个赋值
  • 5 Scala访问修辞符
    • 5.1 私有成员
    • 5.2 受保护的会员
    • 5.3 公有成员
    • 5.6 保护作用域
  • 6 Scala运算符
  • 7 Scala循环语句

1 Scala概述

  • Scala是一种纯粹的面向对象语言,每一个值都是一个对象。
  • Scala是函数式编程语言,每个函数都是一个值,每个值都是一个对象,所以每个函数都是一个对象。
  • Scala是静态类型的,在大多数情况下,不需要指定类型。
  • Scala运行在JVM上
  • Scala可以执行Java代码
  • Scala可以做并发和同步处理

Scala具有与Java完全不同的一组功能,其中的一些如下 -

  • 所有类型都是对象类型
  • 推断
  • 嵌套函数
  • 函数是对象
  • 域特定语言(DSL)支持
  • 性状
  • 闭包

Idea 无法安装Scala,下载插件手动配置

2 Scala基础语法

Scala和Java之间最大的句法差异在于行结束字符的分号( ; ) 是可选的。

Scala与Java一样的内容将直接跳过

  • 对象
  • 方法
  • 字段 : 每个对象都有其唯一的一组实例变量,称为字段。对象的状态是由分配给这些字段的值来创建的。
  • 闭包 :闭包是一个函数,其返回值取决于在此函数之外声明的一个或多个变量的值。
  • 特征: 特征(Traits)封装了方法和字段定义,然后可以通过将它们混合到类中来重用它们,特征(Traits)用于通过指定支持的方法的签名来定义对象类型。

第一个Scala

object HelloWorld {
     
   /* This is my first java program.  
   * This will print 'Hello World' as the output
   */
   def main(args: Array[String]) {
     
      println("Hello, world!") // prints Hello World
   }
}

2.1 基本语法和编码约定

  • Scala是区分大小写的,比如标识符Hello和hello在Scala中表示不同的含义(对象)。
  • 类名称 - 对于所有类名,第一个字母应为大写。示例 class MyFirstScalaClassclass Employee*类等。
  • 方法名称 - 所有方法名称应以小写字母开头。示例 def myMethodName()def getName()等。
  • 程序文件名 - 程序文件的名称应与对象名称完全匹配。示例 - 假设HelloWorld是对象名称。 那么文件应该保存为HelloWorld.scala。
  • def main(args:Array [String]) - Scala程序从main()方法开始,这是每个Scala程序的强制性部分。

2.2 Scala关键字

Scala笔记(1)_第1张图片

3 Scala数据类型

Scala与Java具有相同的数据类型,具有相同的内存占用和精度。
Scala笔记(1)_第2张图片
所有数据类型都是对象

4 Scala变量

4.1 变量声明

可变变量

var myVar : String = "Foo"

不可变变量

val myVal : String = "Foo"

4.2 可变数据类型

变量的类型在变量名称和等号之前指定。可以通过其数据类型来定义任何类型的Scala变量,如下所示:

val or val VariableName : DataType = [Initial Value]

如果您没有为变量分配任何初始值,则有效的语法如下:

var myVar :Int;
val myVal :String;

4.3 可变类型推断

当为变量分配初始值时,Scala编译器可以根据分配给它的值来推断变量的类型。这被称为变量类型推断。 因此,可以编写这样的变量声明

var myVar = 10;
val myVal = "Hello, Scala!";

默认情况下,myVar将会被计算推断为Int类型,myVal将计算推断为String类型变量。

4.4 多个赋值

val (myVar1: Int, myVar2: String) = Pair(40, "Foo")

类型推断得到正确的类型 -

val (myVar1, myVar2) = Pair(40, "Foo")

object Demo {
     
   def main(args: Array[String]) {
     
      var myVar :Int = 10;
      val myVal :String = "Hello Scala with datatype declaration.";
      var myVar1 = 20;
      val myVal1 = "Hello Scala new without datatype declaration.";
      println(myVar); 
      println(myVal); 
      println(myVar1); 
      println(myVal1);
   }
}

5 Scala访问修辞符

如果不使用私有(private)和受保护(protected)访问修饰符进行标注,那么访问将被视为公开(public)的。这些修饰符限制了对某些代码区域的成员访问

5.1 私有成员

私有(private)成员只能在包含成员定义的类或对象内部可见。

class Outer {
     
   class Inner {
     
      private def f() {
      println("f") }

      class InnerMost {
     
         f() // OK
      }
   }
   (new Inner).f() // Error: f is not accessible
}

5.2 受保护的会员

受保护(protected)成员只能从定义成员的类的子类访问。

package p {
     
   class Super {
     
      protected def f() {
      println("f") }
   }
   //Sub类是Super的子类 
   class Sub extends Super {
      
      f()
   }
	//Other类不会从Super类继承
   class Other {
     
      (new Super).f() // Error: f is not accessible
   }
}

5.3 公有成员

不同于私有和受保护的成员,不需要为公有成员使用Public关键字指定。没有明确使用修饰符则自动归为公共成员。 这些成员可以从任何地方访问。

class Outer {
     
   class Inner {
     
      def f() {
      println("f") }

      class InnerMost {
     
         f() // OK
      }
   }
   (new Inner).f() // OK because now f() is public
}

5.6 保护作用域

Scala中的访问修饰符可以通过限定符进行扩充。

形式为private [X]protected [X]的修饰符表示为访问是私有或受保护的“最多”到X,其中X指定一些封闭的包,类或单例对象。

package society {
     
   package professional {
     
      class Executive {
     
         private[professional] var workDetails = null
         private[society] var friends = null
         private[this] var secrets = null

         def help(another : Executive) {
     
            println(another.workDetails)
            println(another.secrets) //ERROR
         }
      }
   }
}

注意 - 以下几点来自上面的例子总结 -

  • 变量:workDetails在封闭包professional中的任何类中可访问。
  • 封闭包:friends的任何类都可以被society包中任何类访问。
  • 变量:secrets只能在实例方法的隐式对象(this)中访问。

6 Scala运算符

与java一样

7 Scala循环语句

你可能感兴趣的:(Scala)