Skip to content

Instantly share code, notes, and snippets.

@btdrawer
Created November 25, 2020 19:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save btdrawer/84f6426343962dd0b5d5362de4274a9b to your computer and use it in GitHub Desktop.
Save btdrawer/84f6426343962dd0b5d5362de4274a9b to your computer and use it in GitHub Desktop.
object ScalaWorkshopExample extends App {
class User(val name: String) {
def greet(): Unit = println(s"Hi, my name is $name")
}
class Message(val sender: User, val content: String)
abstract class Chat(val members: List[User], val messages: List[Message]) {
def printMessages(): Unit = messages.foreach(m =>
println(s"Sender: ${m.sender.name}, message: ${m.content}")
)
def getUserMessages(user: User): List[Message] =
messages.filter(_.sender == user)
def sendMessage(message: Message): Chat
}
class GroupChat(val name: String, override val members: List[User], override val messages: List[Message])
extends Chat(members, messages) {
override def sendMessage(message: Message): Chat = new GroupChat(name, members, messages :+ message)
}
class DirectChat(override val members: List[User], override val messages: List[Message])
extends Chat(members, messages) {
override def sendMessage(message: Message): Chat = new DirectChat(members, messages :+ message)
}
trait Encrypted {
def encrypt(message: Message): Message = new Message(
message.sender,
message.content.replaceAll("/n/g", "l")
)
}
class EncryptedDirectChat(override val members: List[User], override val messages: List[Message])
extends DirectChat(members, messages) with Encrypted
object AdminMethods {
def deleteGroupChat(chat: GroupChat): Unit = ???
}
implicit def fromStringToUser(name: String): User = new User(name)
"Ben".greet() // new User("Ben").greet()
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment