Scala-기본 구문

Java에 대해 잘 이해하고 있다면 Scala를 배우는 것이 매우 쉬울 것입니다. Scala와 Java의 가장 큰 구문 차이는 ';' 줄 끝 문자는 선택 사항입니다.

Scala 프로그램을 고려할 때 서로의 메서드를 호출하여 통신하는 개체의 모음으로 정의 할 수 있습니다. 이제 클래스, 객체, 메서드 및 인스턴스 변수가 무엇을 의미하는지 간략하게 살펴 보겠습니다.

  • Object− 개체에는 상태와 동작이 있습니다. 객체는 클래스의 인스턴스입니다. 예 : 개는 상태 (색, 이름, 번식 및 행동)를 가지고 있습니다 (흔들기, 짖기, 먹기).

  • Class − 클래스는 클래스와 관련된 동작 / 상태를 설명하는 템플릿 / 청사진으로 정의 할 수 있습니다.

  • Methods− 방법은 기본적으로 행동입니다. 클래스에는 여러 메서드가 포함될 수 있습니다. 로직이 작성되고 데이터가 조작되고 모든 작업이 실행되는 메서드에 있습니다.

  • Fields− 각 개체에는 필드라고하는 고유 한 인스턴스 변수 집합이 있습니다. 개체의 상태는 이러한 필드에 할당 된 값에 의해 생성됩니다.

  • Closure − A closure 이 함수 외부에서 선언 된 하나 이상의 변수 값에 따라 반환 값이 달라지는 함수입니다.

  • Traits− 특성은 메서드 및 필드 정의를 캡슐화 한 다음 클래스로 혼합하여 재사용 할 수 있습니다. 특성은 지원되는 메서드의 서명을 지정하여 개체 유형을 정의하는 데 사용됩니다.

첫 번째 스칼라 프로그램

Scala 프로그램을 두 가지 모드로 실행할 수 있습니다. interactive mode 그리고 다른 하나는 script mode.

대화 형 모드

명령 프롬프트를 열고 다음 명령을 사용하여 Scala를 엽니 다.

\>scala

Scala가 시스템에 설치되어 있으면 다음 출력이 표시됩니다.

Welcome to Scala version 2.9.0.1
Type in expressions to have them evaluated.
Type :help for more information.

Scala 프롬프트 오른쪽에 다음 텍스트를 입력하고 Enter 키를 누릅니다.

scala> println("Hello, Scala!");

다음 결과가 생성됩니다-

Hello, Scala!

스크립트 모드

다음 지침에 따라 스크립트 모드에서 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
   }
}

파일을 다른 이름으로 저장- HelloWorld.scala.

명령 프롬프트 창을 열고 프로그램 파일이 저장된 디렉토리로 이동하십시오. 'scalac'명령은 Scala 프로그램을 컴파일하는 데 사용되며 현재 디렉토리에 몇 개의 클래스 파일을 생성합니다. 그들 중 하나는HelloWorld.class. 이것은 '를 사용하여 Java Virtual Machine (JVM)에서 실행되는 바이트 코드입니다.scala'명령.

다음 명령을 사용하여 Scala 프로그램을 컴파일하고 실행합니다.

\> scalac HelloWorld.scala
\> scala HelloWorld

산출

Hello, World!

기본 구문

다음은 Scala 프로그래밍의 기본 구문과 코딩 규칙입니다.

  • Case Sensitivity − Scala는 대소 문자를 구분하므로 식별자를 의미합니다. Hellohello Scala에서 다른 의미를 가질 것입니다.

  • Class Names− 모든 클래스 이름에 대해 첫 글자는 대문자 여야합니다. 여러 단어를 사용하여 클래스 이름을 구성하는 경우 각 내부 단어의 첫 글자는 대문자 여야합니다.

    Example − MyFirstScalaClass 클래스.

  • Method Names− 모든 메소드 이름은 소문자로 시작해야합니다. 여러 단어를 사용하여 메서드 이름을 구성하는 경우 각 내부 단어의 첫 글자는 대문자 여야합니다.

    Example − def myMethodName ()

  • Program File Name− 프로그램 파일의 이름은 개체 이름과 정확히 일치해야합니다. 파일을 저장할 때 객체 이름 (Scala는 대소 문자를 구분 함)을 사용하여 저장하고 '.scala'이름 끝에. (파일 이름과 개체 이름이 일치하지 않으면 프로그램이 컴파일되지 않습니다.)

    Example− 'HelloWorld'가 개체 이름이라고 가정합니다. 그런 다음 파일은 'HelloWorld.scala'로 저장되어야합니다.

  • def main(args: Array[String]) − Scala 프로그램 처리는 모든 Scala 프로그램의 필수 부분 인 main () 메서드에서 시작됩니다.

스칼라 식별자

모든 Scala 구성 요소에는 이름이 필요합니다. 개체, 클래스, 변수 및 메서드에 사용되는 이름을 식별자라고합니다. 키워드는 식별자로 사용할 수 없으며 식별자는 대소 문자를 구분합니다. Scala는 네 가지 유형의 식별자를 지원합니다.

영숫자 식별자

영숫자 식별자는 문자 또는 밑줄로 시작하며 그 뒤에 추가 문자, 숫자 또는 밑줄이 올 수 있습니다. '$'문자는 Scala에서 예약 된 키워드이며 식별자에 사용해서는 안됩니다.

다음은 legal alphanumeric identifiers

age, salary, _value,  __1_value

다음은 illegal identifiers

$salary, 123abc, -salary

운영자 식별자

운영자 식별자는 하나 이상의 운영자 문자로 구성됩니다. 연산자 문자는 +, :,?, ~ 또는 #과 같은 인쇄 가능한 ASCII 문자입니다.

다음은 법적 운영자 식별자입니다-

+ ++ ::: <?> :>

Scala 컴파일러는 내부적으로 연산자 식별자를 "mangle"하여 $ 문자가 포함 된 합법적 인 Java 식별자로 변환합니다. 예를 들어, 식별자 :->는 내부적으로 $ colon $ minus $ greater로 표시됩니다.

혼합 식별자

혼합 식별자는 밑줄과 연산자 식별자가 뒤 따르는 영숫자 식별자로 구성됩니다.

다음은 합법적 인 혼합 식별자입니다.

unary_+,  myvar_=

여기서 메서드 이름으로 사용되는 unary_ +는 단항 + 연산자를 정의하고 메서드 이름으로 사용되는 myvar_ =는 할당 연산자 (연산자 오버로딩)를 정의합니다.

리터럴 식별자

리터럴 식별자는 백틱 (`...`)으로 묶인 임의의 문자열입니다.

다음은 법적 리터럴 식별자입니다-

`x` `<clinit>` `yield`

Scala 키워드

다음 목록은 Scala의 예약어를 보여줍니다. 이러한 예약어는 상수, 변수 또는 기타 식별자 이름으로 사용할 수 없습니다.

요약 케이스 잡기 수업
데프 하다 그밖에 연장하다
그릇된 결정적인 드디어 ...에 대한
일부 만약 절대적인 수입
게으른 시합 새로운 없는
목적 우세하다 꾸러미 은밀한
보호 반환 봉인 감독자
던지다 특성 시험
진실 유형 Var
동안 수율  
- : = =>
<- <: <% > :
# @

Scala의 주석

Scala는 Java와 매우 유사한 한 줄 및 여러 줄 주석을 지원합니다. 여러 줄 주석은 중첩 될 수 있지만 적절하게 중첩되어야합니다. 주석에서 사용할 수있는 모든 문자는 Scala 컴파일러에서 무시됩니다.

object HelloWorld {
   /* This is my first java program.  
    * This will print 'Hello World' as the output
    * This is an example of multi-line comments.
    */
   def main(args: Array[String]) {
      // Prints Hello World
      // This is also an example of single line comment.
      println("Hello, world!") 
   }
}

빈 줄과 공백

공백 만 포함하는 줄 (가능하면 주석 포함)을 빈 줄이라고하며 Scala는이를 완전히 무시합니다. 토큰은 공백 문자 및 / 또는 주석으로 구분할 수 있습니다.

개행 문자

Scala는 문장이 세미콜론 (;) 또는 줄 바꿈으로 종료 될 수있는 줄 지향 언어입니다. 문 끝에있는 세미콜론은 일반적으로 선택 사항입니다. 원하는 경우 하나를 입력 할 수 있지만 명령문이 한 줄에 표시되는 경우에는 입력 할 필요가 없습니다. 반면에 한 줄에 여러 문을 작성하는 경우 세미콜론이 필요합니다. 아래 구문은 여러 문장의 사용법입니다.

val s = "hello"; println(s)

Scala 패키지

패키지는 명명 된 코드 모듈입니다. 예를 들어 Lift 유틸리티 패키지는 net.liftweb.util입니다. 패키지 선언은 다음과 같이 소스 파일에서 주석이 아닌 첫 번째 줄입니다.

package com.liftcode.stuff

현재 컴파일 범위에서 참조 할 수 있도록 Scala 패키지를 가져올 수 있습니다. 다음 문은 scala.xml 패키지의 내용을 가져옵니다.

import scala.xml._

예를 들어 scala.collection.mutable 패키지에서 HashMap과 같은 단일 클래스와 객체를 가져올 수 있습니다.

import scala.collection.mutable.HashMap

예를 들어 scala.collection.immutable 패키지의 TreeMap 및 TreeSet과 같이 단일 패키지에서 둘 이상의 클래스 또는 객체를 가져올 수 있습니다.

import scala.collection.immutable.{TreeMap, TreeSet}

동적 적용

동적 호출을 가능하게하는 마커 특성. 이 트레이 트의 인스턴스 x는 임의의 메서드 이름 meth 및 인수 목록 인수에 대한 메서드 호출 x.meth (args)를 허용하고 임의 필드 이름 필드에 대한 필드 액세스 x.field를 허용합니다. 이 기능은 Scala-2.10에서 도입되었습니다.

호출이 x에서 기본적으로 지원되지 않는 경우 (즉, 유형 검사가 실패하는 경우) 다음 규칙에 따라 다시 작성됩니다.

foo.method("blah") ~~> foo.applyDynamic("method")("blah")
foo.method(x = "blah") ~~> foo.applyDynamicNamed("method")(("x", "blah"))
foo.method(x = 1, 2) ~~> foo.applyDynamicNamed("method")(("x", 1), ("", 2))
foo.field ~~> foo.selectDynamic("field")
foo.varia = 10 ~~> foo.updateDynamic("varia")(10)
foo.arr(10) = 13 ~~> foo.selectDynamic("arr").update(10, 13)
foo.arr(10) ~~> foo.applyDynamic("arr")(10)