Declarar las variables
definición de las variables de Java
un int de un = 0 ;
En Scala puede ser usado para definir la variable var o val, sintaxis es la siguiente:
Val / var identificadores de variables : tipo de variable = valor inicial
entre
- val variables de -definida no pueden ser re-asignado
- var las variables -definida pueden ser re-asignado
- El tipo de variable nombre de la variable Scala definidos por escrito en el reverso
- Scala última afirmación no es necesario añadir un punto y coma
La definición de una variable
Ejemplo: Definir una variable para contener el nombre "Tom" de una persona
Código de referencia
scala> val name:String = "tom"
name: String = tom
val y las variables var
Ejemplos
Para volver a asignar el nombre de la variable es Jim, observar sus resultados operativos
Código de referencia
scala> name = "Jim"
<console>:12: error: reassignment to val
name = "Jim"
Ejemplos
Uso var redefinir la variable para contener el nombre "Tom", y el intento de re-asignado a Jim, observar sus resultados operativos
Código de referencia
scala> var name:String = "tom"
name: String = tom
scala> name = "Jim"
name: String = Jim
Definir el tipo de variable inferencia
sintaxis concisa Scala de Java, se puede utilizar de una manera más concisa para definir las variables.
Ejemplos
Utilice la sintaxis más concisa para definir una variable que contiene el nombre de una persona "tom"
Código de referencia
scala> val name = "tom"
name: String = tom
Scala puede inferir automáticamente el tipo automáticamente en función del valor de la variable de la variable, por lo que la codificación más compacta.
asignación inerte
En la gran empresa de desarrollo de datos, a veces escribir sentencias SQL muy complejas, las sentencias SQL pueden tener cientos o incluso miles de líneas de la línea. La sentencia SQL se carga directamente en la JVM, habrá una gran cantidad de sobrecarga de memoria. ¿Cómo resolver?
Cuando hay un gran número de variables de datos guardados, pero no es necesario que cargados de forma inmediata en la memoria JVM. Se puede utilizar la asignación inerte para mejorar la eficiencia.
sintaxis:
perezoso Val nombre de variable = expresión
Código de referencia
scala> lazy val sql = """insert overwrite table adm.itcast_adm_personas
| select
| a.user_id,
....
| left join gdm.itcast_gdm_user_buy_category c on a.user_id=c.user_id
| left join gdm.itcast_gdm_user_visit d on a.user_id=d.user_id;"""
sql: String = <lazy>
cadena
Scala-definido de cadena ofrece una variedad de maneras, en el futuro podemos elegir la manera más conveniente para definir como se requiere.
- Utilizar comillas dobles
- expresión de interpolación
- Si se emplean comillas triples
Utilizar comillas dobles
gramática
Val / var nombre de variable = "cadena"
Código de referencia
val name="hadoop6"
scala> println(name + name.length)
hadoop6
expresión de interpolación
expresión de interpolación puede evitar una gran cantidad de concatenación de cadenas.
gramática
Val / var nombre de variable = S "$ {Variable / expresión} cadena"
S se añade antes de la definición de la cadena
En la cadena, $ {} puede ser usado para referirse a una variable o una expresión escrita
Ejemplos
Una pluralidad de variables se almacenan: "zhangsan", 30, "macho", la definición de una cadena de caracteres, la información se guarda.
Impresión: name = zhangsan, edad = 30, el sexo masculino =
Código de referencia
scala> val name = "zhangsan"
name: String = zhangsan
scala> val age = 30
age: Int = 30
scala> val sex = "male"
sex: String = male
scala> val info = s"name=${name}, age=${age}, sex=${sex}"
info: String = name=zhangsan, age=30, sex=male
scala> println(info)
name=zhangsan, age=30, sex=male
Si se emplean comillas triples
Grandes piezas de las necesidades de texto que se guardan, con comillas triples para definir la cadena. Por ejemplo: Guardar un gran segmento de la instrucción SQL. Las tres cadenas intermedias se citan cadena como un valor.
gramática
Val / var nombre de variable = "" "una cadena
de cuerda 2" ""
Código de referencia
val sql = """select
| *
| from
| t_user
| where
| name = "zhangsan""""
println(sql)
tipos y operadores de datos
El tipo de Scala mayoría operador como Java
Tipos de datos
tipo subyacente |
tipo Descripción |
Byte |
entero con signo de 8 bits |
Corto |
entero con signo de 16 bits |
En t |
entero con signo de 32 bits |
Largo |
entero con signo de 64 bits |
Carbonizarse |
16 caracteres Unicode sin firmar |
Cuerda |
secuencia de tipo Char (string) |
Flotador |
32-bit de punto flotante de precisión |
Doble |
64 pares coma flotante de precisión |
Boole |
verdadero o falso |
Nótese la diferencia con el tipo Java Scala
- Scala de todos los tipos de uso de una letra mayúscula al principio
- Utilizar el plástico Int lugar de enteros
- las variables definidas Scala puede tipo de escritura no, por lo que el compilador automáticamente inferir Scala
operadores
categoría |
operadores |
Los operadores aritméticos |
+, -, *, / |
Los operadores relacionales |
>, <, ==,! =,> =, <= |
Los operadores lógicos |
&&, || ,! |
- Scala no, +, - operadores
- A diferencia de Java, en la Scala se puede utilizar directamente == ,! = Comparación, que representan consistente con los iguales. Y el valor de referencia se comparan dos objetos, usando la ecuación
Ejemplos
Hay una cadena de caracteres "abc", y luego crear un segundo valores de cadena: después de la primera concatenación de cadenas en una cadena vacía.
A continuación, se comparan estas dos cadenas son iguales, entonces el valor de referencia para ver si son iguales.
Código de referencia
val str1 = "abc"
val str2 = str1 + ""
str1 == str2
str1.eq(str2)
Tipo de Scala jerarquía
tipo |
explicación |
Alguna |
Todos los tipos de la clase padre, entonces hay dos sub-clases y AnyVal AnyRef |
AnyVal |
Todos los tipos numéricos de los padres |
AnyRef |
Todos los tipos de objeto (tipo de referencia) padre |
Unidad |
Representa el vacío, la unidad es una subclase de AnyVal. Es similar a Java en el vacío, pero orientado a objetos Scala más de Java |
Nulo |
Null es una subclase de AnyRef, lo que significa que es una subclase de todos los tipos de referencia. nula puede ser asignado a cualquier tipo de objeto |
Nada |
Todos los tipos de subclase no pueden crear directamente la instancia de tipo, cuando un método lanza una excepción, el tipo de retorno no es nada, porque nada es una subclase de todas las clases, entonces se puede asignar a cualquier tipo |
nada
def main(args: Array[String]): Unit = {
val c = m3(1,0)
}
def m3(x:Int, y:Int):Int = {
if(y == 0) throw new Exception("这是一个异常")
x / y
}
problema
El código siguiente si hay un problema?
val b:Int = null
Scala explicará el error:
Tipo de Null no convierte tipo Int describe tipo Null tipo Int no es una subclase de
expresión condicional
Es decir, si la expresión expresión condicional. Scala sintaxis de la expresión condicional y Java el mismo.
Han devuelto si el valor de
Código de referencia
scala> val sex = "male"
sex: String = male
scala> val result = if(sex == "male") 1 else 0
result: Int = 1
Java no es el mismo,
- En la Scala, la expresión condicional también devuelve un valor de
- En el Scala sin una triple expresión, expresiones alternativas se pueden utilizar si un triplete de expresiones
bloque de expresión
- Scala usando {} representa una expresión bloque
- Y si las expresiones, el bloque es también un valor de la expresión
- El valor es el valor de la última expresión
problema
Será el siguiente código, ¿cuál es el valor de una variable?
scala> val a = {
| println("1 + 1")
| 1 + 1
| }
circulación
En la Scala puede ser utilizado para y al mismo tiempo, pero por lo general se recomienda para la expresión, porque durante más sintaxis de la expresión concisa
para la expresión
gramática
para (i <- expresión / matriz / set) {
// expresión
}
ciclo simple
Utilizar para la impresión digital expresión 1-10
Código de Referencia 1
scala> val nums = 1.to(10)
nums: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
scala> for(i <- nums) println(i)
código de referencia 2
// llamada al método infija
scala> for(i <- 1 to 10) println(i)
bucle anidado
Uso para la expresión, a raíz de caracteres de impresión
*****
*****
*****
Código de referencia
for(i <- 1 to 3; j <- 1 to 5) {print("*");if(j == 5) println("")}
guardia
para la expresión puede ser añadido si el juez sentencia, el juez si se llama a los guardias. Podemos utilizar la marca guardia de expresión para más concisa.
gramática
para (i <- expresión / matriz / set si la expresión ) {
// expresión
}
Ejemplos
Uso para la expresión puede imprimir entre 1 y 10 números divisible por 3
Código de referencia
// añadir un guardia, puede imprimir divisible por 3 digitales
for(i <- 1 to 10 if i % 3 == 0) println(i)
para derivaciones
En el bucle, el rendimiento de expresión puede ser usado para construir un conjunto, que utilizamos para la expresión de rendimiento derivaciones llamado
Ejemplos
Generar un conjunto de 10, 20 ... 100
Código de referencia
// para la derivación: para la expresión empieza a ceder, para que un conjunto de construcciones de expresión
val v = for(i <- 1 to 10) yield i * 10
while
Scala de Java, mientras que bucle y es consistente
Ejemplos
Impresión digital 1-10
Código de referencia
scala> var i = 1
i: Int = 1
scala> while(i <= 10) {
| println(i)
| i = i+1
| }
romper 和 continúan
- Scala, no hay una ruptura / continuar palabra clave
- Si tiene que usar pausa / continuar, tenemos que utilizar las clases de rotura scala.util.control empaquetar breable y ruptura método .
alcanzar el punto
uso
- Descansos Importar paquete scala.util.control.Breaks._ importación
- La expresión para uso envoltura rompible
- para las expresiones donde sea necesario para salir del bucle, añadir la pausa () llamada al método
Ejemplos
El uso de la impresión digital para expresiones 1-100, si el número 50 para llegar a la salida para la expresión
Código de referencia
// 导入scala.util.control包下的Break
import scala.util.control.Breaks._
breakable{
for(i <- 1 to 100) {
if(i >= 50) break()
else println(i)
}
}
Continuar para lograr
uso
- continuar con la implementación de la ruptura es similar, pero un poco diferente:
- Seguir logrando rompible {} es la expresión para el cuerpo comprende hasta
Ejemplos
Impresión digital 1-100, de expresiones de uso para atravesar, si el número es divisible por 10, no se imprimen
// 导入scala.util.control包下的Break
import scala.util.control.Breaks._
for(i <- 1 to 100 ) {
breakable{
if(i % 10 == 0) break()
else println(i)
}
}