본문 바로가기

프로그래밍/scala

스칼라 match 표현식, 재귀호출 및 yeild 사용 예제 스칼라 match 표현식 예제 def doMatch(firstArg: String): String = { firstArg match { case "salt" => "pepper" case "chips" => "salsa" case "eggs" => "bacon" case _ => "huh?" } // 반환값을 명시하지 않으려면 함수의 마지막에 선언/할당 구문이 없어야 한다. } break와 continue문 없이 살기// args = -1.scala 1.scala -2.scala 2.scala -abc.c -abc.scala a.c xyz.scala def doWhileLoop(args: Array[String]) { var i = 0 while (i < args.length) { if (!args(i).. 더보기
Maven + Java + Spark 연동 개발 메이븐 패키지를 맥에 설치brew install maven 메이븐 기본 아키타입을 통해서 자바 테스트 앱 생성mvn archetype:generate -DgroupId={project-packaging} -DartifactId={project-name} -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false bash$> mvn archetype:generate -DgroupId=com.psyoblade.dm4ir \-DartifactId=foo \-DarchetypeArtifactId=maven-archetype-quickstart \-DinteractiveMode=false 실행 후에 아래와 같이 pom.xml 파일을 통해 확인.. 더보기
스칼라 함수형 객체 클래스 선언, 메소드 오버라이드, 인스턴스 생성 시 전제조건preconditionimport scala.language.implicitConversions // 이 문구를 명시적으로 넣어줘야 아래의 경고 문구가 뜨지 않는다.// warning: implicit conversion method intToRational should be enabled class Rational(n: Int, d: Int) { // constructur val g: Int = gcd(n.abs, d.abs) val numer: Int = n / g // 넘어온 객체의 필드에 접근하기 위해서는 필드 정의가 반드시 필요함 val denom: Int = d / g override def toString = if (d == 1) n.. 더보기
스칼라의 기본 타입과 연산 리터럴literal 은 상수 값을 코드에 직접 적는 방법을 말하며 자바와 동일하며, 문자열의 경우 참고로 아래와 같다.val c = '\101' // Char A 와 같이 문자 코드 포인트Unicode character code point 통해 표현val d = '\u0041' // 유니코드 문자를 \u + 4자리 16진수를 통해 표현 val B\u0041\u0044 = 1 // 같이 BAD 변수의 값이 1을 지정 - 모든 변수 함수 코드까지고 유니코드로 문자열 특수문자와 무관하게 출력println("""|문장의 앞 공백을 제거하고, |여러 "특수문자"를 섞어 쓰는 예제.""".stripMargin) 심볼 리터럴은 'ident 라고 사용하는 경우 컴파일러가 Symbol("cymbal")이라는 팩토리 메소.. 더보기
스칼라의 클래스와 객체 스칼라는 항상 java.lang과 scala 패키지의 멤버를 암시적으로 임포트한다. 즉, println 함수는 Predef의 println 함수를 호출하는 것이며, 이는 다시 Console.println을 호출하게 되어 최종 콘솔을 통해 문자열이 출려괴는 것이다. assert 역시 Predef.assert 함수가 호출되는 것이다. 클래스 혹은 동반객체는 스크립트가 아니다. 스크립트는 실행되는 동작(action)이 존재하는 경우를 말하고 클래스 및 객체는 정의(transform)만 존재하기 때문이다.여기서 spark 언어와의 연관성이 생각났는데 transform 과 action 작업이 마치 클래스와 스크립트의 차이처럼 생각되기도 한다. 컴파일러를 시작할 때마다, 소스 코드를 처리하기도 전에, jar 파일의.. 더보기
스칼라 두 번째 걸음 스칼라 배열 초기화val strings = new Array[String](3)strings(0) = "zero" // 배열의 크기가 immutable 이지, 값은 mutable 이다strings(1) = "one"strings(2) = "two"strings.foreach(println) 좀 더 간단한 스칼라 배열의 초기화 - 동반객체(companion object)의 factory 함수를 통해 배열을 생성하는 방법val strings = Array("zero", "one", "two") strings.foreach(println) * 여기서 동반객체(companion object)란 class 의 이름과 object의 이름이 동일한 경우를 말하며, 이때 싱글톤 객체의 클래스를 동반 클래스 (compa.. 더보기
스칼라 첫걸음 명령형(imperative) 스타일 1 object print_args_imperative { 2 def main(args: Array[String]) { 3 var i = 0 4 while (i println(arg)) 4 // args.foreach(println) 5 for (arg 더보기