728x90

=>
: 이 화살표는 스칼라의 함수 리터럴이다.
예제에서 사용한 함수 리터럴은 파일의 각 줄을 문자열 형태로 받아 이 줄에 해당 문자열 여부에 따라 True/False 값을 반환하는 익명함수를 정의했다.

함수 리터럴로 정의한 익명 함수는 굵은 화살표의 좌변을 우변으로 변환해 반환한다.
이 예제에서는 좌변의 String(줄) 을 Boolean(contains 함수의 결과)으로 변환한 후 함수 결과로 반환했다.


filter
: licLines 컬렉션의 각 요소 (파일의 각 줄) 을 굵은 화살표로 정의한 익명 함수에 전달하고, 익명 함수가 True로 판별한 요소만으로 구성된 새로운 컬랙션(ddLines) 을 반환한다.

named fuction을 정의해 할 수도 있음.


- 플레이스 홀더

위의 예제 코드에서 사용된 플레이스홀더 문법은
' 이 함수가 호출될 때 인자로 전달된 객체가 무엇이든
이 객체의 toString을 호출한 후 reverse를 호출하라 ' 는 의미.

플레이스홀더라고 하는 이유는 함수 호출과 전달되는 인수가 차지할 자리를 미리 선점하기 때문이다.



- mkString

mkString 은 배열의 모든 요소를 문자열 하나로 병합한다.
메서드에 전달한 인수는 문자열의 구분자로 사용한다.





--> 복습

ids RDD의 요소를 String 에서 Int 로 변환한 것!




'Language > Scala' 카테고리의 다른 글

Scala (1)  (0) 2022.07.10
728x90

- 객체지향 프로그래밍 언어 + 함수형 프로그래밍 요소가 결합된 언어이다. 

 

 

- 기존 Java 의 복잡성을 극복하기위해 개발된 언어이다.

  때문에 간결한 소스코드를 사용하여 Java에서 구현할 수 있는 기능을 구현 할 수 있다.

 

 

-JVM 언어로, 기존의 JAVA 라이브러리를 그대로 사용할 수 있다.

  (서버 애플리케이션이나 자바와 비슷한 다른 프로그램을 쓰는 모든 사람들에게 추천)

 

 

 

Why Scala?

1. 의도하지않은 이슈들로부터 애플리케이션을 안정화시킬 수 있다. 

변하지않는 데이터 구조, 영향받지않는 환경의 문법들로부터 코드가 더 안전해지고, 견고해지며 더 이해하기 쉬워진다. 

 

 

2. 코드가 더 간결해지고 표현력있어 질 것.

 

파이썬이나 자바스크립트같은 언어를 써 왔다면,

이미 짧고 간결한 문법에 익숙하고 한 줄에 맵, 필터, 리듀스같은 오퍼레이션을 쓰는데 익숙할 것이다.

하지만 스칼라를 사용함으로써 좀 더 복잡해지는 대신, 안정성과 퍼포먼스를 높일 수 있을 것이다. 

 

자바, C 같은 정적인 언어에 더 친숙하다면, 다른 컴파일언어에서 볼 수 없는 명시적인 타입, 코드를 제거할 수 있을 것이다. 

 

 

 

 

 

 기본 구조 및 HelloWorld

object HelloWorld {
 def main(args: Array[String]) {
   println("Hello, world!")  
   }
 }

-Scala의 main 함수는 static이 아니다. 정적 멤버 개념이 존재하지 않는다. (함수, 필드 모두)

 

- 주석은 자바와 같다.

    // 한 줄 주석

   /* 여러 줄 주석 */

 

 

 

자료형

Byte   	8 bit . Range from -128 to 127
Short	16 bit . Range -32768 to 32767
Int	        32 bit . Range -2147483648 to 2147483647
Long  	64 bit
Float	 32 bit IEEE 754 single-precision float
Double	 64 bit IEEE 754 double-precision float
Char	 16 bit unsigned Unicode character
String	A sequence of Chars
Boolean	Either the literal true or the literal false
Unit    Corresponds to no value
Null	  ull or empty reference
Nothing	 The subtype of every other type;
Any	     The supertype of any type; 
AnyRef	  The supertype of any reference type

자바에서의 자료형은

기본 자료형(int, short, long, float, double, byte, char, boolean) 과

참조 자료형(기본 자료형의 조합으로 생성한 클래스)으로 나뉜다.

이는 성능에는 도움이 될 지 몰라도 기본 자료형과 참조 자료형 간의 변환 문제로 언어의 표현이 복잡해지는 경향이 있다.

 

이에 반해 스칼라에서는 스몰토크 루비와 같이 모든 자료형을 객체로 취급하고 있다.

그 예로 3 + 4 와 같은 수식은

정수 3의 메소드 +를 4라는 정수 인자값으로 호출한다고 표현하여 (3).+(4) 와 같이 표현할 수 있다.

 

스칼라의 모든 객체는 scala 패키지의 Any를 최상위 클래스로 값(AnyVal)과 레퍼런스(AnyRef)를 모두 아우르고 있다.

 

 

 

ex.

Quick Sort 프로그램

def qsort(arr: Array[Int]): Array[Int] = {
  def swap(i: Int, j: Int): Unit = {
    val tmp = arr(i)
    arr(i) = arr(j)
    arr(j) = tmp
  }

  def partition(left: Int, right: Int): Unit =
    if (right <= left ) ()
    else {
      val pivot = arr((left + right) / 2)
      var i = left
      var j = right

      while (i <= j) {
        while (arr(i) < pivot) i += 1
        while (arr(j) > pivot) j -= 1

        if (i <= j) {
          swap(i, j)

          i += 1
          j -= 1
        }
      }

    if (left < j) partition(left, j)
    if (j < right) partition(i, right)
  }

  partition(0, arr.length - 1)
  arr
}

 

 

 

 

'Language > Scala' 카테고리의 다른 글

scala (2) 함수/플레이스홀더/mkString  (0) 2022.08.21

+ Recent posts