scala/basic
-
Pattern Match 조합 - Email 주소 예제scala/basic 2021. 7. 27. 17:49
문제 email 의 username 부분이 동일한 문자열로 2번 반복되면서 모두 대문자인지 여부를 확인할 수 있는 아래 함수를 작성하라 def userTwiceUpper(s: String): String // 호출 결과 예시 userTwiceUpper("DIDI@hotmail.com") // match: DI in domain hotmail.com userTwiceUpper("DIDO@hotmail.com") // no match userTwiceUpper("didi@hotmail.com") // no match Code "Programming in Scala" 책에 나오는 코드 object PatternMatchTest { object Email { def apply(user: String, domai..
-
enum 을 사용한 모델링scala/basic 2021. 7. 23. 23:20
문제 연령대를 계산해 주는 다음 함수를 작성하라 /** * age 값이 * - 0 이하면 "~0" 리턴 * - 1~9 값 이면 "1~9" 리턴 * - 10~59 값 이면 "10~59" 리턴 * - 60 이상이면 "60~" 리턴 */ def ageGroup(age: Int): String = ??? Code scala standard library 로 제공되는 enum 은 기능이 빈약하니 enumeratum 을 활용해 작성한다. import AgeGroup.{Elder, Interval, Invalid} import enumeratum._ import scala.collection.immutable sealed trait AgeGroup extends EnumEntry { self => override d..
-
typeclass 는 언제 사용하면 좋을까?scala/basic 2021. 6. 9. 10:44
https://w.pitula.me/2017/typeclasses-vs-polymorphism/ Typeclass: when inheritance is not enough If you ask Wikipedia about polymorphism, it will tell you that it is about “provisioning a single interface to entities of different types”. And this is true(remember that interface here and in whole post means API, not some element that is part of the w.pitula.me 1. 기존 class 에 새로운 method 를 추가할 때 2. 동..
-
Dark Syntax Sugarscala/basic 2021. 5. 23. 15:30
Single Abstract Method trait Action { def act(x: Int): Unit } // 다음과 같이 사용해야 하지만 val action: Action = new Action { override def act(x: Int): Unit = println(x) } // 아래와 같이 표현하는 것도 가능 val action: Action = (x: Int) => println(x) // 비슷하게 아래와 같이 Thread 생성 가능 val thread: Thread = new Thread(() => println("run")) Methods with ':' are special class MyStream[T] { def -->:(value: T): MyStream[T] = ??? } v..
-
Future 의 concurrency controlscala/basic 2021. 3. 28. 15:52
playframework 에서 1,000 개의 DB item 을 빠르게 조회할 필요가 있었다. play-ws 를 사용하면 Http Api 호출을 async action 으로 처리할 수 있다. 그런데 1,000 번의 Http Api 호출을 순식간에 진행해 DB 에 무리가 갈 수 있다. 오히려 성능을 제한해 한번에 100 건씩 호출해 10 번에 나누어서 처리하고 싶다. 아래 글을 참고해 코딩해 봤다. stackoverflow.com/questions/49924941/how-to-control-the-concurrency-of-future-sequence-in-scala How to control the concurrency of future.sequence in scala? I know that I can ..
-
Scala Learningscala/basic 2021. 3. 28. 15:28
Coding GuideLihaoyi Strategic Scala Style: Principle of Least Poweralexandru scala-best-practicesdatabricks scala-style-guidetwitter scala school Design PatternsDesign patterns in ScalaFunctional Programming Design Patterns Booksscala 는 아래와 같이 차례로 공부하면 좋을 것 같다.3,4 번 순서는 바뀌어도 되고, 6 은 너무 어렵기 때문에 Functional Programming 을 깊게 공부할려고 할 경우에만 보자. 1. 러닝 스칼라 러닝 스칼라객체지향 프로그래머를 위한 최적의 스칼라 입문서!왜 스칼라를 배울까? 이 ..