스칼라 기본 구문


이전에 Java 프로그래머였으며 Java 언어의 기본을 알고 있다면 Scala의 기본 구문을 빠르게 배울 수 있습니다.

Scala와 Java의 가장 큰 차이점은 Scala 문 끝에 있는 세미콜론 ;이 선택 사항이라는 것입니다.

스칼라 프로그램은 서로의 메소드를 호출하여 메시지 전달을 구현하는 객체 모음이라고 생각할 수 있습니다. 다음으로, 클래스, 객체, 메소드, 인스턴스 변수의 개념을 이해해 보겠습니다.

  • 객체 - 객체에는 속성과 동작이 있습니다. 예를 들어 개의 속성에는 색깔, 이름, 행동에는 짖기, 달리기, 먹기 등이 포함됩니다. 객체는 클래스의 인스턴스입니다.

  • 클래스 - 클래스는 객체의 추상화이고 객체는 클래스의 구체적인 인스턴스입니다.

  • 메서드 - 메소드는 기본 동작을 설명합니다. 클래스에는 여러 메소드가 포함될 수 있습니다.

  • 필드 - 각 개체에는 필드인 고유한 인스턴스 변수 세트가 있습니다. 객체 속성은 필드에 값을 할당하여 생성됩니다.


첫 번째 Scala 프로그램

인터랙티브 프로그래밍

인터랙티브 프로그래밍은 스크립트 파일 생성이 필요하지 않으며 다음과 같이 호출할 수 있습니다. 명령:

$ scala
Welcome to Scala version 2.11.7 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_31).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 1 + 1
res0: Int = 2

scala> println("Hello World!")
Hello World!

scala>

스크립트 형식

HelloWorld.scala 파일을 생성하여 코드를 실행할 수도 있습니다. HelloWorld.scala 코드는 다음과 같습니다.

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

다음으로 scalac 명령을 사용하여 컴파일합니다.

$ scalac HelloWorld.scala 
$ ls
HelloWorld$.class	HelloWorld.scala
HelloWorld.class

컴파일 후 JVM(Java Virtual Machine)에서 실행할 수 있는 HelloWorld.class 파일이 디렉터리에 생성되는 것을 볼 수 있습니다.

컴파일 후 다음 명령을 사용하여 프로그램을 실행할 수 있습니다.

$ scala HelloWorld
Hello, world!
온라인 예제»

기본 구문

Scala 기본 구문 다음 사항에 주의해야 합니다.

  • 대소문자 구분 - Scala는 대소문자를 구분합니다. 즉, Hello와 hello 식별자는 Scala에서 서로 다른 의미를 가집니다.

  • 클래스 이름 - 모든 클래스 이름의 첫 글자를 대문자로 표기합니다.

    클래스 이름을 구성하는 데 여러 단어가 필요한 경우 각 단어의 첫 글자를 대문자로 표시합니다.

    예: class MyFirstScalaClass

  • 메소드 이름 - 모든 메소드 이름의 첫 글자는 소문자입니다.

    여러 단어를 사용하여 메소드 이름을 구성하는 경우 각 단어의 첫 글자를 대문자로 사용해야 합니다.

    예: def myMethodName()

  • 프로그램 파일 이름 - 프로그램 파일 이름은 정확히 일치해야 합니다. 개체 이름 .

    파일을 저장할 때 개체 이름(Scala는 대소문자를 구분함)을 사용하여 저장하고 파일 확장자로 ".scala"를 추가해야 합니다. (파일 이름과 개체 이름이 일치하지 않으면 프로그램이 컴파일되지 않습니다.)

    예: "HelloWorld"가 객체의 이름이라고 가정합니다. 그런 다음 파일은 'HelloWorld.scala"

    로 저장되어야 합니다.
  • def main(args: Array[String]) - Scala 프로그램은 모든 Scala 프로그램의 필수 프로그램 입력 부분인 main() 메서드에서 처리를 시작합니다.


식별자

Scala는 영숫자 및 기호의 두 가지 형태의 식별자를 사용할 수 있습니다.

문자 번호는 문자나 밑줄로 시작하고 문자나 숫자가 뒤에 올 수 있습니다. "$" 기호도 스칼라에서 문자로 간주됩니다. 그러나 "$"로 시작하는 식별자는 Scala 컴파일러에서 생성된 식별자에 사용하도록 예약되어 있으므로 애플리케이션은 충돌을 피하기 위해 "$"로 시작하는 식별자를 사용하지 않아야 합니다.

Scala의 명명 규칙은 toString과 같이 첫 문자가 소문자인 Java와 유사한 Camel 명명 규칙을 채택합니다. 클래스 이름의 첫 문자는 여전히 대문자로 표시됩니다. 또한 충돌을 피하기 위해 밑줄로 끝나는 식별자를 사용하지 마십시오. 기호 식별자에는 다음과 같은 +, :, ? 등과 같은 하나 이상의 기호가 포함됩니다.

+ ++ ::: < ?> :->

Scala는 내부 구현에서 다음과 같이 이스케이프된 식별자를 사용합니다. -> 이 기호를 나타내는 데 더 큰 값이 사용됩니다. 따라서 Java 코드에서 :-> 메소드에 액세스해야 하는 경우 Scala의 내부 이름 $colon$minus$greater를 사용해야 합니다.

혼합 식별자는 영숫자 식별자와 그 뒤에 하나 이상의 기호로 구성됩니다(예: Scala의 + 메서드 내부 구현 이름인 unary_+). 리터럴 식별자는 `x` `yield`와 같이 "를 사용하여 정의된 문자열입니다.

" 사이에 유효한 Scala 식별자를 사용할 수 있으며 Scala는 이를 Scala 식별자로 해석합니다. 일반적인 용도는 항복 방법입니다. Thread.yield()는 Scala의 키워드이므로 Thread.yield()를 사용할 수 없습니다.


Scala 키워드

다음 표에는 scala 예약 키워드가 나열되어 있으며 다음 키워드는 변수로 사용할 수 없습니다.

abstractcasecatchclass
defdoelseextends
falsefinalfinallyfor
forSomeifimplicitimport
lazymatchnewnull
objectoverridepackageprivate
protectedreturnsealedsuper
thisthrowtraittry
truetypevalvar
whilewithyield 
-:==>
<-<:<%>:
#@


Scala 주석

Scala는 Java와 유사하며 한 줄 주석과 여러 줄 주석을 지원합니다. 여러 줄 주석은 중첩될 수 있지만 올바르게 중첩되어야 합니다. 하나의 주석 시작 기호는 하나의 끝 기호에 해당합니다. Scala 컴파일 중에는 주석이 무시됩니다. 예는 다음과 같습니다:

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

빈 줄과 공백

줄에 공백이나 주석만 포함되어 있으면 Scala는 이를 공백으로 간주합니다. 라인을 무시하고 무시합니다. 태그는 공백이나 주석으로 구분할 수 있습니다.


Newline

Scala는 줄 지향 언어이므로 문장은 세미콜론(;)이나 줄 바꿈으로 끝날 수 있습니다. Scala 프로그램에서 명령문 끝에 있는 세미콜론은 일반적으로 선택 사항입니다. 원하는 경우 하나만 입력할 수 있지만 하나만 입력할 수 있습니다. 성명서를 작성할 필요가 없습니다. 반면에 한 줄에 여러 명령문을 작성하는 경우 세미콜론이 필요합니다. 예를 들어,

val s = "php中文网"; println(s)

Scala package

define package

Scala는 package 키워드를 사용하여 패키지를 정의합니다. 스칼라:

첫 번째 방법은 Java와 동일하며 파일 헤더에 패키지 이름을 정의합니다. 이 방법에서는 모든 후속 코드가 패키지에 배치됩니다. 예:

package com.php
class HelloWorld

두 번째 방법은 다음과 같이 C#과 다소 유사합니다.

package com.php {
  class HelloWorld 
}

두 번째 방법을 사용하면 하나의 파일에 여러 패키지를 정의할 수 있습니다.

참조

Scala는 import 키워드를 사용하여 패키지를 참조합니다.

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는 항상 Introducing java. lang._, scala._ 및 Predef._는 scala로 시작하는 패키지를 사용할 때 왜 scala를 생략하는지 설명할 수도 있습니다.