Notas de estudio de Scala (1): artículos básicos

Uno, construcción ambiental

Para la construcción del entorno Scala , consulte Construcción del entorno Scala + Instalación del complemento IDEA y creación del proyecto


2. Características

2.1, tipo estático

Scala no permite cambiar los tipos de variables después de la declaración, y los tipos de todas las variables y expresiones se determinan por completo en el momento de la compilación.


2.2, tipo fuerte

Scala generalmente no necesita mostrar el tipo especificado al declarar una variable, el compilador inferirá automáticamente el tipo .

No hay una conversión de tipo obligatoria en Scala, pero hay tres formas de reemplazarla:

  • Nombre de objeto.asInstanceOf [XXX]
  • Nombre de objeto.toXXX método
  • Conversión implícita (palabra clave implícita)

2.3, programación de múltiples paradigmas

  • Funciones orientadas a objetos
  1. Todos los valores en Scala son objetos
  2. Utilice objetos complementarios para simular objetos de clase y elimine la palabra clave estática (las propiedades estáticas y los métodos modificados por estático en Java no son objetos puros)
  3. No hay interfaz, en lugar de clases y rasgos; uso de rasgos para lograr una herencia múltiple mixta
  • Programación funcional

    Todas las funciones son valores, por lo que puede usar funciones como parámetros y valores de retorno


Tres, tipo de datos

Inserte la descripción de la imagen aquí
1. Tipo de valor (AnyVal)
(1) Almacene el valor directamente y almacene su valor en la pila
(2) Consistente con los ocho tipos básicos de Java (Byte, Short, Int, Long, Float, Double, Char, Boolean)
2. Tipo de referencia (AnyRef)
(1) Almacene la referencia a su valor, almacene la dirección en la pila y almacene el valor en el montón
(2) Lista, Opción, etc., la clase se ha personalizado
3. Literal: La forma de escribir valores constantes directamente en el código: 0, 0L, etc .; Símbolo literal: '<identificador>', correspondiente a scala.Symbol tipo
4. Tipos especiales:
(1) Nulo: todas las subclases de tipos de referencia, solo hay un objeto de instancia nulo y nulo es la palabra clave
(2) Nada: Lista () devuelve Lista [Nada]
(3) Unidad: solo un objeto de instancia " () ", un marcador de posición inútil, similar al vacío de Java. Todas las expresiones tienen un valor


Cuatro, gramática básica

4.1, constantes y variables

Variables: se pueden cambiar después de la asignación y se pueden asignar varias veces durante el ciclo de vida

var 变量名称:类型 = xxx

Constante: no se puede cambiar después de la asignación, similar a las variables finales en Java

val 常量名称:类型 = xxx

4.2, palabras clave

Inserte la descripción de la imagen aquí


4.3. Notas

object HelloWorld {
    
    
   /* 这是一个 Scala 程序
    * 多行注释
    */
   def main(args: Array[String]) {
    
    
      // 单行注释
      // 输出 Hello World
      println("Hello, world!") 
   }
}

4.4, salto de línea

Scala es un lenguaje orientado a líneas.Las sentencias pueden terminar con un punto y coma (;) o un carácter de nueva línea. Si solo hay una declaración en una línea, el punto y coma es opcional; si escribe varias declaraciones en una línea, necesita un punto y coma

val s = "换行"; println(s)

Paquete de 4.5 、

Scala usa la palabra clave package para definir paquetes. Hay dos formas de definir el código en un paquete en Scala:

El primer método es el mismo que el de Java. El nombre del paquete se define en el encabezado del archivo. Este método coloca todos los códigos posteriores en el paquete

package scalatest
class HelloWorld

El segundo método, puede definir varios paquetes en un archivo

package scalatest {
    
    
  class HelloWorld 
}

4.6, paquete de referencia

Scala usa la palabra clave import para hacer referencia a paquetes

import java.awt.Color  // 引入Color
 
import java.awt._  // 引入包内所有成员
 
def handler(evt: event.ActionEvent) {
    
     // java.awt.event.ActionEvent
  ...  // 因为引入了java.awt,所以可以省去前面的部分
}

La declaración de importación puede aparecer en cualquier lugar, no solo en la parte superior del archivo. El efecto de la importación se extiende desde el principio hasta el final del bloque de instrucciones. Esto puede reducir en gran medida la posibilidad de conflictos de nombres.

Si desea introducir varios miembros en el paquete, puede usar selector (selector)

import java.awt.{
    
    Color, Font}
 
// 重命名成员
import java.util.{
    
    HashMap => JavaHashMap}
 
// 隐藏成员
import java.util.{
    
    HashMap => _, _} // 引入了util包的所有成员,但是HashMap被隐藏了

4.7, interpolación de cuerdas

  1. s interpolación de cadenas, use $ para hacer referencia a variables y expresiones
object Test {
    
    
  def main(args: Array[String]): Unit = {
    
    
    var name = "Kyrie Irving"
    println(s"my name is $name")
    println(s"1+1=${1+1}")
  }
}

resultado
Inserte la descripción de la imagen aquí

  1. f interpolación de cadenas, utilizada para formatear la salida
object Test {
    
    
  def main(args: Array[String]): Unit = {
    
    
    val name = "Kyrie"
    val score = 57d
    println(f"$name%s got $score%.1f points")
  }
}

resultado
Inserte la descripción de la imagen aquí

  1. Interpolación cruda, efectos de control de protección, como caracteres de escape.
object Test {
    
    
  def main(args: Array[String]): Unit = {
    
    
    println(s"a\nb")
    println("----------")
    println(raw"a\nb")
  }
}

resultado
Inserte la descripción de la imagen aquí


4.8. Control de condición

  1. si 和 si ... si no ...
	val x = 10
    if(x==10)println("x等于10")
    println("------------")
    if(x>10){
    
    
      println("x大于10")
    }else{
    
    
      println("x小于等于10")
    }

4.9, control de ciclo

  1. mientras que bucle
object Test {
    
    
  def main(args: Array[String]): Unit = {
    
    
    var a = 10
    while(a>=8){
    
    
      println(a)
      a = a-1
    }
  }
}
  1. hacer ... mientras bucle
object Test {
    
    
  def main(args: Array[String]): Unit = {
    
    
    var a = 10
    do{
    
    
      println(a)
      a = a + 1
    }while(a<=13)
  }
}
  1. en bucle

Las condiciones del ciclo hasta y hasta ambos representan el intervalo, el hasta antes del paquete y el después del paquete, el hasta antes del paquete y el después del paquete no están incluidos.

object Test {
    
    
  def main(args: Array[String]): Unit = {
    
    
    for(a <- 1 to 3){
    
    
      print(a+"\t")
    }
    for(a <- 1 until 3){
    
    
      print(a+"\t")
    }
  }
}
  1. para múltiples bucles: tabla de multiplicar de nueve a nueve
def main(args: Array[String]): Unit = {
    
    
    for(i <- 1 to 9;j <- 1 to i){
    
    
      print(s"$j*$i=${i*j}\t")
      if(i==j)println()
    }
  }

Inserte la descripción de la imagen aquí

  1. para filtrado de bucle
def main(args: Array[String]): Unit = {
    
    
    for(i <- 1 to 10;if i%2==0;if i<9){
    
    
      print(i+"\t")
    }
  }

Inserte la descripción de la imagen aquí

  1. Interrupción de bucle
    No hay una declaración de interrupción en el lenguaje Scala de forma predeterminada, y debe importar el paquete
    import scala.util.control.Breaks._

La fuente sigue al
Inserte la descripción de la imagen aquí
caso

import scala.util.control.Breaks._
    for(elem <- 1 to 4){
    
    
      print(6)
      if(elem%3==0){
    
    
        break()
      }
    }
  1. Valor de retorno del bucle
    El rendimiento en el bucle for registrará el elemento actual y lo guardará en la colección, que se devolverá a la colección una vez que finalice el bucle. Para derivación
def main(args: Array[String]): Unit = {
    
    
    var ret = for(i <- 1 to 10;if i%2==0;if i<9) yield i;
    for(j <- ret){
    
    
      print(j+"\t")
    }
  }

Inserte la descripción de la imagen aquí


4.10, expresión de bloque

(1) Una expresión de bloque también es un resultado, la estructura de la última línea en {} es el resultado de la expresión de bloque
(2) Si la última línea es una declaración de asignación, es unidad ()

def main(args: Array[String]): Unit = {
    
    
    val myblock = {
    
    
      var x = 2
      var y = 3
      x+y
    }
    println(myblock)
  }

Inserte la descripción de la imagen aquí

val myblock = {
    
    
      var x = 2
      var y = 3
      x = x+y
    }
    println(myblock)

Inserte la descripción de la imagen aquí


Cinco, matrices, tuplas, colecciones

5.1, matriz

  • Almacenar elementos de tamaño fijo
  • El índice de matriz comienza desde 0
  • Uso genérico corchetes []
  • El acceso a la matriz usa paréntesis ()
    Inserte la descripción de la imagen aquí

5.2, tupla

  • Puede contener diferentes tipos de elementos
  • Admite hasta 22 elementos (Tuple1 ~ Tuple22)
  • Excepto Tuple1, se pueden crear otros directamente con ()
  • Utilice el guión bajo "_" para acceder al elemento, "_1" significa el primer elemento
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí


5.3. Colección

Inserte la descripción de la imagen aquí

1. Clasificación

  • Seq: Secuencia, los elementos están ordenados (Lista)
  • Set: set, los elementos no se repiten
  • Map: Map, una colección de pares clave-valor

Todas las colecciones se heredan de Traversable, puede usar las funciones que contiene

2. Variable / inmutable

  • Colección
    inmutable scala.collection. immutable, La colección inmutable está seleccionada en scala por defecto
    Inserte la descripción de la imagen aquí
    Inserte la descripción de la imagen aquí


  • Scala.collection de colección variable . mutable, Puede modificar, agregar o eliminar elementos de una colección
    Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_48482704/article/details/111885214
Recomendado
Clasificación